<?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>155422</bug_id>
          
          <creation_ts>2016-03-13 23:09:42 -0700</creation_ts>
          <short_desc>Create a CG ImageDecoder class instead of defining it as CGImageSourceRef</short_desc>
          <delta_ts>2016-03-29 09:18:29 -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>Images</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>155412</dependson>
          <blocked>155322</blocked>
    
    <blocked>155444</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>japhet</cc>
    
    <cc>jonlee</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1174313</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-13 23:09:42 -0700</bug_when>
    <thetext>This is work towards CG asynchronous image decoding: https://bugs.webkit.org/show_bug.cgi?id=155322. The new class is a CG platform class. Most of its code will be extracted from ImageSourceCG.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174314</commentid>
    <comment_count>1</comment_count>
      <attachid>273927</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-13 23:14:02 -0700</bug_when>
    <thetext>Created attachment 273927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174320</commentid>
    <comment_count>2</comment_count>
      <attachid>273928</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-13 23:31:15 -0700</bug_when>
    <thetext>Created attachment 273928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174337</commentid>
    <comment_count>3</comment_count>
      <attachid>273932</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-14 00:30:03 -0700</bug_when>
    <thetext>Created attachment 273932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174341</commentid>
    <comment_count>4</comment_count>
      <attachid>273935</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-14 00:41:26 -0700</bug_when>
    <thetext>Created attachment 273935
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174343</commentid>
    <comment_count>5</comment_count>
      <attachid>273936</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-14 01:08:22 -0700</bug_when>
    <thetext>Created attachment 273936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174353</commentid>
    <comment_count>6</comment_count>
      <attachid>273940</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-14 01:44:45 -0700</bug_when>
    <thetext>Created attachment 273940
patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175419</commentid>
    <comment_count>7</comment_count>
      <attachid>273940</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-16 11:39:51 -0700</bug_when>
    <thetext>Comment on attachment 273940
patch for review

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Move the image decoding code from ImageSourceCG.cpp out to a new class named
&gt; +        ImageDecoder. The purpose of this split is to have the CG ImageSource similar

Why do this just for CG, and not the other platforms?

&gt; Source/WebCore/platform/graphics/BitmapImage.h:285
&gt; +    mutable SubsamplingLevel m_maximumSubsamplingLevel { 0 };

Would be nice to change the other data members to use{ } initialization too.

&gt; Source/WebCore/platform/graphics/cg/ImageDecoder.cpp:-9
&gt; -//
&gt; -//  ImageDecoder.cpp
&gt; -//  WebCore
&gt; -//
&gt; -//  Created by Said Abou-Hallawa on 3/13/16.
&gt; -//
&gt; -//
&gt; -
&gt; -#include &quot;ImageDecoder.hpp&quot;

We should not see this in this patch.

&gt; Source/WebCore/platform/graphics/cg/ImageDecoder.h:-7
&gt; -//
&gt; -//  ImageDecoder.hpp
&gt; -//  WebCore
&gt; -//
&gt; -//  Created by Said Abou-Hallawa on 3/13/16.
&gt; -//
&gt; -//

Ditto.

&gt; Source/WebCore/platform/graphics/cg/ImageDecoder.h:43
&gt; +    virtual ~ImageDecoder() { }

Why virtual?

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:69
&gt; +        delete m_decoder;

Use unique_ptr

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:84
&gt; +    m_decoder = new ImageDecoder();

No bare new!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178225</commentid>
    <comment_count>8</comment_count>
      <attachid>274969</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-25 20:38:28 -0700</bug_when>
    <thetext>Created attachment 274969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178232</commentid>
    <comment_count>9</comment_count>
      <attachid>274970</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-25 21:03:44 -0700</bug_when>
    <thetext>Created attachment 274970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178310</commentid>
    <comment_count>10</comment_count>
      <attachid>274994</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-26 19:06:21 -0700</bug_when>
    <thetext>Created attachment 274994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178319</commentid>
    <comment_count>11</comment_count>
      <attachid>273940</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-26 23:42:17 -0700</bug_when>
    <thetext>Comment on attachment 273940
patch for review

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        ImageDecoder. The purpose of this split is to have the CG ImageSource similar
&gt; 
&gt; Why do this just for CG, and not the other platforms?

Because there are image decoders for other platforms. They are in Source/WebCore/platform/image-decoders/.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.h:285
&gt;&gt; +    mutable SubsamplingLevel m_maximumSubsamplingLevel { 0 };
&gt; 
&gt; Would be nice to change the other data members to use{ } initialization too.

I will do this clean up in a separate patch.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageDecoder.cpp:-9
&gt;&gt; -#include &quot;ImageDecoder.hpp&quot;
&gt; 
&gt; We should not see this in this patch.

I will move the ImageDecoder class to separate files in a separate patch.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageDecoder.h:-7
&gt;&gt; -//
&gt; 
&gt; Ditto.

I will move the ImageDecoder class to separate files in a separate patch.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:69
&gt;&gt; +        delete m_decoder;
&gt; 
&gt; Use unique_ptr

Done.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:84
&gt;&gt; +    m_decoder = new ImageDecoder();
&gt; 
&gt; No bare new!

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178442</commentid>
    <comment_count>12</comment_count>
      <attachid>274994</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-28 10:32:00 -0700</bug_when>
    <thetext>Comment on attachment 274994
Patch

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

r+ but I&apos;d like to see some more testing of image subsampling (maybe plumb through settings so we can enable it for testing on Mac).

&gt; Source/WebCore/ChangeLog:11
&gt; +        class named ImageDecoder. The purpose of this split is to have the CG
&gt; +        ImageSource similar to the none CG ImageSource where there is a separate
&gt; +        class for decoding and it is named ImageDecoder also.

This sentence is hard to follow.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:-719
&gt; -    if (allowSubsampling())
&gt; -        ts.dumpProperty(&quot;allow-subsampling&quot;, allowSubsampling());
&gt;      if (m_isSolidColor)
&gt;          ts.dumpProperty(&quot;solid-color&quot;, m_isSolidColor);
&gt; -    
&gt; -    if (m_imageOrientation != OriginTopLeft)
&gt; -        ts.dumpProperty(&quot;orientation&quot;, m_imageOrientation);

We&apos;re losing information in the dump now. I think you should add dumping for the source to make up for this.

&gt; Source/WebCore/platform/graphics/ImageSource.cpp:65
&gt; +    if (m_decoder)
&gt; +        m_decoder = nullptr;

No need for the if ()

&gt; Source/WebCore/platform/graphics/ImageSource.h:126
&gt; -    // Always original size, without subsampling.
&gt; -    IntSize size(ImageOrientationDescription = ImageOrientationDescription()) const;
&gt; -    // Size of optionally subsampled frame.
&gt; -    IntSize frameSizeAtIndex(size_t, SubsamplingLevel = 0, ImageOrientationDescription = ImageOrientationDescription()) const;
&gt; +    IntSize size() const;
&gt; +    IntSize sizeRespectingOrientation() const;
&gt; +    IntSize frameSizeAtIndex(size_t, SubsamplingLevel = 0, RespectImageOrientationEnum = DoNotRespectImageOrientation) const;

Please preserve the comments.

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:164
&gt; +    : m_nativeDecoder(CGImageSourceCreateIncremental(0))

nullptr

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:170
&gt; +    CFRelease(m_nativeDecoder);

Why isn&apos;t this a RetainPtr&lt;&gt;?

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:218
&gt; +IntSize ImageDecoder::size() const
&gt; +{
&gt; +    if (m_size.isEmpty())
&gt; +        m_size = frameSizeAtIndex(0, 0);
&gt; +    return m_size;
&gt; +}

Is this supposed to return the original size, or the subsampled size?

&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:570
&gt; +IntSize ImageSource::size() const
&gt; +{
&gt; +    return frameSizeAtIndex(0, 0);
&gt; +}

Original size, or subsampled size?

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:107
&gt; +        return std::unique_ptr&lt;ImageDecoder&gt;(new GIFImageDecoder(alphaOption, gammaAndColorProfileOption));

These should all use std::make_unique&lt;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178578</commentid>
    <comment_count>13</comment_count>
      <attachid>275066</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-28 16:51:28 -0700</bug_when>
    <thetext>Created attachment 275066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178585</commentid>
    <comment_count>14</comment_count>
      <attachid>274994</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-28 17:34:33 -0700</bug_when>
    <thetext>Comment on attachment 274994
Patch

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

I will follow up with another patch which adds an option in the settings for the image subsampling. And I will include also tests which enable this option when displaying the image.

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        class for decoding and it is named ImageDecoder also.
&gt; 
&gt; This sentence is hard to follow.

I rephrased it.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:-719
&gt;&gt; -        ts.dumpProperty(&quot;orientation&quot;, m_imageOrientation);
&gt; 
&gt; We&apos;re losing information in the dump now. I think you should add dumping for the source to make up for this.

Done. A new function ImageSource::dump() is added and it is called form BitmapImage::dump().

&gt;&gt; Source/WebCore/platform/graphics/ImageSource.cpp:65
&gt;&gt; +        m_decoder = nullptr;
&gt; 
&gt; No need for the if ()

The if() is removed.

&gt;&gt; Source/WebCore/platform/graphics/ImageSource.h:126
&gt;&gt; +    IntSize frameSizeAtIndex(size_t, SubsamplingLevel = 0, RespectImageOrientationEnum = DoNotRespectImageOrientation) const;
&gt; 
&gt; Please preserve the comments.

Comments were added back.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:164
&gt;&gt; +    : m_nativeDecoder(CGImageSourceCreateIncremental(0))
&gt; 
&gt; nullptr

Done.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:170
&gt;&gt; +    CFRelease(m_nativeDecoder);
&gt; 
&gt; Why isn&apos;t this a RetainPtr&lt;&gt;?

Done.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:218
&gt;&gt; +}
&gt; 
&gt; Is this supposed to return the original size, or the subsampled size?

It returns the original size. A comment is added above the function in the class definition.

&gt;&gt; Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp:570
&gt;&gt; +}
&gt; 
&gt; Original size, or subsampled size?

It returns the original size. A comment is added above the function in the class definition.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:107
&gt;&gt; +        return std::unique_ptr&lt;ImageDecoder&gt;(new GIFImageDecoder(alphaOption, gammaAndColorProfileOption));
&gt; 
&gt; These should all use std::make_unique&lt;&gt;

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178680</commentid>
    <comment_count>15</comment_count>
      <attachid>275066</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-29 09:18:24 -0700</bug_when>
    <thetext>Comment on attachment 275066
Patch

Clearing flags on attachment: 275066

Committed r198782: &lt;http://trac.webkit.org/changeset/198782&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178681</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-29 09:18:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273927</attachid>
            <date>2016-03-13 23:14:02 -0700</date>
            <delta_ts>2016-03-13 23:31:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160313231349.patch</filename>
            <type>text/plain</type>
            <size>90836</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjOThmYzYxZmI4ZmUx
ZTAxYTY5MWNjNzg0OTM0NmU1YTkwNzI1MC4uMDViZTIzZDlmMGY3Mjg0NTUxYzM3NzRiMzU2YjMz
MDlhYjI5YWE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNiBAQAorMjAxNi0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGlzIG5vdCBmb3IgcmV2aWV3LiBJdCBpcyBvbmx5IGZvciBFV1MuIEl0
IGNvbnRhaW5zIHRoZSBmaXggb2YKKyAgICAgICAgd2Via2l0IGJ1Z3MgMTU1NDEyIGFuZCAxNTU0
MjIuIEEgc2VwYXJhdGUgcGF0Y2ggd2lsbCBiZSBwb3N0ZWQgZm9yIHJldmlldworICAgICAgICBv
bmNlIHRoaXMgY29tYmluZWQgcGF0Y2ggcGFzc2VzIHRoZSBFV1MuCisKKyAgICAgICAgKiBQbGF0
Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6Omlt
YWdlU2l6ZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
aGF2ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFs
aXplZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVj
a0ZvclNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6
OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1h
Z2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpnZXRDR0ltYWdlUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpn
ZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVJbWFnZUF0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1l
QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDRy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbWFnZVNvdXJj
ZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VTb3VyY2VPcHRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Z2V0SG90U3BvdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6b3JpZW50YXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6On5JbWFnZURlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNp
emVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmdldEhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25D
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6c2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNoYXJlZEJ1ZmZlclJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
bWFnZVNvdXJjZU9wdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9yaWVudGF0aW9u
RnJvbVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6Okljb246
Okljb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorCisyMDE2LTAzLTEzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgQ2hhbmdlIE5hdGl2ZUltYWdlUHRy
IGZvciBDRyB0byBiZSBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmluZyBOYXRpdmVJbWFnZVB0ciBhcyBhIHJh
dyBwb2ludGVyIG1ha2VzIG1hbmFnaW5nIHRoZSBsaWZlIGN5Y2xlIG9mCisgICAgICAgIHRoZSBD
R0ltYWdlUmVmIGhhcmQuIEEgbG90IG9mIHdvcmtzIHdhcyBkb25lIHRvIG1ha2Ugc3VyZSB0aGUg
Q0cgcG9pbnRlcgorICAgICAgICBpcyBtYWludGFpbmVkIGNvcnJlY3RseS4gSXQgd2FzIGFsc28g
bm90IHBvc3NpYmxlIHRvIG1vdmUgYSBGcmFtZURhdGEgc2luY2UKKyAgICAgICAgY2FsbGluZyB0
aGUgZGVzdHJ1Y3RvciB3YXMgcmVsZWFzaW5nIHRoZSBDR0ltYWdlUmVmLgorCisgICAgICAgIEkg
YW0gZ29pbmcgdG8gZm9sbG93IHRoaXMgbmFtaW5nIGNvbnZlbnRpb246CisgICAgICAgIDEuIEFu
IEltYWdlIG9iamVjdCBjYW4gaGF2ZSBvbmUgb3IgbW9yZSBGcmFtZURhdGEuIEEgRnJhbWVEYXRh
IGNhbiBiZSBuYW1lZAorICAgICAgICAgICBmb3Igc2hvcnRuZXNzIGFzICJmcmFtZSIsICJtX2Zy
YW1lcyIsIGV0Yy4KKyAgICAgICAgMi4gQSBGcmFtZURhdGEgY2FuIGhhdmUgemVybyBvciBvbmUg
TmF0aXZlSW1hZ2VQdHIuIEEgTmF0aXZlSW1hZ2VQdHIgY2FuCisgICAgICAgICAgIGJlIG5hbWVk
IGFzICJpbWFnZSIsICJtX2ltYWdlIiwgZXRjLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL01l
bW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjphZGRJbWFnZVRv
Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6aGF2ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpG
cmFtZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJp
dG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlk
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6SWNvbjo6SWNvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldFRJRkZS
ZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5n
U291cmNlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5n
U291cmNlU2l6ZSk6CisKIDIwMTYtMDMtMTIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBbRm9ybXM6IGZvY3VzXSBmb2N1cyByaW5ncyBhcm91bmQgdGV4dCBmaWVs
ZHMgZG8gbm90IGZvbGxvdyBjb250b3VyIChib3JkZXItcmFkaXVzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZTUyMDljYjIwY2YwMzM4N2EyNTI2NDNkZjRlMGIyMTUx
NDkyMDRmNy4uN2IzNjdhNzNhYzllMTViZDk1Yzg5Yzk3YTM2YTBmMDI1ZjcyODA3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC03MSw2ICs3MSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZURlY29kZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDgzNWI5YWEyMjRhYTllYWFlZTA0NjIzMzk3ZTk5MDE2ZTlmN2VlYmYuLmRh
Y2RhNTY5MWE2NWM2NjU2MDYzYTRjMDcwNmMxMGEwZWZiNjIxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC00MDAsNiArNDAwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbnRQb2ludENHLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAzMDdiYTM4ZmYwZjNhNGM0NzFiOWQ0MjkxNDYxNjJh
OTU5ZWU3NjYuLjZiNjI5MzEzMzdhMGM3MTk1OTljNjI1NjkxNGFjMjIyYTE1YThhNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTIyOTEsNiArMjI5MSw4IEBACiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5n
c01hY3Jvcy5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9z
LmggKi87IH07CiAJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM3
MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLzsgfTsKIAkJNTUwQTBCQ0Ew
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFs
aWZpZWROYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTU5QkI4NzkxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTlCQjg3NzFDOTY0NjU4
MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLzsgfTsKKwkJNTU5QkI4N0ExQzk2NDY1ODAw
MjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTU5QkI4NzgxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5o
ICovOyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIwMUM2
RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1NzJBN0YyMzFDNkU1
QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVs
YXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBS
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4
MDM3MTVGMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgKi87IH07CkBAIC05ODc1LDYg
Kzk4NzcsOCBAQAogCQk1M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUz
RDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk1NTlCQjg3NzFDOTY0NjU4MDAyNDEz
Q0QgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OUJC
ODc4MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRD
bGljay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkg
LyogU2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4
MzMsNiArMjE4MzcsOCBAQAogCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1
ZmZlckRhdGFDRy5jcHAgKi8sCiAJCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdl
QnVmZmVyRGF0YUNHLmggKi8sCiAJCQkJQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdl
Q0cuY3BwICovLAorCQkJCTU1OUJCODc3MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIu
Y3BwICovLAorCQkJCTU1OUJCODc4MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuaCAq
LywKIAkJCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi8s
CiAJCQkJNEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLywKIAkJ
CQk0QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSAqLywKQEAg
LTI2ODEyLDYgKzI2ODE4LDcgQEAKIAkJCQlGREExNUVDRTEyQjAzRjYxMDAzQTU4M0EgLyogSlNT
Y3JpcHRQcm9jZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RkEzN0VGQjExNzJGREE2
MDBDNENENTUgLyogSlNTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RkEzN0VG
RDExNzJGREE2MDBDNENENTUgLyogSlNTY3JpcHRQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTU5QkI4N0ExQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRGQUYxIC8qIEpTU2VjdXJpdHlQb2xpY3lW
aW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJEQTY0RDgxQjk3NUNGMjAwOUM0
Mzg3IC8qIEpTU2hhZG93Um9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q5REUxN0IxN0FBQzc1
QjAwRUEzODZEIC8qIEpTU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5MjAzLDYg
KzI5MjEwLDcgQEAKIAkJCQlCMjc1MzU2NjBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMzMjQwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQTc2QzkxMUQyMEU0NzAwNEMyMDFDIC8qIENvbG9yRGF0
YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTlCQjg3OTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1h
Z2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjk5MzVEMTdBMURENTgwMEJDRTg4
MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU3NzBCMDUz
ODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk0M0VERDY3RTFC
NDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAppbmRleCBm
Mzc4NzUyMWRkZmZmNjgyYmQ4OGU2NDcyY2FmMDYyNWUzZjA0NTQ0Li45YTE0NzU3ODgzN2ZjZGUx
MzEwZDFhZDEwNjIyYjdiYjcwNjg0YWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5jcHAKQEAgLTI3OCw3ICsyNzgsNyBAQCBMYXlvdXRTaXplIENhY2hlZElt
YWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBm
bG9hdAogICAgIGlmIChyZW5kZXJlciAmJiBpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpKSB7CiAg
ICAgICAgIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9u
KHJlbmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCByZW5kZXJlci0+c3R5
bGUoKS5pbWFnZU9yaWVudGF0aW9uKCkpOwogICAgICAgICBpZiAob3JpZW50YXRpb25EZXNjcmlw
dGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KQotICAgICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFn
ZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24ob3JpZW50YXRpb25EZXNjcmlw
dGlvbikpOworICAgICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRt
YXBJbWFnZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSk7CiAgICAgfQog
I2Vsc2UKICAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKSAmJiAocmVuZGVyZXIgJiYg
cmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01l
bW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAKaW5kZXggOTk5NDY1ZWEzOTA2OTdjYmUwMGZlNmZhODgzOGMxMzhlNTQ0N2ExNy4uODQ2YzBk
YzkzODRlNzVkYmEwODIwYzI4MGZiNjQxY2U4YTA4ZjE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCkBAIC0yMjUsOCArMjI1LDYgQEAgYm9vbCBNZW1v
cnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdlUHRyIGltYWdlLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3QKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRJbWFnZT4gY2FjaGVk
SW1hZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZEltYWdlPih1cmwsIGJpdG1hcEltYWdlLmdl
dCgpLCBDYWNoZWRJbWFnZTo6TWFudWFsbHlDYWNoZWQsIHNlc3Npb25JRCk7CiAKLSAgICAvLyBB
Y3R1YWwgcmVsZWFzZSBvZiB0aGUgQ0dJbWFnZVJlZiBpcyBkb25lIGluIEJpdG1hcEltYWdlLgot
ICAgIENGUmV0YWluKGltYWdlKTsKICAgICBjYWNoZWRJbWFnZS0+YWRkQ2xpZW50KCZkdW1teUNh
Y2hlZEltYWdlQ2xpZW50KCkpOwogICAgIGNhY2hlZEltYWdlLT5zZXREZWNvZGVkU2l6ZShiaXRt
YXBJbWFnZS0+ZGVjb2RlZFNpemUoKSk7CiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApp
bmRleCBmYWYwZjg2OTYyYzNmYjY1Nzc3NDViZmFmNzViNGM4NGQ4MGNjMDYwLi5iM2NjYWYxODM2
MjQ5Y2E0NWJjZGY3ZTk2ZTg2OThlMGViZWZkYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC00Nyw5ICs0Nyw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBtX21pbmltdW1TdWJzYW1w
bGluZ0xldmVsKDApCi0gICAgLCBtX2ltYWdlT3JpZW50YXRpb24oT3JpZ2luVG9wTGVmdCkKLSAg
ICAsIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oZmFsc2UpCiAgICAgLCBtX2N1cnJl
bnRGcmFtZSgwKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCiAgICAg
LCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQpAQCAtOTYsNyArOTMsNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpzdGFydFRpbWVyKGRvdWJsZSBkZWxheSkKICAgICBtX2ZyYW1lVGltZXIt
PnN0YXJ0T25lU2hvdChkZWxheSk7CiB9CiAKLWJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUF0
SW5kZXgoc2l6ZV90IGluZGV4KQorYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDQsNyArMTAxLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6
aGF2ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVz
LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5tX2ZyYW1lOworICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKIH0KIAog
Ym9vbCBCaXRtYXBJbWFnZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTg0
LDkgKzE4MSw5IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgICAgIG1fZnJhbWVzLmdy
b3cobnVtRnJhbWVzKTsKIAogICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFu
ZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0gbV9zb3VyY2UuY3Jl
YXRlRnJhbWVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgICAgICBpZiAobnVtRnJhbWVzID09IDEg
JiYgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGlmIChudW1GcmFtZXMgPT0gMSAm
JiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKICAgICAgICAgICAgIGNoZWNrRm9yU29saWRDb2xv
cigpOwogICAgIH0KIApAQCAtMjA0LDcgKzIwMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hl
RnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIElt
CiAgICAgaWYgKCFzdWJzYW1wbGluZ0xldmVsICYmIGZyYW1lU2l6ZSAhPSBtX3NpemUpCiAgICAg
ICAgIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSA9IGZhbHNlOwogCi0gICAgaWYgKG1fZnJhbWVzW2lu
ZGV4XS5tX2ZyYW1lKSB7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7CiAgICAg
ICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZUJ5dGVzKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAgICAv
LyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBkZWNv
ZGVkIGRhdGEgdXNlZApAQCAtMjM2LDE2ICsyMzMsMTMgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGlk
RGVjb2RlUHJvcGVydGllcygpIGNvbnN0CiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2Rl
ZFNpemVDaGFuZ2VkKHRoaXMsIGRlbHRhQnl0ZXMpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjp1
cGRhdGVTaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QK
K3ZvaWQgQml0bWFwSW1hZ2U6OnVwZGF0ZVNpemUoKSBjb25zdAogewogICAgIGlmICghbV9zaXpl
QXZhaWxhYmxlIHx8IG1faGF2ZVNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2l6ZSA9
IG1fc291cmNlLnNpemUoZGVzY3JpcHRpb24pOwotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbiA9IG1fc291cmNlLnNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uLCBkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpKTsKLQotICAg
IG1faW1hZ2VPcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5p
bWFnZU9yaWVudGF0aW9uKCkpOwotICAgIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRp
b24oKSk7CisgICAgbV9zaXplID0gbV9zb3VyY2Uuc2l6ZSgpOworICAgIG1fc2l6ZVJlc3BlY3Rp
bmdPcmllbnRhdGlvbiA9IG1fc291cmNlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsKIAog
ICAgIG1faGF2ZVNpemUgPSB0cnVlOwogCkBAIC0yNTksOSArMjUzLDkgQEAgRmxvYXRTaXplIEJp
dG1hcEltYWdlOjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9zaXplOwogfQogCi1JbnRTaXpl
IEJpdG1hcEltYWdlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKK0ludFNpemUgQml0bWFwSW1hZ2U6OnNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHVwZGF0ZVNpemUoZGVzY3JpcHRp
b24pOworICAgIHVwZGF0ZVNpemUoKTsKICAgICByZXR1cm4gbV9zaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uOwogfQogCkBAIC0zNzksMjMgKzM3MywyMyBAQCBib29sIEJpdG1hcEltYWdlOjplbnN1
cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJhbWVDYWNo
aQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6
ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lICYm
ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBD
YWNoZU1ldGFkYXRhQW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQogICAgICAg
ICB8fCAoZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRl
eF0ubV9oYXZlTWV0YWRhdGEpKQogICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNh
Y2hpbmcpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NOYXRpdmVJbWFnZVB0ciBCaXRt
YXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2Nh
bGVIaW50KQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCkKIHsKICAgICBpZiAo
aW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCA9IHN0ZDo6bWluKG1fc291cmNlLnN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZShwcmVzZW50YXRpb25TY2FsZUhpbnQpLCBtX21pbmltdW1TdWJz
YW1wbGluZ0xldmVsKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBt
X3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUocHJlc2VudGF0aW9uU2NhbGVIaW50LCBt
X21pbmltdW1TdWJzYW1wbGluZ0xldmVsKTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBh
IGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2Ug
bmVlZCB0bwogICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGlu
ZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAg
aWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYm
IHN1YnNhbXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7
CiAgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBz
bWFsbCBhIHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgogICAgICAgICBpbnQgc2l6
ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwogICAgICAgICBtX2ZyYW1l
c1tpbmRleF0uY2xlYXIodHJ1ZSk7CkBAIC00MDYsMTAgKzQwMCwxMCBAQCBQYXNzTmF0aXZlSW1h
Z2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNl
bnRhdGlvblNjYQogICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmVuJ3QgZmV0Y2hlZCBhIGZyYW1l
IHlldCwgZG8gc28uCi0gICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAh
bV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIHN1YnNh
bXBsaW5nTGV2ZWwsIENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CiAKLSAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwog
fQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRl
eCkKQEAgLTQzMCw3ICs0MjQsNyBAQCBmbG9hdCBCaXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0
SW5kZXgoc2l6ZV90IGluZGV4KQogCiBQYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIHsKLSAgICByZXR1cm4gZnJhbWVBdEluZGV4KGN1
cnJlbnRGcmFtZSgpKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1l
KCkpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qg
aW5kZXgpCkBAIC03MTQsOSArNzA4LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHVtcChUZXh0U3Ry
ZWFtJiB0cykgY29uc3QKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbGxvdy1zdWJzYW1wbGlu
ZyIsIGFsbG93U3Vic2FtcGxpbmcoKSk7CiAgICAgaWYgKG1faXNTb2xpZENvbG9yKQogICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInNvbGlkLWNvbG9yIiwgbV9pc1NvbGlkQ29sb3IpOwotICAgIAot
ICAgIGlmIChtX2ltYWdlT3JpZW50YXRpb24gIT0gT3JpZ2luVG9wTGVmdCkKLSAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJvcmllbnRhdGlvbiIsIG1faW1hZ2VPcmllbnRhdGlvbik7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4
IDc0OTNjNmE0YmZiODYzZDk3NjM3YzQ5YzQ2NGNjMzdhZTc4ZTBhMDQuLmYzZmE3NjlkOGIzZDcy
YzJiZGU1ZGZlYjFhN2ZkYmRkNGZkNGMyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtNDcsMTYgKzQ3LDYgQEAgdHlwZWRlZiBzdHJ1
Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6IHB1YmxpYyBTaW1wbGVD
bGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxp
emVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRhIG1lbWJlcnMgaW5pdGlh
bGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGlt
ZXI7CiAKQEAgLTY1LDE3ICs1NSw4IEBAIGNsYXNzIFRpbWVyOwogLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIHN0cnVjdCBGcmFtZURhdGEgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyYW1lRGF0YSk7CiBwdWJsaWM6CiAgICAgRnJhbWVE
YXRhKCkKLSAgICAgICAgOiBtX2ZyYW1lKDApCi0gICAgICAgICwgbV9vcmllbnRhdGlvbihEZWZh
dWx0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgLCBtX3N1YnNhbXBsaW5nTGV2ZWwoMCkKLSAg
ICAgICAgLCBtX2R1cmF0aW9uKDApCi0gICAgICAgICwgbV9oYXZlTWV0YWRhdGEoZmFsc2UpCi0g
ICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkg
Ci0gICAgICAgICwgbV9mcmFtZUJ5dGVzKDApCiAgICAgewogICAgIH0KIApAQCAtODQsMTggKzY1
LDIyIEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXIodHJ1ZSk7CiAgICAgfQogCi0gICAgLy8gQ2xl
YXIgdGhlIGNhY2hlZCBpbWFnZSBkYXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0
aGUgbWV0YWRhdGEuCi0gICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1h
Z2UgZGF0YSB0byBjbGVhci4KICAgICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0K
LSAgICBOYXRpdmVJbWFnZVB0ciBtX2ZyYW1lOwotICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmll
bnRhdGlvbjsKLSAgICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbDsKLSAgICBm
bG9hdCBtX2R1cmF0aW9uOwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wg
bV9pc0NvbXBsZXRlIDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVk
IG1fZnJhbWVCeXRlczsKKyAgICBPcHRpb25hbDxDb2xvcj4gc29saWRDb2xvcigpIGNvbnN0Owor
CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3Jp
ZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2
ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07
CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgYm9vbCBtX2hhdmVN
ZXRhZGF0YSA6IDE7CisgICAgICAgICAgICBib29sIG1faXNDb21wbGV0ZSA6IDE7CisgICAgICAg
ICAgICBib29sIG1faGFzQWxwaGEgOiAxOworICAgICAgICB9OworICAgICAgICB1aW50OF90IG1f
ZmxhZ3Nbc2l6ZW9mKGJvb2wpXSB7IDAgfTsKKyAgICB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVC
eXRlcyB7IDAgfTsKIH07CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQEAgLTEyNSw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGbG9h
dFNpemUgZHVlIHRvIG92ZXJyaWRlLgogICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyAg
ICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsKIAogICAgIGJvb2wg
Z2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xODksNyArMTc0LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHVwZGF0ZVNpemUoSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0Owor
ICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgZGV0ZXJtaW5lTWluaW11bVN1
YnNhbXBsaW5nTGV2ZWwoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMjE0LDEwICsxOTksMTAg
QEAgcHJvdGVjdGVkOgogCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAotICAgIFBhc3NOYXRp
dmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhp
bnQgPSAxKTsKLSAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVBdEluZGV4
KHNpemVfdCk7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7CisgICAgUGFzc05hdGl2ZUltYWdl
UHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKLSAgICBib29sIGhh
dmVGcmFtZUF0SW5kZXgoc2l6ZV90KTsKKyAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChz
aXplX3QpOwogCiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7CiAgICAg
ZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKQEAgLTI5NywxMCArMjgyLDcgQEAg
cHJpdmF0ZToKICAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOyAvLyBUaGUgc2l6ZSB0byB1c2Ug
Zm9yIHRoZSBvdmVyYWxsIGltYWdlICh3aWxsIGp1c3QgYmUgdGhlIHNpemUgb2YgdGhlIGZpcnN0
IGltYWdlKS4KICAgICBtdXRhYmxlIEludFNpemUgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9u
OwogCi0gICAgbXV0YWJsZSBTdWJzYW1wbGluZ0xldmVsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2
ZWw7Ci0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW1hZ2VPcmllbnRhdGlvbiA6IDQ7IC8vIElt
YWdlT3JpZW50YXRpb25FbnVtCi0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX3Nob3VsZFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uIDogMTsgLy8gUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtCisgICAg
bXV0YWJsZSBTdWJzYW1wbGluZ0xldmVsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgeyAwIH07
CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWU7IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVu
dCBmcmFtZSBvZiBhbmltYXRpb24uCiAgICAgVmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7
IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQgZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhh
dmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhlbSBpbiB0aGUgY2FjaGUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5kZXggZDk1ZTdkZWI4MTBmYzI0ZjdmNjFiMWIyM2E0
YjlhZWYzZjNjMTdiNy4uMjhjMTM3ZDI5YjExOGE5Y2YxYjYxNjFlZGU0ZGU0OTFkMDQ4ODMwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApAQCAtNjgsOCArNjgsOCBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEljb24oQ0dJbWFn
ZVJlZik7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKKyAgICBJY29uKE5h
dGl2ZUltYWdlUHRyKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2NnSW1hZ2U7CiAjZWxpZiBQTEFU
Rk9STShNQUMpCiAgICAgSWNvbihOU0ltYWdlKik7CiAgICAgUmV0YWluUHRyPE5TSW1hZ2U+IG1f
bnNJbWFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAppbmRleCA3NGVmMDUzYTMzM2ZmNWZjNTc4ZTgxODAwY2M2ZmM5NzU1ZWZiYWI4Li5l
MzgyMWQ0NjFlNGY0NGI2NzVhNTMxNGM5ODQ5NjU0MTM3MDI3MGQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xNDgsNyArMTQ4
LDcgQEAgc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4g
bV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQogCi1QYXNzTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwpCitQYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZy
YW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCkKIHsKICAgICBp
ZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCBhY2RkMWNlNGNlMzAwZGU4MWM5ZTA2
MmVlZTc2MDdiZjQ3MmE3MGFmLi45MGI0MjkzNjM2NjY3MmM1ZmI0MzM2N2I3ZGFjZDM4Yjk5YTcx
NWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgKQEAgLTQ2LDE4ICs0Niw5IEBAIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIGNs
YXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJbWFnZVNvdXJjZVJl
ZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZWxzZQogY2xhc3MgSW1hZ2VEZWNvZGVyOwogdHlw
ZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKLSNlbmRpZgotCi0jaWYg
VVNFKENHKQotI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VEZWNvZGVyCi0jZWxzZQog
dHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwotI2VuZGlmCiAKIC8vIFJp
Z2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1
cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0aGUgY29uc3Rh
bnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KQEAgLTExMCw3ICsxMDEs
NyBAQCBwdWJsaWM6CiAgICAgLy8gZGVjb2RlZCBmcmFtZXMuCiAgICAgLy8KICAgICAvLyBDYWxs
ZXJzIHNob3VsZCBub3QgY2FsbCBjbGVhcihmYWxzZSwgbikgYW5kIHN1YnNlcXVlbnRseSBjYWxs
Ci0gICAgLy8gY3JlYXRlRnJhbWVBdEluZGV4KG0pIHdpdGggbSA8IG4sIHVubGVzcyB0aGV5IGZp
cnN0IGNhbGwgY2xlYXIodHJ1ZSkuCisgICAgLy8gY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgobSkg
d2l0aCBtIDwgbiwgdW5sZXNzIHRoZXkgZmlyc3QgY2FsbCBjbGVhcih0cnVlKS4KICAgICAvLyBU
aGlzIGVuc3VyZXMgdGhhdCBzdGF0ZWZ1bCBJbWFnZVNvdXJjZXMvZGVjb2RlcnMgd2lsbCB3b3Jr
IHByb3Blcmx5LgogICAgIC8vCiAgICAgLy8gVGhlIHxkYXRhfCBhbmQgfGFsbERhdGFSZWNlaXZl
ZHwgcGFyYW1ldGVycyBzaG91bGQgYmUgc3VwcGxpZWQgYnkgY2FsbGVycwpAQCAtMTIyLDE5ICsx
MTMsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gTlVM
TCwKICAgICAgICAgICAgICAgIGJvb2wgYWxsRGF0YVJlY2VpdmVkID0gZmFsc2UpOwogCi0gICAg
Ym9vbCBpbml0aWFsaXplZCgpIGNvbnN0OworICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7
IHJldHVybiBtX2RlY29kZXI7IH0KIAogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdDsKIAotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxl
KGZsb2F0KSBjb25zdDsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JT
Y2FsZShmbG9hdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd1N1YnNh
bXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKIAogICAgIGJvb2wgaXNTaXplQXZh
aWxhYmxlKCk7CiAgICAgLy8gQWx3YXlzIG9yaWdpbmFsIHNpemUsIHdpdGhvdXQgc3Vic2FtcGxp
bmcuCi0gICAgSW50U2l6ZSBzaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25z
dDsKKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsKICAgICAv
LyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRTaXplIGZyYW1l
U2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OworICAg
IEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwLCBS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KSBjb25zdDsKIAogICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0OwogCkBAIC0x
NDYsNyArMTM4LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVycyBzaG91bGQgbm90IGNhbGwg
dGhpcyBhZnRlciBjYWxsaW5nIGNsZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsKICAgICAvLyBz
ZWUgY29tbWVudHMgb24gY2xlYXIoKSBhYm92ZS4KLSAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgY3Jl
YXRlRnJhbWVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApOworICAgIFBhc3NO
YXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSAwKTsKIAogICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CiAg
ICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpOyAvLyBXaGV0aGVyIG9yIG5vdCB0
aGUgZnJhbWUgYWN0dWFsbHkgdXNlZCBhbnkgYWxwaGEuCkBAIC0xNjMsNyArMTU1LDkgQEAgcHVi
bGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyIG1fZGVj
b2RlcjsKKyAgICB2b2lkIGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoU2hhcmVkQnVmZmVyKik7Cisg
ICAgCisgICAgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyIG1fZGVjb2RlciB7IG51bGxwdHIgfTsKIAog
I2lmICFVU0UoQ0cpCiAgICAgQWxwaGFPcHRpb24gbV9hbHBoYU9wdGlvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCmluZGV4IGRmOTQx
YTU2NmE5ZTQ2OTI3NzI3YmExZWM2ODQ4ZjIxNjgwM2E0NWIuLmVjYTFiOTJjNDFlZTE4MjhlMzEw
ZDViZWRiYjJiNWFjYTU5NWY1NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBOYXRp
dmVJbWFnZVB0cl9oCiAKICNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
dHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKICNlbGlmIFVTRShDQUlSTykKICNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAtNDEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAvLyBGSVhNRTogTmF0aXZlSW1hZ2VQdHIgYW5kIFBhc3NOYXRpdmVJbWFnZVB0ciBzaG91
bGQgYmUgc21hcnQKIC8vIHBvaW50ZXJzIChzZWUgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkpLgogI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJbWFnZVJlZiBOYXRpdmVJbWFn
ZVB0cjsKK3R5cGVkZWYgUmV0YWluUHRyPENHSW1hZ2VSZWY+IE5hdGl2ZUltYWdlUHRyOwogI2Vs
aWYgVVNFKENBSVJPKQogdHlwZWRlZiBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBOYXRpdmVJbWFn
ZVB0cjsKIHR5cGVkZWYgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IFBhc3NOYXRpdmVJbWFn
ZVB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDYzZGNmMGEyNTNlMjM0MGY2N2YxYzgxZDg1ZmMyNzBk
ZDIzMGU4NmQuLmE0YzY1YmRmZjMyYTkyZjljMWRmMjZkNGJmNTMwODBmMDVhYjk2MTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcApAQCAtMTAzNyw3ICsxMDM3LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNl
dENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHZvaWQgR3JhcGhpY3NM
YXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewogICAgIGlmIChpbWFn
ZSkgewotICAgICAgICBDR0ltYWdlUmVmIG5ld0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CisgICAgICAgIENHSW1hZ2VSZWYgbmV3SW1hZ2UgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS5nZXQoKTsKICAgICAgICAgaWYgKCFuZXdJbWFnZSkK
ICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAppbmRleCBjZDU3ZWU0
ODVlYTgwYzZjZjM0N2FiM2JkOTczN2Q1OTk5ZTEwMjgyLi5hM2Y1YzdkYTk5NzU2OTNmMTllNTc1
M2ZiZDg3MTdjNGRmMWYzN2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApAQCAtNTgsNyArNTgs
NyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IG5hdGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKgogewogICAgIG1fZnJhbWVzLmdyb3coMSk7CiAg
ICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQobmF0
aXZlSW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Ci0gICAgbV9mcmFtZXNbMF0u
bV9mcmFtZSA9IG5hdGl2ZUltYWdlOworICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBuYXRpdmVJ
bWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKICAgICBjaGVj
a0ZvclNvbGlkQ29sb3IoKTsKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBG
bG8KIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBzdXJmYWNlID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKKyAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUp
OwogICAgIGlmICghc3VyZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBh
biBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKIApAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgaWYgKGZyYW1lQ291bnQoKSA+
IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZh
Y2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAg
aWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdl
IHlldC4KICAgICAgICAgcmV0dXJuOwogCkBAIC0xNTgsOCArMTU4LDggQEAgYm9vbCBGcmFtZURh
dGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKICAgICBpZiAoY2xlYXJNZXRhZGF0YSkKICAg
ICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAg
ICAgIG1fZnJhbWUgPSBudWxscHRyOworICAgIGlmIChtX2ltYWdlKSB7CisgICAgICAgIG1faW1h
Z2UgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCBjYzcwNDYxNDdhZTgx
ZjFmYWRhYTZkODQxNjI0OTgwYzZmZGZjYmYxLi44YzQxODZkNzFlNTNhMTkwN2U5MmQ3M2EyYjAx
NjQ3ZmZkNjZiMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMjE1
LDcgKzIxNSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRy
YWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sCiAgICAgICAgIGRlY29kZXIuc2V0
RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOwogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVD
b3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoMCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUF0SW5kZXgoMCk7CisgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUltYWdlQXRJbmRleCgwKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ltYWdlU3VyZmFj
ZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIC8vIDEu
IEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJl
bXVsdGlwbHlBbHBoYSBoYWQgYmVlbiBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhG
RiBmb3IgZWFjaCBwaXhlbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKaW5kZXggMDFiN2Q2OTJjZGJkN2FiNGQyMmJiYzEz
OTljMTAzMjhmNTdlNWU0Ny4uMmUzYTQ5MWVkOGFiZGM5MWRkOTg5OTU0OGIwZmZiODUyNzMzOGZm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFw
SW1hZ2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0
bWFwSW1hZ2VDRy5jcHAKQEAgLTU4LDIyICs1OCwxOCBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIo
Ym9vbCBjbGVhck1ldGFkYXRhKQogICAgIG1fb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmll
bnRhdGlvbjsKICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSAwOwogCi0gICAgaWYgKG1fZnJhbWUp
IHsKKyAgICBpZiAobV9pbWFnZSkgewogI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJp
bWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ZyYW1lKTsKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgp
LmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7CiAjZW5kaWYKLSAgICAgICAgQ0dJbWFnZVJlbGVh
c2UobV9mcmFtZSk7Ci0gICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNl
cnZlciogb2JzZXJ2ZXIpCitCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHIg
aW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0g
ICAgLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKDApCi0gICAgLCBtX2ltYWdlT3JpZW50YXRp
b24oT3JpZ2luVG9wTGVmdCkKLSAgICAsIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24o
ZmFsc2UpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQo
Y0FuaW1hdGlvbk5vbmUpCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQpA
QCAtODksOCArODUsOCBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0lt
YWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVl
KQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogewotICAgIENHRmxvYXQgd2lkdGggPSBD
R0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7Ci0gICAgQ0dGbG9hdCBoZWlnaHQgPSBDR0ltYWdlR2V0
SGVpZ2h0KGNnSW1hZ2UpOworICAgIENHRmxvYXQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UuZ2V0KCkpOworICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZS5n
ZXQoKSk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsKICAgICBtX3Np
emUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogCkBAIC05OSw3ICs5NSw3IEBAIEJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2Vy
dmVyKQogICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZTsKIAogICAgIG1f
ZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IENHSW1hZ2VSZXRhaW4o
Y2dJbWFnZSk7CisgICAgbV9mcmFtZXNbMF0ubV9pbWFnZSA9IGltYWdlOwogICAgIG1fZnJhbWVz
WzBdLm1faGFzQWxwaGEgPSB0cnVlOwogICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0g
dHJ1ZTsKIApAQCAtMTM2LDcgKzEzMiw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29s
aWRDb2xvcigpCiAgICAgaWYgKGZyYW1lQ291bnQoKSA+IDEpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICghaGF2ZUZyYW1lQXRJbmRleCgwKSkgeworICAgIGlmICghaGF2ZUZyYW1lSW1hZ2VB
dEluZGV4KDApKSB7CiAgICAgICAgIEludFNpemUgc2l6ZSA9IG1fc291cmNlLmZyYW1lU2l6ZUF0
SW5kZXgoMCwgMCk7CiAgICAgICAgIGlmIChzaXplLndpZHRoKCkgIT0gMSB8fCBzaXplLmhlaWdo
dCgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDcsNyArMTQzLDcgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKIAogICAgIENHSW1hZ2VSZWYgaW1hZ2Ug
PSBudWxscHRyOwogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkpCi0gICAgICAgIGltYWdlID0gbV9m
cmFtZXNbMF0ubV9mcmFtZTsKKyAgICAgICAgaW1hZ2UgPSBtX2ZyYW1lc1swXS5tX2ltYWdlLmdl
dCgpOwogCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTczLDE2ICsxNjks
MTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKIAogQ0dJbWFnZVJl
ZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCiB7Ci0gICAgcmV0dXJuIGZyYW1lQXRJbmRl
eCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7CiB9CiAKIENHSW1h
Z2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdl
ID0gZnJhbWVBdEluZGV4KGkpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1h
Z2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkK
LSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOworICAgICAgICBQYXNzTmF0aXZlSW1hZ2VQdHIg
aW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIEludFNp
emUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5n
ZXQoKSkpID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZ2V0KCk7CiAgICAgfQog
CiAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBm
aW5kIHRoZSByaWdodCBzaXplCkBAIC0xOTcsOCArMTkzLDggQEAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQogICAgIAogICAgIENGTXV0YWJsZUFy
cmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBl
QXJyYXlDYWxsQmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewotICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUF0SW5kZXgoaSkpCi0g
ICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7CisgICAgICAg
IGlmIChOYXRpdmVJbWFnZVB0ciBjdXJyRnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKSkKKyAg
ICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lLmdldCgpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwogfQpAQCAtMjExLDE1ICsyMDcsMTUgQEAg
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEYKICAgICBzdGFydEFuaW1hdGlvbigpOwogI2VuZGlmCiAK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1h
Z2U7CiAgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8g
UERGIGNvbnRleHRzLgogICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0LnBsYXRm
b3JtQ29udGV4dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKGNvcHlVbnNjYWxlZEZyYW1l
QXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZy
YW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBlbHNlIHsKICAgICAgICAgQ0dS
ZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zv
cm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CiAg
ICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjpt
YXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgo
KSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdo
dCgpKSk7CiAKLSAgICAgICAgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1
YnNhbXBsaW5nU2NhbGUpOworICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3Vy
cmVudEZyYW1lLCBzdWJzYW1wbGluZ1NjYWxlKTsKICAgICB9CiAKICAgICBpZiAoIWltYWdlKSAv
LyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KQEAgLTI1MSwx
OCArMjQ3LDE4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGCiAgICAgICAgIGltYWdlT2JzZXJ2
ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdl
Ojpjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQorUGFzc05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5k
ZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tp
bmRleF0ubV9mcmFtZSkKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2Zy
YW1lc1tpbmRleF0ubV9pbWFnZSkKICAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCk7CiAKICAg
ICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJldHVy
biBDR0ltYWdlUmV0YWluKG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKTsKKyAgICAgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwogCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZy
YW1lQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAppbmRleCA2YzAzYTJj
ZWY4NDYwNjU2MWVhMDdlYjkyOGYxY2YyOTVmOWY1ZTM2Li43YTEzYmI1ODQ2NzA4ZDM3ZTAyYmQz
ZGQ2NzIzYzI3YTQ5NTE3NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcApAQCAtMzMzLDEwICsz
MzMsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJ
bWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wKICAgICAgICAgaWYgKCFkZWNvZGVyLmZy
YW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2RlY29k
ZWRJbWFnZSA9IGFkb3B0Q0YoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOworICAgICAg
ICBtX2RlY29kZWRJbWFnZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7CiAg
ICAgICAgIG1fY2dJbWFnZSA9IG1fZGVjb2RlZEltYWdlLmdldCgpOwogICAgIH0gZWxzZQotICAg
ICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
LmdldCgpOwogICAgIGlmICghbV9jZ0ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTUzNiw3ICs1MzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZwogICAgIGNvbnRleHQuc2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLWltYWdlSGVp
Z2h0KTsKICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvbk5vbmUpOwotICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNnSW1hZ2UuZ2V0KCksIGlt
YWdlU2l6ZSwgY2FudmFzUmVjdCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKSwg
Q29tcG9zaXRlQ29weSk7CisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY2dJbWFnZSwgaW1h
Z2VTaXplLCBjYW52YXNSZWN0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZVNpemUpLCBD
b21wb3NpdGVDb3B5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCmluZGV4IGE0NDk2NTQwNDZhZThmMTBhYmFkMTY0MTVlNjQ2MGFkYmJiYjhlODguLjE2MjA5
YWY1MzQ0ODFkYjRjZGRkOGI0MjNjZTdiZjJhNDBiMGRiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
QEAgLTMxMSw4ICszMTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgIGZsb2F0IGFk
anVzdGVkWCA9IHBoYXNlLngoKSAtIGRlc3RSZWN0LngoKSArIHRpbGVSZWN0LngoKSAqIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOyAvLyBXZSB0cmFuc2xhdGVk
IHRoZSBjb250ZXh0IHNvIHRoYXQgZGVzdFJlY3QueCgpIGlzIHRoZSBvcmlnaW4sIHNvIHN1YnRy
YWN0IGl0IG91dC4KICAgICBmbG9hdCBhZGp1c3RlZFkgPSBkZXN0UmVjdC5oZWlnaHQoKSAtIChw
aGFzZS55KCkgLSBkZXN0UmVjdC55KCkgKyB0aWxlUmVjdC55KCkgKiBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKSArIHNjYWxlZFRpbGVIZWlnaHQpOwogCi0gICAg
Q0dJbWFnZVJlZiB0aWxlSW1hZ2UgPSBpbWFnZS5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwotICAgIGZsb2F0IGggPSBDR0ltYWdlR2V0SGVpZ2h0KHRpbGVJbWFnZSk7CisgICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IHRpbGVJbWFnZSA9IGltYWdlLm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CisgICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdlLmdldCgpKTsK
IAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKICNpZiBQTEFURk9STShJT1Mp
CkBAIC0zMjYsMTMgKzMyNiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4o
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAgICAv
LyBDb3B5aW5nIGEgc3ViLWltYWdlIG91dCBvZiBhIHBhcnRpYWxseS1kZWNvZGVkIGltYWdlIHN0
b3BzIHRoZSBkZWNvZGluZyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2UuIEl0IHNob3VsZCBuZXZlciBo
YXBwZW4KICAgICAgICAgLy8gYmVjYXVzZSBzdWItaW1hZ2VzIGFyZSBvbmx5IHVzZWQgZm9yIGJv
cmRlci1pbWFnZSwgd2hpY2ggb25seSByZW5kZXJzIHdoZW4gdGhlIGltYWdlIGlzIGZ1bGx5IGRl
Y29kZWQuCiAgICAgICAgIEFTU0VSVChoID09IGltYWdlLmhlaWdodCgpKTsKLSAgICAgICAgc3Vi
SW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QodGlsZUltYWdlLCB0
aWxlUmVjdCkpOworICAgICAgICBzdWJJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJ
bWFnZUluUmVjdCh0aWxlSW1hZ2UuZ2V0KCksIHRpbGVSZWN0KSk7CiAgICAgfQogCiAgICAgLy8g
SWYgd2UgbmVlZCB0byBwYWludCBnYXBzIGJldHdlZW4gdGlsZXMgYmVjYXVzZSB3ZSBoYXZlIGEg
cGFydGlhbGx5IGxvYWRlZCBpbWFnZSBvciBub24temVybyBzcGFjaW5nLAogICAgIC8vIGZhbGwg
YmFjayB0byB0aGUgbGVzcyBlZmZpY2llbnQgQ0dQYXR0ZXJuLWJhc2VkIG1lY2hhbmlzbS4KICAg
ICBmbG9hdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7Ci0gICAgZmxvYXQgdyA9IENHSW1hZ2VH
ZXRXaWR0aCh0aWxlSW1hZ2UpOworICAgIGZsb2F0IHcgPSBDR0ltYWdlR2V0V2lkdGgodGlsZUlt
YWdlLmdldCgpKTsKICAgICBpZiAodyA9PSBpbWFnZS5zaXplKCkud2lkdGgoKSAmJiBoID09IGlt
YWdlLnNpemUoKS5oZWlnaHQoKSAmJiAhc3BhY2luZy53aWR0aCgpICYmICFzcGFjaW5nLmhlaWdo
dCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBDRyBzZWVtcyB0byBzbmFwIHRoZSBpbWFnZXMgdG8g
aW50ZWdyYWwgc2l6ZXMuIFdoZW4gd2UgY2FyZSAoZS5nLiB3aXRoIGJvcmRlci1pbWFnZS1yZXBl
YXQ6IHJvdW5kKSwKICAgICAgICAgLy8gd2Ugc2hvdWxkIHRpbGUgYWxsIGJ1dCB0aGUgbGFzdCwg
YW5kIHN0ZXRjaCB0aGUgbGFzdCBpbWFnZSB0byBmaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTU5
ZGYzMzdkMzg3NDU3OWU5NWQzOTBlNjRkOGJkMGJlMzkwMjZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmNwcApAQCAt
MCwwICsxLDM5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworI2lm
IFVTRShDRykKKworI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKKyNpZiAhUExBVEZPUk0oSU9T
KQorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgor
I2Vsc2UKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjZW5kaWYKKworI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjaW1wb3J0IDxJ
bWFnZUlPL0NHSW1hZ2VTb3VyY2VQcml2YXRlLmg+CisjZWxzZQorY29uc3QgQ0ZTdHJpbmdSZWYg
a0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTdWJz
YW1wbGVGYWN0b3IiKTsKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkQ2Fj
aGVJbW1lZGlhdGVseSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlSW1tZWRpYXRl
bHkiKTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjb25zdCBDRlN0cmlu
Z1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RS
KCJVbmNsYW1wZWREZWxheVRpbWUiKTsKK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdl
UHJvcGVydHlBUE5HRGVsYXlUaW1lID0gQ0ZTVFIoIkRlbGF5VGltZSIpOworY29uc3QgQ0ZTdHJp
bmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENv
dW50Iik7CisKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdC
MzIgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiIpOworY29uc3QgQ0ZT
dHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3Vy
Y2VTa2lwTWV0YWRhdGEiKTsKKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNy
ZWF0ZUltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWws
IERlY29kZU1vZGUgZGVjb2RlTW9kZSkKK3sKKyAgICBjb25zdCBDRkluZGV4IGJhc2ljT3B0aW9u
cyA9IDM7CisgICAgY29uc3Qgdm9pZCoga2V5c1tiYXNpY09wdGlvbnMgKyAyXSA9IHsga0NHSW1h
Z2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NH
SW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgfTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNbYmFzaWNP
cHRpb25zICsgMl0gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVh
blRydWUgfTsKKyAgICBDRkluZGV4IG51bU9wdGlvbnMgPSBiYXNpY09wdGlvbnM7CisgICAgCisg
ICAgaWYgKHN1YnNhbXBsaW5nTGV2ZWwgPiAwKSB7CisgICAgICAgIHNob3J0IGNvbnN0cmFpbmVk
U3Vic2FtcGxpbmdMZXZlbCA9IHN0ZDo6bWluPHNob3J0PigzLCBzdGQ6Om1heDxzaG9ydD4oMCwg
c3Vic2FtcGxpbmdMZXZlbCkpOworICAgICAgICBpbnQgc3Vic2FtcGxlSW50ID0gMSA8PCBjb25z
dHJhaW5lZFN1YnNhbXBsaW5nTGV2ZWw7IC8vIFswLi4zXSA9PiBbMSwgMiwgNCwgOF0KKyAgICAg
ICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBzdWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVt
YmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOwor
ICAgICAgICAKKyAgICAgICAga2V5c1tudW1PcHRpb25zXSA9IGtDR0ltYWdlU291cmNlU3Vic2Ft
cGxlRmFjdG9yOworICAgICAgICB2YWx1ZXNbbnVtT3B0aW9ucysrXSA9IGtDR0ltYWdlU291cmNl
U3Vic2FtcGxlRmFjdG9yOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVjb2RlTW9kZSA9PSBEZWNv
ZGVNb2RlOjpJbW1lZGlhdGUpIHsKKyAgICAgICAga2V5c1tudW1PcHRpb25zXSA9IGtDR0ltYWdl
U291cmNlU2hvdWxkQ2FjaGVJbW1lZGlhdGVseTsKKyAgICAgICAgdmFsdWVzW251bU9wdGlvbnMr
K10gPSBrQ0ZCb29sZWFuVHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VTb3VyY2VP
cHRpb25zKFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCA9IDAsIERlY29kZU1vZGUg
ZGVjb2RlTW9kZSA9IERlY29kZU1vZGU6OkxhenkpCit7CisgICAgaWYgKHN1YnNhbXBsaW5nTGV2
ZWwgfHwgZGVjb2RlTW9kZSA9PSBEZWNvZGVNb2RlOjpJbW1lZGlhdGUpCisgICAgICAgIHJldHVy
biBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RlTW9kZSk7
CisgICAgCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+PiBvcHRpb25zID0gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKDAsIERlY29kZU1vZGU6Okxh
enkpOworICAgIHJldHVybiBvcHRpb25zOworfQorCitzdGF0aWMgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKENGRGljdGlvbmFyeVJlZiBpbWFnZVByb3BlcnRpZXMp
Cit7CisgICAgQVNTRVJUKGltYWdlUHJvcGVydGllcyk7CisgICAgQ0ZOdW1iZXJSZWYgb3JpZW50
YXRpb25Qcm9wZXJ0eSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVBy
b3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlPcmllbnRhdGlvbik7CisgICAgaWYgKCFvcmllbnRh
dGlvblByb3BlcnR5KQorICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Cisg
ICAgCisgICAgaW50IGV4aWZWYWx1ZTsKKyAgICBDRk51bWJlckdldFZhbHVlKG9yaWVudGF0aW9u
UHJvcGVydHksIGtDRk51bWJlckludFR5cGUsICZleGlmVmFsdWUpOworICAgIHJldHVybiBJbWFn
ZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZhbHVlKGV4aWZWYWx1ZSk7Cit9CisKK0ltYWdlRGVjb2Rl
cjo6SW1hZ2VEZWNvZGVyKCkKK3sKKyAgICBtX25hdGl2ZURlY29kZXIgPSBDR0ltYWdlU291cmNl
Q3JlYXRlSW5jcmVtZW50YWwoMCk7Cit9CisKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VEZWNvZGVy
OjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwg
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2Ft
cGxpbmcgbGV2ZWxzOiAwID0gMXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCisg
ICAgZmxvYXQgY2xhbXBlZFNjYWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxm
bG9hdD4oMSwgc2NhbGUpKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHJlc3VsdCA9IGNlaWxmKGxv
ZzJmKDEgLyBjbGFtcGVkU2NhbGUpKTsKKyAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1bHQg
PD0gMyk7CisgICAgcmV0dXJuIHN0ZDo6bWluKHJlc3VsdCwgbWF4aW11bVN1YnNhbXBsaW5nTGV2
ZWwpOworfQorCitzaXplX3QgSW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVBy
b3BlcnRpZXMoKQoreworICAgIC8vIE1lYXN1cmVkIGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxvYyBj
YWxscyBvbiBNYWMgT1MgMTAuNi42LCB4ODZfNjQuCisgICAgLy8gQSBub24temVybyB2YWx1ZSBl
bnN1cmVzIGNhY2hlZCBpbWFnZXMgd2l0aCBubyBkZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRlcgor
ICAgIC8vIHRoZSBsaXZlIGRlY29kZWQgcmVzb3VyY2VzIGxpc3Qgd2hlbiB0aGUgQ0dJbWFnZVNv
dXJjZSBkZWNvZGVzIGltYWdlCisgICAgLy8gcHJvcGVydGllcywgYWxsb3dpbmcgdGhlIGNhY2hl
IHRvIHBydW5lIHRoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZS4KKyAgICAvLyBUaGlzIHZhbHVl
IGlzIGxpa2VseSB0byBiZSBpbmFjY3VyYXRlIG9uIG90aGVyIHBsYXRmb3JtcywgYnV0IHRoZSBv
dmVyYWxsCisgICAgLy8gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLgorICAgIHJldHVybiAxMzA4ODsK
K30KKworU3RyaW5nIEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAorewor
ICAgIENGU3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1f
bmF0aXZlRGVjb2Rlcik7CisgICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVuc2lvbkZv
ckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOworfQorCitib29sIEltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBSYWduYXJvcyB5ZWxsczogVE9P
IFNPT04hIFlvdSBoYXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKKyAgICBpZiAo
Q0dJbWFnZVNvdXJjZUdldFN0YXR1cyhtX25hdGl2ZURlY29kZXIpIDwga0NHSW1hZ2VTdGF0dXNJ
bmNvbXBsZXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNv
cHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9u
cygpLmdldCgpKSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFBy
b3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQorICAgICYmIENGRGlj
dGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVy
dHlQaXhlbEhlaWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QK
K3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zaXplID0gZnJhbWVTaXpl
QXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3QgSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldENv
dW50KG1fbmF0aXZlRGVjb2Rlcik7Cit9CisKK2ludCBJbWFnZURlY29kZXI6OnJlcGV0aXRpb25D
b3VudCgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGll
cyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1fbmF0aXZlRGVjb2Rlciwg
aW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAg
ICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBy
b3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5KTsKKyAgICBpZiAo
Z2lmUHJvcGVydGllcykgeworICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRkxv
b3BDb3VudCk7CisgICAgICAgIAorICAgICAgICAvLyBObyBwcm9wZXJ0eSBtZWFucyBsb29wIG9u
Y2UuCisgICAgICAgIGlmICghbnVtKQorICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29w
T25jZTsKKyAgICAgICAgCisgICAgICAgIGludCBsb29wQ291bnQ7CisgICAgICAgIENGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmbG9vcENvdW50KTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEEgcHJvcGVydHkgd2l0aCB2YWx1ZSAwIG1lYW5zIGxvb3AgZm9yZXZlci4KKyAg
ICAgICAgcmV0dXJuIGxvb3BDb3VudCA/IGxvb3BDb3VudCA6IGNBbmltYXRpb25Mb29wSW5maW5p
dGU7CisgICAgfQorICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0gKENG
RGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJ
bWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgaWYgKHBuZ1Byb3BlcnRpZXMpIHsKKyAg
ICAgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50KTsKKyAg
ICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwor
ICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOworICAgICAgICByZXR1cm4gbG9v
cENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKKyAgICB9CisgICAg
CisgICAgLy8gVHVybnMgb3V0IHdlJ3JlIG5vdCBhbiBhbmltYXRlZCBpbWFnZSBhZnRlciBhbGws
IHNvIHdlIGRvbid0IGFuaW1hdGUuCisgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworfQorCiti
b29sIEltYWdlRGVjb2Rlcjo6Z2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKK3sK
KyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0lt
YWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgMCwgaW1hZ2VT
b3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnQgeCA9IC0xLCB5ID0gLTE7CisgICAgQ0ZOdW1iZXJS
ZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0
KCksIENGU1RSKCJob3RzcG90WCIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1
ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVz
LmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0
VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBob3RTcG90ID0gSW50UG9pbnQoeCwgeSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0ludFNpemUgSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJv
cGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25z
KHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7CisgICAgCisgICAgaWYgKCFwcm9wZXJ0aWVzKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhl
aWdodCA9IDA7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsK
KyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50
VHlwZSwgJndpZHRoKTsKKyAgICAKKyAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsK
KyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50
VHlwZSwgJmhlaWdodCk7CisgICAgCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7
Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoZnJhbWVDb3VudCgpKTsKKyAgICByZXR1cm4gQ0dJ
bWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCkgPT0ga0NH
SW1hZ2VTdGF0dXNDb21wbGV0ZTsKK30KKworSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXI6
Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQ
cm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlv
bnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uOworICAgIAorICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9w
ZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOworfQorCitmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1l
RHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBmbG9hdCBkdXJhdGlv
biA9IDA7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGlu
ZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmIChwcm9wZXJ0aWVzKSB7
CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5
R0lGRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgICAg
ICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUpKSB7
CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgaXQg
ZXhpc3RzLgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJG
bG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVyUmVm
IG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBr
Q0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgeworICAgICAgICAgICAgICAgIC8vIEZhbGwg
YmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1lIGRl
bGF5IGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVt
LCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0gKENG
RGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJ
bWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7
CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HVW5j
bGFtcGVkRGVsYXlUaW1lKSkKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwg
a0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICAgICAgZWxzZSBpZiAoQ0ZO
dW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3Bl
cnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lKSkKKyAgICAgICAgICAg
ICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24p
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNp
ZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3Nz
aWJsZS4KKyAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJh
dGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5CisgICAgLy8gYSBkdXJh
dGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6
Ly93ZWJraXQub3JnL2IvMzYwODI+CisgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAg
aWYgKGR1cmF0aW9uIDwgMC4wMTFmKQorICAgICAgICByZXR1cm4gMC4xZjsKKyAgICByZXR1cm4g
ZHVyYXRpb247Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFt
ZUF0SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgo
bV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlm
ICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENGRGljdGlv
bmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZE
aWN0aW9uYXJ5KSk7CisgICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGQm9vbGVh
blJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFy
eUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3Np
dmUpKTsKKyAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgeworICAgICAgICAgICAgYm9vbCBpc1By
b2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKKyAgICAgICAgICAg
IC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVy
aW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKKyAg
ICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cu
IFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2Vz
LiBUaGlzCisgICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2Ug
aW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2Js
ZW0vNTE5MTQxOD4pCisgICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVy
OjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFm
cmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRp
dmVEZWNvZGVyKTsKKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgbm8gaW1h
Z2UgdHlwZSBvciB0aGUgaW1hZ2UgdHlwZSBpcyBKUEVHLCBiZWNhdXNlCisgICAgLy8gSlBFRyBk
b2VzIG5vdCBzdXBwb3J0IGFscGhhIHRyYW5zcGFyZW5jeS4KKyAgICBpZiAoIWltYWdlVHlwZSB8
fCBDRkVxdWFsKGltYWdlVHlwZSwgQ0ZTVFIoInB1YmxpYy5qcGVnIikpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IENvdWxkIHJldHVybiBmYWxzZSBmb3Igb3Ro
ZXIgbm9uLXRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMuCisgICAgLy8gRklYTUU6IENvdWxkIG1h
eWJlIHJldHVybiBmYWxzZSBmb3IgYSBHSUYgRnJhbWUgaWYgd2UgaGF2ZSBlbm91Z2ggaW5mbyBp
biB0aGUgR0lGIHByb3BlcnRpZXMgZGljdGlvbmFyeQorICAgIC8vIHRvIGRldGVybWluZSB3aGV0
aGVyIG9yIG5vdCBhIHRyYW5zcGFyZW50IGNvbG9yIHdhcyBkZWZpbmVkLgorICAgIHJldHVybiB0
cnVlOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAg
IEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdM
ZXZlbCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhlaWdodCgp
ICogNDsKK30KKworUGFzc05hdGl2ZUltYWdlUHRyIEltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJ
bWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2
ZWwsIERlY29kZU1vZGUgZGVjb2RlTW9kZSkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9u
YXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWws
IGRlY29kZU1vZGUpLmdldCgpKSk7CisgICAgICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAv
LyA8cmRhcjovL3Byb2JsZW0vNzM3MTE5OD4gLSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUgZGVm
YXVsdCBjYWNoaW5nIGJlaGF2aW91ciBpbiBpT1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1RyYW5z
aWVudAorICAgIC8vIHdoaWNoIGNhdXNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9yIHVz
IHNpbmNlIHRoZSBpbWFnZXMgaGFkIHRvIGJlIHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkgdGlt
ZSB3ZSBjYWxsZWQKKyAgICAvLyBDR0NvbnRleHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENHIHRv
IGNhY2hlIHRoZSBkcmF3biBpbWFnZXMuIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2Njc1
NT4gLQorICAgIC8vIENvcmVHcmFwaGljcyBuZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1hZ2VD
YWNoaW5nVGVtcG9yYXJ5IHNpbmNlIGl0J3Mgc3RpbGwgbm90IHRoZSBkZWZhdWx0LgorI2lmIENP
TVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorI2VuZGlm
CisgICAgICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2Fj
aGluZ1RlbXBvcmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAgIAorICAg
IENGU3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNv
ZGVyKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1Ymxp
Yy54Yml0bWFwLWltYWdlIik7CisKKyAgICBpZiAoIWltYWdlVVRJKQorICAgICAgICByZXR1cm4g
aW1hZ2U7CisKKyAgICBpZiAoIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVUSSkpCisgICAgICAgIHJl
dHVybiBpbWFnZTsKKworICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFzayBvdXQgYWxs
IHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KKyAgICBjb25zdCBD
R0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwgMjU1LCAyNTV9
OworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5nQ29sb3JzKSk7Cisg
ICAgcmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2UgOiBpbWFnZTsKK30KKyAgICAKK3Zv
aWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8gT24gTWFjIHRoZSBOU0Rh
dGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRvIHdp
dGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4KKyAgICAvLyBXZSB1c2UgU2hhcmVk
QnVmZmVyJ3MgYWJpbGl0eSB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBhcm91
bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzCisgICAgLy8gcmVhbGx5IGxvb2tpbmcg
YXQgdGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX25hdGl2
ZURlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwor
I2Vsc2UKKyAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFyZWRC
dWZmZXIuCisgICAgZGF0YS0+cmVmKCk7CisgICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0UG9z
aXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNhdXNl
IFNoYXJlZEJ1ZmZlcgorICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3du
IHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNo
CisgICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVyIGNh
bGxiYWNrLgorICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJh
Y2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1
ZmZlclJlbGVhc2UgfTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92
aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6
ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVBy
b3ZpZGVyKG1fbmF0aXZlRGVjb2RlciwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2
ZWQpOworI2VuZGlmCit9CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTU2MWFiOWUxNzc5MTcyYmYzZWQyN2ZhMDQwYTBlNDE5MWJhMTY2ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIEltYWdlRGVjb2Rlcl9oCisKKyNp
bmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSk7CisKK2VudW0gY2xhc3MgRGVjb2RlTW9kZSB7IEltbWVkaWF0
ZSwgTGF6eSB9OworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2RlciB7
CitwdWJsaWM6CisgICAgSW1hZ2VEZWNvZGVyKCk7CisgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVy
KCkgeyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVy
dGllcygpOworICAgIHN0YXRpYyBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JT
Y2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZl
bCk7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKyAgICBib29sIGlz
U2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIHNp
emVfdCBmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0
OworICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3Q7CisKKyAgICBJ
bnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsK
KyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OworCisgICAgZmxv
YXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGZyYW1lSGFz
QWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZG
cmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBjb25zdDsKKworICAgIFBhc3NOYXRpdmVJ
bWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWws
IERlY29kZU1vZGUgPSBEZWNvZGVNb2RlOjpMYXp5KSBjb25zdDsKKworICAgIHZvaWQgc2V0RGF0
YShTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsKKyAgICBDR0ltYWdlU291cmNlUmVmIG1fbmF0
aXZlRGVjb2RlcjsKK307CisgICAgCit9CisKKyNlbmRpZiAvLyBJbWFnZURlY29kZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNH
LmNwcAppbmRleCBkNGEwMTJiNmY1N2JmNTM5MzA2NDc3N2I2YzEwOTM2NmIyNGM0NDVjLi5kY2Y3
OWE3MmExNWU5Zjc5NDBmYWRhNmQ2MTk1YjhjZDQzNTQzM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcApAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkltYWdlU291cmNlQ0cuaCIKIAogI2luY2x1ZGUgIkNvcmVH
cmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKQEAgLTQ0LDQ0ICs0NSw5IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlm
CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8SW1hZ2VJTy9DR0ltYWdl
U291cmNlUHJpdmF0ZS5oPgotI2Vsc2UKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNl
U3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIik7
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBDRlN0cmluZ1JlZiBXZWJD
b3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1w
ZWREZWxheVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlB
UE5HRGVsYXlUaW1lID0gQ0ZTVFIoIkRlbGF5VGltZSIpOwotY29uc3QgQ0ZTdHJpbmdSZWYgV2Vi
Q29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7Ci0K
LWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNU
Uigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiIpOwotY29uc3QgQ0ZTdHJpbmdSZWYg
a0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0
YWRhdGEiKTsKLQotI2lmICFQTEFURk9STShDT0NPQSkKLXNpemVfdCBzaGFyZWRCdWZmZXJHZXRC
eXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwg
c2l6ZV90IGNvdW50KQotewotICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGlj
X2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7Ci0gICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFy
ZWRCdWZmZXItPnNpemUoKTsKLSAgICBpZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBjaGFyKiBzb3VyY2UgPSBzaGFyZWRCdWZmZXItPmRh
dGEoKSArIHBvc2l0aW9uOwotICAgIHNpemVfdCBhbW91bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KGNv
dW50LCBzb3VyY2VTaXplIC0gcG9zaXRpb24pOwotICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwg
YW1vdW50KTsKLSAgICByZXR1cm4gYW1vdW50OwotfQotCi12b2lkIHNoYXJlZEJ1ZmZlclJlbGVh
c2Uodm9pZCogaW5mbykKLXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRp
Y19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAgIHNoYXJlZEJ1ZmZlci0+ZGVyZWYoKTsK
LX0KLSNlbmRpZgotCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhh
T3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0gICAgOiBt
X2RlY29kZXIoMCkKIHsKICAgICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIGFyZSBpZ25vcmVkLgogfQpAQCAtMTAwLDM1NCArNjYsMTI5IEBAIHZv
aWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZGVjb2Rl
cikgewotICAgICAgICBDRlJlbGVhc2UobV9kZWNvZGVyKTsKKyAgICAgICAgZGVsZXRlIG1fZGVj
b2RlcjsKICAgICAgICAgbV9kZWNvZGVyID0gMDsKICAgICB9CisgICAgCiAgICAgaWYgKGRhdGEp
CiAgICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KLQotc3RhdGljIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCisgICAgCit2b2lkIEltYWdlU291cmNlOjplbnN1
cmVEZWNvZGVySXNDcmVhdGVkKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIXN1YnNh
bXBsaW5nTGV2ZWwpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgbnVtT3B0aW9ucyA9IDM7Ci0g
ICAgICAgIGNvbnN0IHZvaWQqIGtleXNbbnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hv
dWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNl
U2tpcE1ldGFkYXRhIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tudW1PcHRpb25zXSA9
IHsga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9OwotICAg
ICAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVlcywgbnVt
T3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgfQotCi0gICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1w
bGluZ0xldmVsID0gc3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1w
bGluZ0xldmVsKSk7Ci0gICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRTdWJz
YW1wbGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCi0KLSAgICBSZXRhaW5QdHI8
Q0ZOdW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVs
bHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7Ci0gICAgY29uc3QgQ0ZJ
bmRleCBudW1PcHRpb25zID0gNDsKLSAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0g
eyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJH
QjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVG
YWN0b3IgfTsKLSAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xl
YW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5n
ZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBr
ZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0
YSk7CisgICAgCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fZGVjb2RlciA9IG5ldyBJbWFnZURlY29kZXIoKTsKIH0KLQotc3RhdGljIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwgPSAwKQorICAgIAordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRC
dWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmIChzdWJzYW1wbGlu
Z0xldmVsKQotICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBs
aW5nTGV2ZWwpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25zID0gY3Jl
YXRlSW1hZ2VTb3VyY2VPcHRpb25zKDApOwotICAgIHJldHVybiBvcHRpb25zOwotfQorICAgIGVu
c3VyZURlY29kZXJJc0NyZWF0ZWQoZGF0YSk7CisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLWJvb2wg
SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVy
OworICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi12
b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QK
IHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9k
ZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIE9uIE1h
YyB0aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBl
bmRlZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuICBXZSB1c2UgU2hh
cmVkQnVmZmVyJ3MgYWJpbGl0eQotICAgIC8vIHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEg
dG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0IEltYWdlSU8gaXMgcmVhbGx5IGxvb2tp
bmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX2Rl
Y29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vs
c2UKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJj
ZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRv
IHdyYXAgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBkYXRhLT5yZWYoKTsKLSAgICAvLyBXZSB1c2Ug
dGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBv
aW50ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVmZmVyCi0gICAgLy8gZG9lcyBub3QgcHJvdmlkZSBh
IHdheSB0byBsb2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQg
d29uJ3QgbW92ZSwgd2hpY2gKLSAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUg
R2V0Qnl0ZVBvaW50ZXIgY2FsbGJhY2suCi0gICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFj
a3MgcHJvdmlkZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQ
b3NpdGlvbiwgc2hhcmVkQnVmZmVyUmVsZWFzZSB9OwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92
aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVj
dChkYXRhLCBkYXRhLT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOwotICAgIENHSW1hZ2VT
b3VyY2VVcGRhdGVEYXRhUHJvdmlkZXIobV9kZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFs
bERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVj
b2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IFN0cmluZygpOwogfQogCi1TdHJpbmcgSW1hZ2VT
b3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VT
b3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdM
ZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVjb2Rl
cikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIENGU3RyaW5nUmVmIGltYWdlU291cmNl
VHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7Ci0gICAgcmV0dXJuIFdlYkNv
cmU6OnByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUp
OworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShzY2Fs
ZSwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwogfQorICAgIAogCi1TdWJzYW1wbGluZ0xldmVs
IEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUpIGNvbnN0
CitzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygp
IGNvbnN0CiB7Ci0gICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2ZWxzOiAwID0g
MXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCi0gICAgZmxvYXQgY2xhbXBlZFNj
YWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwgc2NhbGUpKTsK
LSAgICBpbnQgcmVzdWx0ID0gY2VpbGYobG9nMmYoMSAvIGNsYW1wZWRTY2FsZSkpOwotICAgIEFT
U0VSVChyZXN1bHQgPj0wICYmIHJlc3VsdCA8PSAzKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygp
OwogfQotCisgICAgCiBib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQogewotICAg
IC8vIFJhZ25hcm9zIHllbGxzOiBUT08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNP
T04sIEV4ZWN1dHVzIQotICAgIGlmIChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fZGVjb2Rlcikg
PCBrQ0dJbWFnZVN0YXR1c0luY29tcGxldGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlMFByb3BlcnRpZXMgPSBhZG9wdENGKENH
SW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJj
ZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghaW1hZ2UwUHJvcGVydGllcykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdl
MFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQotICAgICAgICAm
JiBDRkRpY3Rpb25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFn
ZVByb3BlcnR5UGl4ZWxIZWlnaHQpOworICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVy
LT5pc1NpemVBdmFpbGFibGUoKTsKIH0KIAotc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50
YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQorYm9v
bCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBDRk51bWJlclJl
ZiBvcmllbnRhdGlvblByb3BlcnR5ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGltYWdlUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eU9yaWVudGF0aW9uKTsKLSAgICBpZiAo
IW9yaWVudGF0aW9uUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRh
dGlvbjsKLQotICAgIGludCBleGlmVmFsdWU7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1ZShvcmllbnRh
dGlvblByb3BlcnR5LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZXhpZlZhbHVlKTsKLSAgICByZXR1cm4g
SW1hZ2VPcmllbnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOworICAgIHJldHVybiBp
bml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4
KGluZGV4KTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVB
dEluZGV4KHNpemVfdCkgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIFJlc3Bl
Y3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29u
c3QKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRD
RihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VT
b3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRp
Y19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5n
ZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7Ci0gICAgaWYgKGpmaWZQcm9w
ZXJ0aWVzKSB7Ci0gICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2Fz
dDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJ
bWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKLSAgICAgICAgaWYgKGlzUHJvZ0NGQm9v
bCkgewotICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUo
aXNQcm9nQ0ZCb29sKTsKLSAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJv
YmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBF
Ry4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKLSAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3Ig
YSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1
Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCi0gICAgICAgICAgICAvLyB3aWxsIGNh
dXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUg
ZGVjb2RlZC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlz
c3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCi0gICAgICAgICAgICByZXR1
cm4gIWlzUHJvZ3Jlc3NpdmU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5k
ZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwp
LmdldCgpKSk7Ci0KLSAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgaWYgKCFpbml0aWFsaXplZCgp
KQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBp
bnQgaGVpZ2h0ID0gMDsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lk
dGgpOwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmd2lkdGgpOwotICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwot
ICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmaGVpZ2h0KTsKLQotICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50
YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9tUHJv
cGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKS51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAgICBy
ZXR1cm4gSW50U2l6ZShoZWlnaHQsIHdpZHRoKTsKKyAgICBJbnRTaXplIHNpemUgPSBtX2RlY29k
ZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBtX2RlY29kZXItPm9yaWVudGF0aW9uQXRJbmRleChp
bmRleCk7CiAKLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4g
c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24g
JiYgb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUo
KSA6IHNpemU7CiB9CiAKIEltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJ
bmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAg
IGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9u
OwotCi0gICAgcmV0dXJuIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQo
KSk7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPm9yaWVudGF0aW9uQXRJ
bmRleChpbmRleCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKIH0KIAotSW50U2l6ZSBJbWFn
ZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNv
bnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZnJh
bWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0
SW5kZXgoMCwgMCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQm
IGhvdFNwb3QpIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uKCkgY29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0
aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2Rl
ciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCB4ID0gLTEsIHkgPSAtMTsKLSAgICBD
Rk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVy
dGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RYIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJl
ckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJngpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVy
dGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RZIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJl
ckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJnkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoeCA8IDAgfHwgeSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGhvdFNwb3QgPSBJbnRQb2ludCh4LCB5KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CiB9CiAK
LXNpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkg
Y29uc3QKK2Jvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNv
bnN0CiB7Ci0gICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9jIGNhbGxzIG9u
IE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KLSAgICAvLyBBIG5vbi16ZXJvIHZhbHVlIGVuc3VyZXMg
Y2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVyCi0gICAgLy8g
dGhlIGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVuIHRoZSBDR0ltYWdlU291cmNlIGRl
Y29kZXMgaW1hZ2UKLSAgICAvLyBwcm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUgY2FjaGUgdG8gcHJ1
bmUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgotICAgIC8vIFRoaXMgdmFsdWUgaXMgbGlr
ZWx5IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZvcm1zLCBidXQgdGhlIG92ZXJhbGwK
LSAgICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCi0gICAgcmV0dXJuIDEzMDg4OworICAgIHJl
dHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVyLT5nZXRIb3RTcG90KGhvdFNwb3QpOwogfQotICAg
IAorCiBpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCiB7Ci0gICAgaWYgKCFpbml0
aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJj
ZUNvcHlQcm9wZXJ0aWVzKG1fZGVjb2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsK
LSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7
Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJ
RkRpY3Rpb25hcnkpOwotICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVz
LCBrQ0dJbWFnZVByb3BlcnR5R0lGTG9vcENvdW50KTsKLQotICAgICAgICAvLyBObyBwcm9wZXJ0
eSBtZWFucyBsb29wIG9uY2UuCi0gICAgICAgIGlmICghbnVtKQotICAgICAgICAgICAgcmV0dXJu
IGNBbmltYXRpb25Mb29wT25jZTsKLQotICAgICAgICBpbnQgbG9vcENvdW50OwotICAgICAgICBD
Rk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0KLSAg
ICAgICAgLy8gQSBwcm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVyLgotICAg
ICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0
ZTsKLSAgICB9Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rp
b25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7Ci0gICAgICAg
IENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQ
cm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCk7Ci0gICAgICAg
IGlmICghbnVtKQotICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQotICAg
ICAgICBpbnQgbG9vcENvdW50OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVt
YmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0gICAgICAgIHJldHVybiBsb29wQ291bnQgPyBsb29w
Q291bnQgOiBjQW5pbWF0aW9uTG9vcEluZmluaXRlOwotICAgIH0KLQotICAgIC8vIFR1cm5zIG91
dCB3ZSdyZSBub3QgYW4gYW5pbWF0ZWQgaW1hZ2UgYWZ0ZXIgYWxsLCBzbyB3ZSBkb24ndCBhbmlt
YXRlLgotICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQo
KSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTG9vcE9uY2U7CiB9
CiAKIHNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZGVjb2RlciA/IENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX2RlY29kZXIpIDogMDsKKyAgICBy
ZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQogCi1DR0lt
YWdlUmVmIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCitQYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VT
b3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwg
aW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNz
IGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJ
bWFnZUNhY2hpbmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVj
cmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBX
ZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjov
L3Byb2JsZW0vMTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVw
cmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUg
ZGVmYXVsdC4KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSNlbmRpZgotICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCks
IGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0K
LSAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rl
cik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMu
eGJpdG1hcC1pbWFnZSIpOwotCi0gICAgaWYgKCFpbWFnZVVUSSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlLmxlYWtSZWYoKTsKLQotICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKLSAg
ICAgICAgcmV0dXJuIGltYWdlLmxlYWtSZWYoKTsKLSAgICAKLSAgICAvLyBJZiBpdCBpcyBhbiB4
Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJlYXMgdG8gcmVuZGVyIHRoZW0gdHJh
bnNwYXJlbnQuCi0gICAgY29uc3QgQ0dGbG9hdCBtYXNraW5nQ29sb3JzWzZdID0gezI1NSwgMjU1
LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbWFza2Vk
SW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9ycyhpbWFnZS5nZXQo
KSwgbWFza2luZ0NvbG9ycykpOwotICAgIGlmICghbWFza2VkSW1hZ2UpCi0gICAgICAgIHJldHVy
biBpbWFnZS5sZWFrUmVmKCk7Ci0KLSAgICByZXR1cm4gbWFza2VkSW1hZ2UubGVha1JlZigpOwor
ICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJ
bmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOwogfQogCiBib29sIEltYWdl
U291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NF
UlQoZnJhbWVDb3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5k
ZXgobV9kZWNvZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKKyAgICByZXR1
cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5k
ZXgpOwogfQogCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
cHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleCht
X2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmIChw
cm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENG
RGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJ
bWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7
Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWRE
ZWxheVRpbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUg
ZGVsYXkgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVt
LCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQ
cm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAgICAg
ICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFt
cGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIENGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9
IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwg
a0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgICAgICBpZiAocG5nUHJvcGVydGll
cykgewotICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBO
R1VuY2xhbXBlZERlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShu
dW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQ
cm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAgICAg
ICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0
aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNp
ZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3Nz
aWJsZS4KLSAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJh
dGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBkdXJh
dGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6
Ly93ZWJraXQub3JnL2IvMzYwODI+Ci0gICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAg
aWYgKGR1cmF0aW9uIDwgMC4wMTFmKQotICAgICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1cm4g
ZHVyYXRpb247CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1lRHVy
YXRpb25BdEluZGV4KGluZGV4KSA6IDA7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFz
QWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBGSVhNRTogd2h5IGRvZXNuJ3QgdGhpcyByZXR1cm4gdHJ1ZT8K
LQotICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5
cGUobV9kZWNvZGVyKTsKLQotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFn
ZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKLSAgICAvLyBKUEVHIGRv
ZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIGlmICghaW1hZ2VUeXBlIHx8
IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5v
bi10cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzLgotICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSBy
ZXR1cm4gZmFsc2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhl
IEdJRiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBv
ciBub3QgYSB0cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdElu
ZGV4KGluZGV4KTsKIH0KIAogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdEluZGV4
KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAog
ewotICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2Ft
cGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKSk7Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhlaWdo
dCgpICogNDsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZnJhbWVCeXRl
c0F0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogMDsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNE
RWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0Nv
bnRleHQzREVmbC5jcHAKaW5kZXggYmE0MTU5N2FhMTEwMWRiNjI5MDIzZDI3M2IyMDBlNzgxZDMz
YWFjOS4uNTljYzJjOWJlOGIzZmZlMTExODZhNjg1ZDJlOGNmNTk0YzFkMzkzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNE
RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhp
Y3NDb250ZXh0M0RFZmwuY3BwCkBAIC0yNjMsNyArMjYzLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFt
ZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCk7CisgICAg
ICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJEIHdpdGgg
SFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBoYWQgYmVl
biBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3IgZWFjaCBwaXhlbCwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KaW5kZXgg
MjE1OTE1ZjI4YTE5MjE3MjM5NmQ0NmYwODZkMjI0OWI4MWQ5ZDc2YS4uZTE4MzNkMTk4MzBiMTA3
NjYzNjY0YjYxMjg0NDU5N2Y4M2ZjMGE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIAotSWNvbjo6SWNvbihDR0ltYWdlUmVmIGltYWdlKQorSWNvbjo6SWNv
bihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKICAgICA6IG1fY2dJbWFnZShpbWFnZSkKIHsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRl
eCBmZjA3MTMxYTYxZmNlZDA0NTg2YjM3MmQ5YmEyMDc5YTk4NzNjMzhiLi5mYTAxMWFhODgxNjMw
MzAwMDk0NDk4ZWJjMGZmY2E5ZmI5YzMwMzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC05NSw3ICs5NSw3IEBAIENGRGF0YVJl
ZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKIAogICAgIFZlY3RvcjxDR0lt
YWdlUmVmPiBpbWFnZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1lczsg
KytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUF0SW5kZXgoaSk7Cisg
ICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwog
ICAgICAgICBpZiAoY2dJbWFnZSkKICAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQ0dXaW4uY3BwCmluZGV4IDgzNWVjZjNmNGZlZWViOGEwZGZhOGQzNjk3MzEyOGYzYjgwN2I5
MjYuLjQ3MDczYzBlZDY5MGUwNDRmZmIzYTk0ZTU4NmYyNjAyNzlkMWM0YzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAg
LTkwLDcgKzkwLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VT
aXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXQKIHsKICAgICBzaXplX3QgZnJh
bWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyAr
K2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleChpKTsKKyAgICAg
ICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwogICAgICAg
ICBpZiAoaW1hZ2UgJiYgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09IHN0YXRp
Y19jYXN0PHNpemVfdD4oc3JjU2l6ZS53aWR0aCgpKSkgewogICAgICAgICAgICAgc2l6ZV90IGN1
cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUg
PSBpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDI5YTIwMjNkYjYzYTkxNDM0YzM5NDhlYWE1NTIzYmI2MWZl
ODEwNzUuLjk3ZWQwOTc5MzVjNTFmYzIwYTg0NWM5NThlMTU2OThkMjAwMGRiODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dp
bi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXQKIHsKICAgICBz
aXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9
IGZyYW1lQXRJbmRleChpKTsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFj
ZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOwogICAgICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0RyYWdJbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VN
YWMubW0KaW5kZXggYmJhZTkxZmE4ZTNjMDY2NDQ3YzQ2NGQ2ZTMxMjAwZGUyNDhjZTgzZi4uOTFj
OTJlOTEyY2MyMTg5MmY2NTllNjdhOTU5NTcxZmJkZDAwMjdiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCkBAIC05MSw3ICs5MSw3IEBAIFJldGFpblB0
cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpCiAgICAgaWYgKGlzPEJpdG1hcEltYWdlPigqaW1hZ2UpKSB7CiAgICAg
ICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247CiAgICAgICAgIEJpdG1hcEltYWdlJiBi
aXRtYXBJbWFnZSA9IGRvd25jYXN0PEJpdG1hcEltYWdlPigqaW1hZ2UpOwotICAgICAgICBJbnRT
aXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBiaXRtYXBJbWFnZS5zaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOwog
CiAgICAgICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKQogICAgICAgICAgICAgb3JpZW50YXRpb24gPSBiaXRtYXBJ
bWFnZS5vcmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273928</attachid>
            <date>2016-03-13 23:31:15 -0700</date>
            <delta_ts>2016-03-14 00:30:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160313233103.patch</filename>
            <type>text/plain</type>
            <size>92795</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjOThmYzYxZmI4ZmUx
ZTAxYTY5MWNjNzg0OTM0NmU1YTkwNzI1MC4uMDViZTIzZDlmMGY3Mjg0NTUxYzM3NzRiMzU2YjMz
MDlhYjI5YWE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNiBAQAorMjAxNi0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGlzIG5vdCBmb3IgcmV2aWV3LiBJdCBpcyBvbmx5IGZvciBFV1MuIEl0
IGNvbnRhaW5zIHRoZSBmaXggb2YKKyAgICAgICAgd2Via2l0IGJ1Z3MgMTU1NDEyIGFuZCAxNTU0
MjIuIEEgc2VwYXJhdGUgcGF0Y2ggd2lsbCBiZSBwb3N0ZWQgZm9yIHJldmlldworICAgICAgICBv
bmNlIHRoaXMgY29tYmluZWQgcGF0Y2ggcGFzc2VzIHRoZSBFV1MuCisKKyAgICAgICAgKiBQbGF0
Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6Omlt
YWdlU2l6ZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
aGF2ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFs
aXplZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVj
a0ZvclNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6
OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1h
Z2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpnZXRDR0ltYWdlUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpn
ZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVJbWFnZUF0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1l
QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDRy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbWFnZVNvdXJj
ZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VTb3VyY2VPcHRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Z2V0SG90U3BvdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6b3JpZW50YXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6On5JbWFnZURlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNp
emVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmdldEhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25D
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6c2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNoYXJlZEJ1ZmZlclJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
bWFnZVNvdXJjZU9wdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9yaWVudGF0aW9u
RnJvbVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6Okljb246
Okljb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorCisyMDE2LTAzLTEzICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgQ2hhbmdlIE5hdGl2ZUltYWdlUHRy
IGZvciBDRyB0byBiZSBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTQxMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhdmluZyBOYXRpdmVJbWFnZVB0ciBhcyBhIHJh
dyBwb2ludGVyIG1ha2VzIG1hbmFnaW5nIHRoZSBsaWZlIGN5Y2xlIG9mCisgICAgICAgIHRoZSBD
R0ltYWdlUmVmIGhhcmQuIEEgbG90IG9mIHdvcmtzIHdhcyBkb25lIHRvIG1ha2Ugc3VyZSB0aGUg
Q0cgcG9pbnRlcgorICAgICAgICBpcyBtYWludGFpbmVkIGNvcnJlY3RseS4gSXQgd2FzIGFsc28g
bm90IHBvc3NpYmxlIHRvIG1vdmUgYSBGcmFtZURhdGEgc2luY2UKKyAgICAgICAgY2FsbGluZyB0
aGUgZGVzdHJ1Y3RvciB3YXMgcmVsZWFzaW5nIHRoZSBDR0ltYWdlUmVmLgorCisgICAgICAgIEkg
YW0gZ29pbmcgdG8gZm9sbG93IHRoaXMgbmFtaW5nIGNvbnZlbnRpb246CisgICAgICAgIDEuIEFu
IEltYWdlIG9iamVjdCBjYW4gaGF2ZSBvbmUgb3IgbW9yZSBGcmFtZURhdGEuIEEgRnJhbWVEYXRh
IGNhbiBiZSBuYW1lZAorICAgICAgICAgICBmb3Igc2hvcnRuZXNzIGFzICJmcmFtZSIsICJtX2Zy
YW1lcyIsIGV0Yy4KKyAgICAgICAgMi4gQSBGcmFtZURhdGEgY2FuIGhhdmUgemVybyBvciBvbmUg
TmF0aXZlSW1hZ2VQdHIuIEEgTmF0aXZlSW1hZ2VQdHIgY2FuCisgICAgICAgICAgIGJlIG5hbWVk
IGFzICJpbWFnZSIsICJtX2ltYWdlIiwgZXRjLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL01l
bW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjphZGRJbWFnZVRv
Q2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6aGF2ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpG
cmFtZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJp
dG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlk
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0
SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6SWNvbjo6SWNvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldFRJRkZS
ZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5n
U291cmNlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5n
U291cmNlU2l6ZSk6CisKIDIwMTYtMDMtMTIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBbRm9ybXM6IGZvY3VzXSBmb2N1cyByaW5ncyBhcm91bmQgdGV4dCBmaWVs
ZHMgZG8gbm90IGZvbGxvdyBjb250b3VyIChib3JkZXItcmFkaXVzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZTUyMDljYjIwY2YwMzM4N2EyNTI2NDNkZjRlMGIyMTUx
NDkyMDRmNy4uN2IzNjdhNzNhYzllMTViZDk1Yzg5Yzk3YTM2YTBmMDI1ZjcyODA3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC03MSw2ICs3MSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZURlY29kZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDgzNWI5YWEyMjRhYTllYWFlZTA0NjIzMzk3ZTk5MDE2ZTlmN2VlYmYuLmRh
Y2RhNTY5MWE2NWM2NjU2MDYzYTRjMDcwNmMxMGEwZWZiNjIxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC00MDAsNiArNDAwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbnRQb2ludENHLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAzMDdiYTM4ZmYwZjNhNGM0NzFiOWQ0MjkxNDYxNjJh
OTU5ZWU3NjYuLjZiNjI5MzEzMzdhMGM3MTk1OTljNjI1NjkxNGFjMjIyYTE1YThhNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTIyOTEsNiArMjI5MSw4IEBACiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5n
c01hY3Jvcy5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9z
LmggKi87IH07CiAJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM3
MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLzsgfTsKIAkJNTUwQTBCQ0Ew
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFs
aWZpZWROYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTU5QkI4NzkxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTlCQjg3NzFDOTY0NjU4
MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLzsgfTsKKwkJNTU5QkI4N0ExQzk2NDY1ODAw
MjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTU5QkI4NzgxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5o
ICovOyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIwMUM2
RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1NzJBN0YyMzFDNkU1
QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVs
YXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBS
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4
MDM3MTVGMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgKi87IH07CkBAIC05ODc1LDYg
Kzk4NzcsOCBAQAogCQk1M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1
YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUz
RDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk1NTlCQjg3NzFDOTY0NjU4MDAyNDEz
Q0QgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1OUJC
ODc4MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRD
bGljay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkg
LyogU2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4
MzMsNiArMjE4MzcsOCBAQAogCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1
ZmZlckRhdGFDRy5jcHAgKi8sCiAJCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdl
QnVmZmVyRGF0YUNHLmggKi8sCiAJCQkJQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdl
Q0cuY3BwICovLAorCQkJCTU1OUJCODc3MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIu
Y3BwICovLAorCQkJCTU1OUJCODc4MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuaCAq
LywKIAkJCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi8s
CiAJCQkJNEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLywKIAkJ
CQk0QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSAqLywKQEAg
LTI2ODEyLDYgKzI2ODE4LDcgQEAKIAkJCQlGREExNUVDRTEyQjAzRjYxMDAzQTU4M0EgLyogSlNT
Y3JpcHRQcm9jZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RkEzN0VGQjExNzJGREE2
MDBDNENENTUgLyogSlNTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RkEzN0VG
RDExNzJGREE2MDBDNENENTUgLyogSlNTY3JpcHRQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTU5QkI4N0ExQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRGQUYxIC8qIEpTU2VjdXJpdHlQb2xpY3lW
aW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJEQTY0RDgxQjk3NUNGMjAwOUM0
Mzg3IC8qIEpTU2hhZG93Um9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q5REUxN0IxN0FBQzc1
QjAwRUEzODZEIC8qIEpTU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5MjAzLDYg
KzI5MjEwLDcgQEAKIAkJCQlCMjc1MzU2NjBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMzMjQwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQTc2QzkxMUQyMEU0NzAwNEMyMDFDIC8qIENvbG9yRGF0
YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTlCQjg3OTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1h
Z2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjk5MzVEMTdBMURENTgwMEJDRTg4
MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU3NzBCMDUz
ODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk0M0VERDY3RTFC
NDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJzQWxwaGFiZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAppbmRleCBm
Mzc4NzUyMWRkZmZmNjgyYmQ4OGU2NDcyY2FmMDYyNWUzZjA0NTQ0Li45YTE0NzU3ODgzN2ZjZGUx
MzEwZDFhZDEwNjIyYjdiYjcwNjg0YWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRJbWFnZS5jcHAKQEAgLTI3OCw3ICsyNzgsNyBAQCBMYXlvdXRTaXplIENhY2hlZElt
YWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBm
bG9hdAogICAgIGlmIChyZW5kZXJlciAmJiBpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpKSB7CiAg
ICAgICAgIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9u
KHJlbmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCByZW5kZXJlci0+c3R5
bGUoKS5pbWFnZU9yaWVudGF0aW9uKCkpOwogICAgICAgICBpZiAob3JpZW50YXRpb25EZXNjcmlw
dGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KQotICAgICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFn
ZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24ob3JpZW50YXRpb25EZXNjcmlw
dGlvbikpOworICAgICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRt
YXBJbWFnZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSk7CiAgICAgfQog
I2Vsc2UKICAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKSAmJiAocmVuZGVyZXIgJiYg
cmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01l
bW9yeUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHAKaW5kZXggOTk5NDY1ZWEzOTA2OTdjYmUwMGZlNmZhODgzOGMxMzhlNTQ0N2ExNy4uODQ2YzBk
YzkzODRlNzVkYmEwODIwYzI4MGZiNjQxY2U4YTA4ZjE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCkBAIC0yMjUsOCArMjI1LDYgQEAgYm9vbCBNZW1v
cnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hlKE5hdGl2ZUltYWdlUHRyIGltYWdlLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3QKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRJbWFnZT4gY2FjaGVk
SW1hZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZEltYWdlPih1cmwsIGJpdG1hcEltYWdlLmdl
dCgpLCBDYWNoZWRJbWFnZTo6TWFudWFsbHlDYWNoZWQsIHNlc3Npb25JRCk7CiAKLSAgICAvLyBB
Y3R1YWwgcmVsZWFzZSBvZiB0aGUgQ0dJbWFnZVJlZiBpcyBkb25lIGluIEJpdG1hcEltYWdlLgot
ICAgIENGUmV0YWluKGltYWdlKTsKICAgICBjYWNoZWRJbWFnZS0+YWRkQ2xpZW50KCZkdW1teUNh
Y2hlZEltYWdlQ2xpZW50KCkpOwogICAgIGNhY2hlZEltYWdlLT5zZXREZWNvZGVkU2l6ZShiaXRt
YXBJbWFnZS0+ZGVjb2RlZFNpemUoKSk7CiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApp
bmRleCBmYWYwZjg2OTYyYzNmYjY1Nzc3NDViZmFmNzViNGM4NGQ4MGNjMDYwLi5iM2NjYWYxODM2
MjQ5Y2E0NWJjZGY3ZTk2ZTg2OThlMGViZWZkYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC00Nyw5ICs0Nyw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBtX21pbmltdW1TdWJzYW1w
bGluZ0xldmVsKDApCi0gICAgLCBtX2ltYWdlT3JpZW50YXRpb24oT3JpZ2luVG9wTGVmdCkKLSAg
ICAsIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oZmFsc2UpCiAgICAgLCBtX2N1cnJl
bnRGcmFtZSgwKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCiAgICAg
LCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQpAQCAtOTYsNyArOTMsNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpzdGFydFRpbWVyKGRvdWJsZSBkZWxheSkKICAgICBtX2ZyYW1lVGltZXIt
PnN0YXJ0T25lU2hvdChkZWxheSk7CiB9CiAKLWJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUF0
SW5kZXgoc2l6ZV90IGluZGV4KQorYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDQsNyArMTAxLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6
aGF2ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVz
LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5tX2ZyYW1lOworICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKIH0KIAog
Ym9vbCBCaXRtYXBJbWFnZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTg0
LDkgKzE4MSw5IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgICAgIG1fZnJhbWVzLmdy
b3cobnVtRnJhbWVzKTsKIAogICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFu
ZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0gbV9zb3VyY2UuY3Jl
YXRlRnJhbWVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgICAgICBpZiAobnVtRnJhbWVzID09IDEg
JiYgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGlmIChudW1GcmFtZXMgPT0gMSAm
JiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKICAgICAgICAgICAgIGNoZWNrRm9yU29saWRDb2xv
cigpOwogICAgIH0KIApAQCAtMjA0LDcgKzIwMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hl
RnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIElt
CiAgICAgaWYgKCFzdWJzYW1wbGluZ0xldmVsICYmIGZyYW1lU2l6ZSAhPSBtX3NpemUpCiAgICAg
ICAgIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSA9IGZhbHNlOwogCi0gICAgaWYgKG1fZnJhbWVzW2lu
ZGV4XS5tX2ZyYW1lKSB7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7CiAgICAg
ICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZUJ5dGVzKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAgICAv
LyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBkZWNv
ZGVkIGRhdGEgdXNlZApAQCAtMjM2LDE2ICsyMzMsMTMgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGlk
RGVjb2RlUHJvcGVydGllcygpIGNvbnN0CiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2Rl
ZFNpemVDaGFuZ2VkKHRoaXMsIGRlbHRhQnl0ZXMpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjp1
cGRhdGVTaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QK
K3ZvaWQgQml0bWFwSW1hZ2U6OnVwZGF0ZVNpemUoKSBjb25zdAogewogICAgIGlmICghbV9zaXpl
QXZhaWxhYmxlIHx8IG1faGF2ZVNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2l6ZSA9
IG1fc291cmNlLnNpemUoZGVzY3JpcHRpb24pOwotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbiA9IG1fc291cmNlLnNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uLCBkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpKTsKLQotICAg
IG1faW1hZ2VPcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5p
bWFnZU9yaWVudGF0aW9uKCkpOwotICAgIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRp
b24oKSk7CisgICAgbV9zaXplID0gbV9zb3VyY2Uuc2l6ZSgpOworICAgIG1fc2l6ZVJlc3BlY3Rp
bmdPcmllbnRhdGlvbiA9IG1fc291cmNlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsKIAog
ICAgIG1faGF2ZVNpemUgPSB0cnVlOwogCkBAIC0yNTksOSArMjUzLDkgQEAgRmxvYXRTaXplIEJp
dG1hcEltYWdlOjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9zaXplOwogfQogCi1JbnRTaXpl
IEJpdG1hcEltYWdlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKK0ludFNpemUgQml0bWFwSW1hZ2U6OnNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHVwZGF0ZVNpemUoZGVzY3JpcHRp
b24pOworICAgIHVwZGF0ZVNpemUoKTsKICAgICByZXR1cm4gbV9zaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uOwogfQogCkBAIC0zNzksMjMgKzM3MywyMyBAQCBib29sIEJpdG1hcEltYWdlOjplbnN1
cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJhbWVDYWNo
aQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6
ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lICYm
ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBD
YWNoZU1ldGFkYXRhQW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQogICAgICAg
ICB8fCAoZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRl
eF0ubV9oYXZlTWV0YWRhdGEpKQogICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNh
Y2hpbmcpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBhc3NOYXRpdmVJbWFnZVB0ciBCaXRt
YXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2Nh
bGVIaW50KQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCkKIHsKICAgICBpZiAo
aW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCA9IHN0ZDo6bWluKG1fc291cmNlLnN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZShwcmVzZW50YXRpb25TY2FsZUhpbnQpLCBtX21pbmltdW1TdWJz
YW1wbGluZ0xldmVsKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBt
X3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUocHJlc2VudGF0aW9uU2NhbGVIaW50LCBt
X21pbmltdW1TdWJzYW1wbGluZ0xldmVsKTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBh
IGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2Ug
bmVlZCB0bwogICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGlu
ZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAg
aWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYm
IHN1YnNhbXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7
CiAgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBz
bWFsbCBhIHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgogICAgICAgICBpbnQgc2l6
ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwogICAgICAgICBtX2ZyYW1l
c1tpbmRleF0uY2xlYXIodHJ1ZSk7CkBAIC00MDYsMTAgKzQwMCwxMCBAQCBQYXNzTmF0aXZlSW1h
Z2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNl
bnRhdGlvblNjYQogICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmVuJ3QgZmV0Y2hlZCBhIGZyYW1l
IHlldCwgZG8gc28uCi0gICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAh
bV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIHN1YnNh
bXBsaW5nTGV2ZWwsIENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CiAKLSAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwog
fQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRl
eCkKQEAgLTQzMCw3ICs0MjQsNyBAQCBmbG9hdCBCaXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0
SW5kZXgoc2l6ZV90IGluZGV4KQogCiBQYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIHsKLSAgICByZXR1cm4gZnJhbWVBdEluZGV4KGN1
cnJlbnRGcmFtZSgpKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1l
KCkpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qg
aW5kZXgpCkBAIC03MTQsOSArNzA4LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHVtcChUZXh0U3Ry
ZWFtJiB0cykgY29uc3QKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbGxvdy1zdWJzYW1wbGlu
ZyIsIGFsbG93U3Vic2FtcGxpbmcoKSk7CiAgICAgaWYgKG1faXNTb2xpZENvbG9yKQogICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInNvbGlkLWNvbG9yIiwgbV9pc1NvbGlkQ29sb3IpOwotICAgIAot
ICAgIGlmIChtX2ltYWdlT3JpZW50YXRpb24gIT0gT3JpZ2luVG9wTGVmdCkKLSAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJvcmllbnRhdGlvbiIsIG1faW1hZ2VPcmllbnRhdGlvbik7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4
IDc0OTNjNmE0YmZiODYzZDk3NjM3YzQ5YzQ2NGNjMzdhZTc4ZTBhMDQuLmYzZmE3NjlkOGIzZDcy
YzJiZGU1ZGZlYjFhN2ZkYmRkNGZkNGMyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtNDcsMTYgKzQ3LDYgQEAgdHlwZWRlZiBzdHJ1
Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVEYXRhPiA6IHB1YmxpYyBTaW1wbGVD
bGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxp
emVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJhbWVEYXRhIG1lbWJlcnMgaW5pdGlh
bGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGlt
ZXI7CiAKQEAgLTY1LDE3ICs1NSw4IEBAIGNsYXNzIFRpbWVyOwogLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIHN0cnVjdCBGcmFtZURhdGEgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyYW1lRGF0YSk7CiBwdWJsaWM6CiAgICAgRnJhbWVE
YXRhKCkKLSAgICAgICAgOiBtX2ZyYW1lKDApCi0gICAgICAgICwgbV9vcmllbnRhdGlvbihEZWZh
dWx0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgLCBtX3N1YnNhbXBsaW5nTGV2ZWwoMCkKLSAg
ICAgICAgLCBtX2R1cmF0aW9uKDApCi0gICAgICAgICwgbV9oYXZlTWV0YWRhdGEoZmFsc2UpCi0g
ICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkg
Ci0gICAgICAgICwgbV9mcmFtZUJ5dGVzKDApCiAgICAgewogICAgIH0KIApAQCAtODQsMTggKzY1
LDIyIEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXIodHJ1ZSk7CiAgICAgfQogCi0gICAgLy8gQ2xl
YXIgdGhlIGNhY2hlZCBpbWFnZSBkYXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0
aGUgbWV0YWRhdGEuCi0gICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1h
Z2UgZGF0YSB0byBjbGVhci4KICAgICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0K
LSAgICBOYXRpdmVJbWFnZVB0ciBtX2ZyYW1lOwotICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmll
bnRhdGlvbjsKLSAgICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbDsKLSAgICBm
bG9hdCBtX2R1cmF0aW9uOwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wg
bV9pc0NvbXBsZXRlIDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVk
IG1fZnJhbWVCeXRlczsKKyAgICBPcHRpb25hbDxDb2xvcj4gc29saWRDb2xvcigpIGNvbnN0Owor
CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3Jp
ZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2
ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07
CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgYm9vbCBtX2hhdmVN
ZXRhZGF0YSA6IDE7CisgICAgICAgICAgICBib29sIG1faXNDb21wbGV0ZSA6IDE7CisgICAgICAg
ICAgICBib29sIG1faGFzQWxwaGEgOiAxOworICAgICAgICB9OworICAgICAgICB1aW50OF90IG1f
ZmxhZ3Nbc2l6ZW9mKGJvb2wpXSB7IDAgfTsKKyAgICB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVC
eXRlcyB7IDAgfTsKIH07CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQEAgLTEyNSw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGbG9h
dFNpemUgZHVlIHRvIG92ZXJyaWRlLgogICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyAg
ICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsKIAogICAgIGJvb2wg
Z2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xODksNyArMTc0LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHVwZGF0ZVNpemUoSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0Owor
ICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgZGV0ZXJtaW5lTWluaW11bVN1
YnNhbXBsaW5nTGV2ZWwoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMjE0LDEwICsxOTksMTAg
QEAgcHJvdGVjdGVkOgogCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAotICAgIFBhc3NOYXRp
dmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhp
bnQgPSAxKTsKLSAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVBdEluZGV4
KHNpemVfdCk7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7CisgICAgUGFzc05hdGl2ZUltYWdl
UHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKLSAgICBib29sIGhh
dmVGcmFtZUF0SW5kZXgoc2l6ZV90KTsKKyAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChz
aXplX3QpOwogCiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7CiAgICAg
ZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKQEAgLTI5NywxMCArMjgyLDcgQEAg
cHJpdmF0ZToKICAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOyAvLyBUaGUgc2l6ZSB0byB1c2Ug
Zm9yIHRoZSBvdmVyYWxsIGltYWdlICh3aWxsIGp1c3QgYmUgdGhlIHNpemUgb2YgdGhlIGZpcnN0
IGltYWdlKS4KICAgICBtdXRhYmxlIEludFNpemUgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9u
OwogCi0gICAgbXV0YWJsZSBTdWJzYW1wbGluZ0xldmVsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2
ZWw7Ci0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW1hZ2VPcmllbnRhdGlvbiA6IDQ7IC8vIElt
YWdlT3JpZW50YXRpb25FbnVtCi0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX3Nob3VsZFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uIDogMTsgLy8gUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtCisgICAg
bXV0YWJsZSBTdWJzYW1wbGluZ0xldmVsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgeyAwIH07
CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWU7IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVu
dCBmcmFtZSBvZiBhbmltYXRpb24uCiAgICAgVmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7
IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQgZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhh
dmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhlbSBpbiB0aGUgY2FjaGUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5kZXggZDk1ZTdkZWI4MTBmYzI0ZjdmNjFiMWIyM2E0
YjlhZWYzZjNjMTdiNy4uMjhjMTM3ZDI5YjExOGE5Y2YxYjYxNjFlZGU0ZGU0OTFkMDQ4ODMwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApAQCAtNjgsOCArNjgsOCBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIEljb24oQ0dJbWFn
ZVJlZik7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKKyAgICBJY29uKE5h
dGl2ZUltYWdlUHRyKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2NnSW1hZ2U7CiAjZWxpZiBQTEFU
Rk9STShNQUMpCiAgICAgSWNvbihOU0ltYWdlKik7CiAgICAgUmV0YWluUHRyPE5TSW1hZ2U+IG1f
bnNJbWFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAppbmRleCA3NGVmMDUzYTMzM2ZmNWZjNTc4ZTgxODAwY2M2ZmM5NzU1ZWZiYWI4Li5m
ODE5Y2FiNzE4YWQ4OTY5NTBmOGUwZmIyMzFkNTI0ZDkwMDA4NDY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC02OCwxMSArNjgs
NiBAQCB2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVh
ckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqCiAgICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0
YVJlY2VpdmVkKTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2RlY29kZXI7Ci19Ci0KIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKICAgICAvLyBNYWtl
IHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KQEAgLTk2LDcgKzkxLDcgQEAgU3Ry
aW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1f
ZGVjb2RlciA/IG1fZGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IFN0cmluZygpOwogfQog
Ci1TdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUo
ZmxvYXQpIGNvbnN0CitTdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xl
dmVsRm9yU2NhbGUoZmxvYXQsIFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC0xMTEsMjEgKzEwNiwyNSBAQCBib29sIEltYWdlU291cmNlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFi
bGUoKTsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7
CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7Cit9CisgICAgCitJbnRTaXplIElt
YWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CiB9CiAK
LUludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJz
YW1wbGluZ0xldmVsLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNv
bnN0CitJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2RlY29kZXIpCisgICAgaWYgKCFpbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwogCiAgICAgSW50U2l6ZSBzaXplID0gbV9kZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGlu
ZGV4KTsKLSAgICBpZiAoKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0g
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYmIG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKS51c2Vz
V2lkdGhBc0hlaWdodCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZShzaXplLmhlaWdodCgpLCBz
aXplLndpZHRoKCkpOworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBtX2RlY29k
ZXItPm9yaWVudGF0aW9uKCk7CiAKLSAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gc2hvdWxk
UmVzcGVjdEltYWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gJiYgb3Jp
ZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUoKSA6IHNp
emU7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3Qp
IGNvbnN0CkBAIC0xNDgsNyArMTQ3LDcgQEAgc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50
KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkg
OiAwOwogfQogCi1QYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJ
bmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwpCitQYXNzTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCkKIHsKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJuIDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCBh
Y2RkMWNlNGNlMzAwZGU4MWM5ZTA2MmVlZTc2MDdiZjQ3MmE3MGFmLi45MGI0MjkzNjM2NjY3MmM1
ZmI0MzM2N2I3ZGFjZDM4Yjk5YTcxNWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ2LDE4ICs0Niw5IEBAIGNsYXNzIEludFBvaW50
OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIFVTRShDRykKLXR5
cGVkZWYgQ0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZWxzZQogY2xh
c3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2Rl
clB0cjsKLSNlbmRpZgotCi0jaWYgVVNFKENHKQotI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIg
SW1hZ2VEZWNvZGVyCi0jZWxzZQogdHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNv
ZGVyOwotI2VuZGlmCiAKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVk
IGltYWdlIGZvcm1hdCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24g
c3lzdGVtIGFuZCB0aGUgY29uc3RhbnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4g
bWluZC4KQEAgLTExMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGVjb2RlZCBmcmFtZXMu
CiAgICAgLy8KICAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCBjbGVhcihmYWxzZSwgbikg
YW5kIHN1YnNlcXVlbnRseSBjYWxsCi0gICAgLy8gY3JlYXRlRnJhbWVBdEluZGV4KG0pIHdpdGgg
bSA8IG4sIHVubGVzcyB0aGV5IGZpcnN0IGNhbGwgY2xlYXIodHJ1ZSkuCisgICAgLy8gY3JlYXRl
RnJhbWVJbWFnZUF0SW5kZXgobSkgd2l0aCBtIDwgbiwgdW5sZXNzIHRoZXkgZmlyc3QgY2FsbCBj
bGVhcih0cnVlKS4KICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBzdGF0ZWZ1bCBJbWFnZVNvdXJj
ZXMvZGVjb2RlcnMgd2lsbCB3b3JrIHByb3Blcmx5LgogICAgIC8vCiAgICAgLy8gVGhlIHxkYXRh
fCBhbmQgfGFsbERhdGFSZWNlaXZlZHwgcGFyYW1ldGVycyBzaG91bGQgYmUgc3VwcGxpZWQgYnkg
Y2FsbGVycwpAQCAtMTIyLDE5ICsxMTMsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgU2hh
cmVkQnVmZmVyKiBkYXRhID0gTlVMTCwKICAgICAgICAgICAgICAgIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkID0gZmFsc2UpOwogCi0gICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0OworICAgIGJvb2wg
aW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXI7IH0KIAogICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIAotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0KSBjb25zdDsKKyAgICBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7
CiAgICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsK
IAogICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAgLy8gQWx3YXlzIG9yaWdpbmFsIHNp
emUsIHdpdGhvdXQgc3Vic2FtcGxpbmcuCi0gICAgSW50U2l6ZSBzaXplKEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyAg
ICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50
YXRpb24oKSBjb25zdDsKICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFt
ZS4KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
ID0gMCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uKCkpIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1
YnNhbXBsaW5nTGV2ZWwgPSAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQ
b2ludCYpIGNvbnN0OwogCkBAIC0xNDYsNyArMTM4LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2Fs
bGVycyBzaG91bGQgbm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIGNsZWFyKCkgd2l0aCBhIGhp
Z2hlciBpbmRleDsKICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xlYXIoKSBhYm92ZS4KLSAgICBQ
YXNzTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IDApOworICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKTsKIAogICAgIGZsb2F0IGZyYW1lRHVyYXRp
b25BdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3Qp
OyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgYWN0dWFsbHkgdXNlZCBhbnkgYWxwaGEuCkBA
IC0xNjMsNyArMTU1LDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTmF0aXZl
SW1hZ2VEZWNvZGVyUHRyIG1fZGVjb2RlcjsKKyAgICB2b2lkIGVuc3VyZURlY29kZXJJc0NyZWF0
ZWQoU2hhcmVkQnVmZmVyKik7CisgICAgCisgICAgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyIG1fZGVj
b2RlciB7IG51bGxwdHIgfTsKIAogI2lmICFVU0UoQ0cpCiAgICAgQWxwaGFPcHRpb24gbV9hbHBo
YU9wdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05h
dGl2ZUltYWdlUHRyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJ
bWFnZVB0ci5oCmluZGV4IGRmOTQxYTU2NmE5ZTQ2OTI3NzI3YmExZWM2ODQ4ZjIxNjgwM2E0NWIu
LmVjYTFiOTJjNDFlZTE4MjhlMzEwZDViZWRiYjJiNWFjYTU5NWY1NDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaApAQCAtMjksNiAr
MjksNyBAQAogI2RlZmluZSBOYXRpdmVJbWFnZVB0cl9oCiAKICNpZiBVU0UoQ0cpCisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgogdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsK
ICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAtNDEsNyArNDIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBGSVhNRTogTmF0aXZlSW1hZ2VQdHIgYW5kIFBh
c3NOYXRpdmVJbWFnZVB0ciBzaG91bGQgYmUgc21hcnQKIC8vIHBvaW50ZXJzIChzZWUgU1ZHSW1h
Z2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpLgogI2lmIFVTRShDRykKLXR5cGVkZWYg
Q0dJbWFnZVJlZiBOYXRpdmVJbWFnZVB0cjsKK3R5cGVkZWYgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IE5hdGl2ZUltYWdlUHRyOwogI2VsaWYgVVNFKENBSVJPKQogdHlwZWRlZiBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBOYXRpdmVJbWFnZVB0cjsKIHR5cGVkZWYgUGFzc1JlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IFBhc3NOYXRpdmVJbWFnZVB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDYzZGNmMGEyNTNl
MjM0MGY2N2YxYzgxZDg1ZmMyNzBkZDIzMGU4NmQuLmE0YzY1YmRmZjMyYTkyZjljMWRmMjZkNGJm
NTMwODBmMDVhYjk2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTAzNyw3ICsxMDM3LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGlt
YWdlKQogewogICAgIGlmIChpbWFnZSkgewotICAgICAgICBDR0ltYWdlUmVmIG5ld0ltYWdlID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIENHSW1hZ2VSZWYg
bmV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS5nZXQoKTsKICAg
ICAgICAgaWYgKCFuZXdJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcAppbmRleCBjZDU3ZWU0ODVlYTgwYzZjZjM0N2FiM2JkOTczN2Q1OTk5ZTEwMjgyLi5h
M2Y1YzdkYTk5NzU2OTNmMTllNTc1M2ZiZDg3MTdjNGRmMWYzN2IyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcApAQCAtNTgsNyArNTgsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoUGFzc1Jl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5hdGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKgogewogICAg
IG1fZnJhbWVzLmdyb3coMSk7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IGNhaXJvX3N1
cmZhY2VfZ2V0X2NvbnRlbnQobmF0aXZlSW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09M
T1I7Ci0gICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IG5hdGl2ZUltYWdlOworICAgIG1fZnJhbWVz
WzBdLm1faW1hZ2UgPSBuYXRpdmVJbWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0
YSA9IHRydWU7CiAKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKQEAgLTcyLDcgKzcyLDcgQEAg
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0LCBjb25zdCBGbG8KIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKLSAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVJbWFnZUF0
SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlmICghc3VyZmFjZSkgLy8gSWYgaXQncyB0b28g
ZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTM1LDcgKzEzNSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAg
ICAgaWYgKGZyYW1lQ291bnQoKSA+IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwor
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleCht
X2N1cnJlbnRGcmFtZSk7CiAgICAgaWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkBAIC0xNTgsOCAr
MTU4LDggQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKICAgICBp
ZiAoY2xlYXJNZXRhZGF0YSkKICAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKIAotICAg
IGlmIChtX2ZyYW1lKSB7Ci0gICAgICAgIG1fZnJhbWUgPSBudWxscHRyOworICAgIGlmIChtX2lt
YWdlKSB7CisgICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNw
cAppbmRleCBjYzcwNDYxNDdhZTgxZjFmYWRhYTZkODQxNjI0OTgwYzZmZGZjYmYxLi44YzQxODZk
NzFlNTNhMTkwN2U5MmQ3M2EyYjAxNjQ3ZmZkNjZiMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHQzRENhaXJvLmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
CiAgICAgICAgIGRlY29kZXIuc2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOwogICAgICAg
ICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1faW1hZ2VTdXJm
YWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCk7CisgICAgICAgIG1faW1hZ2VTdXJm
YWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CiAgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTFZpZGVvRWxtZW50
IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBoYWQgYmVlbiBhcHBsaWVkIGFuZCB0
aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3IgZWFjaCBwaXhlbCwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKaW5kZXggMDFi
N2Q2OTJjZGJkN2FiNGQyMmJiYzEzOTljMTAzMjhmNTdlNWU0Ny4uMmUzYTQ5MWVkOGFiZGM5MWRk
OTg5OTU0OGIwZmZiODUyNzMzOGZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKQEAgLTU4LDIyICs1OCwxOCBAQCBi
b29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQogICAgIG1fb3JpZW50YXRp
b24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSAw
OwogCi0gICAgaWYgKG1fZnJhbWUpIHsKKyAgICBpZiAobV9pbWFnZSkgewogI2lmIENBQ0hFX1NV
QklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ZyYW1lKTsKKyAg
ICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7CiAjZW5kaWYK
LSAgICAgICAgQ0dJbWFnZVJlbGVhc2UobV9mcmFtZSk7Ci0gICAgICAgIG1fZnJhbWUgPSAwOwor
ICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VS
ZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCitCaXRtYXBJbWFnZTo6Qml0bWFw
SW1hZ2UoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAg
IDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKDApCi0g
ICAgLCBtX2ltYWdlT3JpZW50YXRpb24oT3JpZ2luVG9wTGVmdCkKLSAgICAsIG1fc2hvdWxkUmVz
cGVjdEltYWdlT3JpZW50YXRpb24oZmFsc2UpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAg
ICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCiAgICAgLCBtX3JlcGV0aXRpb25D
b3VudFN0YXR1cyhVbmtub3duKQpAQCAtODksOCArODUsOCBAQCBCaXRtYXBJbWFnZTo6Qml0bWFw
SW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAs
IG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogewot
ICAgIENHRmxvYXQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7Ci0gICAgQ0dGbG9h
dCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOworICAgIENHRmxvYXQgd2lkdGgg
PSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpOworICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJ
bWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICog
aGVpZ2h0ICogNDsKICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogCkBAIC05
OSw3ICs5NSw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVmIGNnSW1hZ2Us
IEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
biA9IG1fc2l6ZTsKIAogICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9m
cmFtZSA9IENHSW1hZ2VSZXRhaW4oY2dJbWFnZSk7CisgICAgbV9mcmFtZXNbMF0ubV9pbWFnZSA9
IGltYWdlOwogICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSB0cnVlOwogICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKIApAQCAtMTM2LDcgKzEzMiw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgaWYgKGZyYW1lQ291bnQoKSA+IDEp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghaGF2ZUZyYW1lQXRJbmRleCgwKSkgeworICAg
IGlmICghaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KDApKSB7CiAgICAgICAgIEludFNpemUgc2l6ZSA9
IG1fc291cmNlLmZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7CiAgICAgICAgIGlmIChzaXplLndpZHRo
KCkgIT0gMSB8fCBzaXplLmhlaWdodCgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
NDcsNyArMTQzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKIAog
ICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBudWxscHRyOwogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkp
Ci0gICAgICAgIGltYWdlID0gbV9mcmFtZXNbMF0ubV9mcmFtZTsKKyAgICAgICAgaW1hZ2UgPSBt
X2ZyYW1lc1swXS5tX2ltYWdlLmdldCgpOwogCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTczLDE2ICsxNjksMTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xp
ZENvbG9yKCkKIAogQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCiB7Ci0g
ICAgcmV0dXJuIGZyYW1lQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgo
MCkuZ2V0KCk7CiB9CiAKIENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJl
Zk9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIHNpemVfdCBjb3VudCA9IGZyYW1l
Q291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVBdEluZGV4KGkpOwotICAgICAgICBpZiAoY2dJ
bWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdo
dChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOworICAgICAg
ICBQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAg
ICAgaWYgKGltYWdlICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJ
bWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4g
aW1hZ2UuZ2V0KCk7CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJ
bWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBzaXplCkBAIC0xOTcsOCArMTkzLDgg
QEAgUmV0YWluUHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQog
ICAgIAogICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUo
TlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJyRnJhbWUg
PSBmcmFtZUF0SW5kZXgoaSkpCi0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXks
IGN1cnJGcmFtZSk7CisgICAgICAgIGlmIChOYXRpdmVJbWFnZVB0ciBjdXJyRnJhbWUgPSBmcmFt
ZUltYWdlQXRJbmRleChpKSkKKyAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwg
Y3VyckZyYW1lLmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwogfQpA
QCAtMjExLDE1ICsyMDcsMTUgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEYKICAgICBzdGFydEFu
aW1hdGlvbigpOwogI2VuZGlmCiAKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Cisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CiAgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1h
Z2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgogICAgIGlmICh3a0NHQ29udGV4dElz
UERGQ29udGV4dChjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBhZG9w
dENGKGNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgICAgICBp
bWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAg
ICBlbHNlIHsKICAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dS
ZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBs
YXRmb3JtQ29udGV4dCgpKSk7CiAgICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6
Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53
aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5o
ZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAgICAgaW1hZ2UgPSBmcmFtZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nU2NhbGUpOworICAgICAgICBpbWFnZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1NjYWxlKTsKICAgICB9
CiAKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFu
IGltYWdlIHlldC4KQEAgLTI1MSwxOCArMjQ3LDE4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
CiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotUGFzc05hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMu
c2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICBpZiAoaW5kZXggPj0gbV9m
cmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKICAgICAgICAgY2FjaGVG
cmFtZShpbmRleCwgMCk7CiAKICAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5n
TGV2ZWwpCi0gICAgICAgIHJldHVybiBDR0ltYWdlUmV0YWluKG1fZnJhbWVzW2luZGV4XS5tX2Zy
YW1lKTsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwogCi0gICAgcmV0
dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIG1fc291
cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQz
RENHLmNwcAppbmRleCA2YzAzYTJjZWY4NDYwNjU2MWVhMDdlYjkyOGYxY2YyOTVmOWY1ZTM2Li43
YTEzYmI1ODQ2NzA4ZDM3ZTAyYmQzZGQ2NzIzYzI3YTQ5NTE3NmMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQz
RENHLmNwcApAQCAtMzMzLDEwICszMzMsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wKICAg
ICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBtX2RlY29kZWRJbWFnZSA9IGFkb3B0Q0YoZGVjb2Rlci5jcmVhdGVGcmFt
ZUF0SW5kZXgoMCkpOworICAgICAgICBtX2RlY29kZWRJbWFnZSA9IGRlY29kZXIuY3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgoMCk7CiAgICAgICAgIG1fY2dJbWFnZSA9IG1fZGVjb2RlZEltYWdlLmdl
dCgpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpLmdldCgpOwogICAgIGlmICghbV9jZ0ltYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQg
aW1hZwogICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgY29udGV4dC50
cmFuc2xhdGUoMCwgLWltYWdlSGVpZ2h0KTsKICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOwotICAgIGNvbnRleHQuZHJhd05hdGl2ZUlt
YWdlKGNnSW1hZ2UuZ2V0KCksIGltYWdlU2l6ZSwgY2FudmFzUmVjdCwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgaW1hZ2VTaXplKSwgQ29tcG9zaXRlQ29weSk7CisgICAgY29udGV4dC5kcmF3TmF0
aXZlSW1hZ2UoY2dJbWFnZSwgaW1hZ2VTaXplLCBjYW52YXNSZWN0LCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBpbWFnZVNpemUpLCBDb21wb3NpdGVDb3B5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGE0NDk2NTQwNDZhZThmMTBhYmFkMTY0MTVl
NjQ2MGFkYmJiYjhlODguLjE2MjA5YWY1MzQ0ODFkYjRjZGRkOGI0MjNjZTdiZjJhNDBiMGRiZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTMxMSw4ICszMTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdAogICAgIGZsb2F0IGFkanVzdGVkWCA9IHBoYXNlLngoKSAtIGRlc3RSZWN0LngoKSAr
IHRpbGVSZWN0LngoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5h
KCkpOyAvLyBXZSB0cmFuc2xhdGVkIHRoZSBjb250ZXh0IHNvIHRoYXQgZGVzdFJlY3QueCgpIGlz
IHRoZSBvcmlnaW4sIHNvIHN1YnRyYWN0IGl0IG91dC4KICAgICBmbG9hdCBhZGp1c3RlZFkgPSBk
ZXN0UmVjdC5oZWlnaHQoKSAtIChwaGFzZS55KCkgLSBkZXN0UmVjdC55KCkgKyB0aWxlUmVjdC55
KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKSArIHNjYWxl
ZFRpbGVIZWlnaHQpOwogCi0gICAgQ0dJbWFnZVJlZiB0aWxlSW1hZ2UgPSBpbWFnZS5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGZsb2F0IGggPSBDR0ltYWdlR2V0SGVpZ2h0KHRp
bGVJbWFnZSk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHRpbGVJbWFnZSA9IGltYWdlLm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWln
aHQodGlsZUltYWdlLmdldCgpKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFn
ZTsKICNpZiBQTEFURk9STShJT1MpCkBAIC0zMjYsMTMgKzMyNiwxMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdAogICAgICAgICAvLyBDb3B5aW5nIGEgc3ViLWltYWdlIG91dCBvZiBhIHBhcnRp
YWxseS1kZWNvZGVkIGltYWdlIHN0b3BzIHRoZSBkZWNvZGluZyBvZiB0aGUgb3JpZ2luYWwgaW1h
Z2UuIEl0IHNob3VsZCBuZXZlciBoYXBwZW4KICAgICAgICAgLy8gYmVjYXVzZSBzdWItaW1hZ2Vz
IGFyZSBvbmx5IHVzZWQgZm9yIGJvcmRlci1pbWFnZSwgd2hpY2ggb25seSByZW5kZXJzIHdoZW4g
dGhlIGltYWdlIGlzIGZ1bGx5IGRlY29kZWQuCiAgICAgICAgIEFTU0VSVChoID09IGltYWdlLmhl
aWdodCgpKTsKLSAgICAgICAgc3ViSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1h
Z2VJblJlY3QodGlsZUltYWdlLCB0aWxlUmVjdCkpOworICAgICAgICBzdWJJbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdCh0aWxlSW1hZ2UuZ2V0KCksIHRpbGVSZWN0
KSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgbmVlZCB0byBwYWludCBnYXBzIGJldHdlZW4gdGls
ZXMgYmVjYXVzZSB3ZSBoYXZlIGEgcGFydGlhbGx5IGxvYWRlZCBpbWFnZSBvciBub24temVybyBz
cGFjaW5nLAogICAgIC8vIGZhbGwgYmFjayB0byB0aGUgbGVzcyBlZmZpY2llbnQgQ0dQYXR0ZXJu
LWJhc2VkIG1lY2hhbmlzbS4KICAgICBmbG9hdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53
aWR0aCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7Ci0g
ICAgZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2UpOworICAgIGZsb2F0IHcgPSBD
R0ltYWdlR2V0V2lkdGgodGlsZUltYWdlLmdldCgpKTsKICAgICBpZiAodyA9PSBpbWFnZS5zaXpl
KCkud2lkdGgoKSAmJiBoID09IGltYWdlLnNpemUoKS5oZWlnaHQoKSAmJiAhc3BhY2luZy53aWR0
aCgpICYmICFzcGFjaW5nLmhlaWdodCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBDRyBzZWVtcyB0
byBzbmFwIHRoZSBpbWFnZXMgdG8gaW50ZWdyYWwgc2l6ZXMuIFdoZW4gd2UgY2FyZSAoZS5nLiB3
aXRoIGJvcmRlci1pbWFnZS1yZXBlYXQ6IHJvdW5kKSwKICAgICAgICAgLy8gd2Ugc2hvdWxkIHRp
bGUgYWxsIGJ1dCB0aGUgbGFzdCwgYW5kIHN0ZXRjaCB0aGUgbGFzdCBpbWFnZSB0byBmaXQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29k
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMTU5ZGYzMzdkMzg3NDU3OWU5NWQzOTBlNjRkOGJkMGJlMzkwMjZi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VEZWNvZGVyLmNwcApAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXIuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQ
SS5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRQb2ludC5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKKyNpZiAhUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBw
bGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKworI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisjaW1wb3J0IDxJbWFnZUlPL0NHSW1hZ2VTb3VyY2VQcml2YXRlLmg+CisjZWxz
ZQorY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgPSBDRlNU
Uigia0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IiKTsKK2NvbnN0IENGU3RyaW5nUmVmIGtD
R0ltYWdlU291cmNlU2hvdWxkQ2FjaGVJbW1lZGlhdGVseSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJj
ZVNob3VsZENhY2hlSW1tZWRpYXRlbHkiKTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCitjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xh
bXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsKK2NvbnN0IENGU3Ry
aW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lID0gQ0ZTVFIoIkRlbGF5
VGltZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29w
Q291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7CisKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdl
U291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVm
ZXJSR0IzMiIpOworY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEg
PSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEiKTsKKworc3RhdGljIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwsIERlY29kZU1vZGUgZGVjb2RlTW9kZSkKK3sKKyAgICBjb25z
dCBDRkluZGV4IGJhc2ljT3B0aW9ucyA9IDM7CisgICAgY29uc3Qgdm9pZCoga2V5c1tiYXNpY09w
dGlvbnMgKyAyXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VT
aG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgfTsKKyAgICBjb25z
dCB2b2lkKiB2YWx1ZXNbYmFzaWNPcHRpb25zICsgMl0gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZC
b29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUgfTsKKyAgICBDRkluZGV4IG51bU9wdGlvbnMgPSBi
YXNpY09wdGlvbnM7CisgICAgCisgICAgaWYgKHN1YnNhbXBsaW5nTGV2ZWwgPiAwKSB7CisgICAg
ICAgIHNob3J0IGNvbnN0cmFpbmVkU3Vic2FtcGxpbmdMZXZlbCA9IHN0ZDo6bWluPHNob3J0Pigz
LCBzdGQ6Om1heDxzaG9ydD4oMCwgc3Vic2FtcGxpbmdMZXZlbCkpOworICAgICAgICBpbnQgc3Vi
c2FtcGxlSW50ID0gMSA8PCBjb25zdHJhaW5lZFN1YnNhbXBsaW5nTGV2ZWw7IC8vIFswLi4zXSA9
PiBbMSwgMiwgNCwgOF0KKyAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBzdWJzYW1wbGVO
dW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBl
LCAgJnN1YnNhbXBsZUludCkpOworICAgICAgICAKKyAgICAgICAga2V5c1tudW1PcHRpb25zXSA9
IGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yOworICAgICAgICB2YWx1ZXNbbnVtT3B0aW9u
cysrXSA9IGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yOworICAgIH0KKyAgICAKKyAgICBp
ZiAoZGVjb2RlTW9kZSA9PSBEZWNvZGVNb2RlOjpJbW1lZGlhdGUpIHsKKyAgICAgICAga2V5c1tu
dW1PcHRpb25zXSA9IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGVJbW1lZGlhdGVseTsKKyAgICAg
ICAgdmFsdWVzW251bU9wdGlvbnMrK10gPSBrQ0ZCb29sZWFuVHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVl
cywgbnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gaW1hZ2VTb3VyY2VPcHRpb25zKFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbCA9IDAsIERlY29kZU1vZGUgZGVjb2RlTW9kZSA9IERlY29kZU1vZGU6OkxhenkpCit7Cisg
ICAgaWYgKHN1YnNhbXBsaW5nTGV2ZWwgfHwgZGVjb2RlTW9kZSA9PSBEZWNvZGVNb2RlOjpJbW1l
ZGlhdGUpCisgICAgICAgIHJldHVybiBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxp
bmdMZXZlbCwgZGVjb2RlTW9kZSk7CisgICAgCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25zID0gY3JlYXRlSW1hZ2VTb3VyY2VPcHRp
b25zKDAsIERlY29kZU1vZGU6OkxhenkpOworICAgIHJldHVybiBvcHRpb25zOworfQorCitzdGF0
aWMgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKENGRGljdGlvbmFy
eVJlZiBpbWFnZVByb3BlcnRpZXMpCit7CisgICAgQVNTRVJUKGltYWdlUHJvcGVydGllcyk7Cisg
ICAgQ0ZOdW1iZXJSZWYgb3JpZW50YXRpb25Qcm9wZXJ0eSA9IChDRk51bWJlclJlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlPcmllbnRhdGlv
bik7CisgICAgaWYgKCFvcmllbnRhdGlvblByb3BlcnR5KQorICAgICAgICByZXR1cm4gRGVmYXVs
dEltYWdlT3JpZW50YXRpb247CisgICAgCisgICAgaW50IGV4aWZWYWx1ZTsKKyAgICBDRk51bWJl
ckdldFZhbHVlKG9yaWVudGF0aW9uUHJvcGVydHksIGtDRk51bWJlckludFR5cGUsICZleGlmVmFs
dWUpOworICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZhbHVlKGV4aWZWYWx1
ZSk7Cit9CisKK0ltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKCkKK3sKKyAgICBtX25hdGl2ZURl
Y29kZXIgPSBDR0ltYWdlU291cmNlQ3JlYXRlSW5jcmVtZW50YWwoMCk7Cit9CisKK1N1YnNhbXBs
aW5nTGV2ZWwgSW1hZ2VEZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2Nh
bGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgLy8g
VGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2ZWxzOiAwID0gMXgsIDEgPSAwLjV4LCAyID0g
MC4yNXgsIDMgPSAwLjEyNXguCisgICAgZmxvYXQgY2xhbXBlZFNjYWxlID0gc3RkOjptYXg8Zmxv
YXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwgc2NhbGUpKTsKKyAgICBTdWJzYW1wbGluZ0xl
dmVsIHJlc3VsdCA9IGNlaWxmKGxvZzJmKDEgLyBjbGFtcGVkU2NhbGUpKTsKKyAgICBBU1NFUlQo
cmVzdWx0ID49MCAmJiByZXN1bHQgPD0gMyk7CisgICAgcmV0dXJuIHN0ZDo6bWluKHJlc3VsdCwg
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworfQorCitzaXplX3QgSW1hZ2VEZWNvZGVyOjpieXRl
c0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKQoreworICAgIC8vIE1lYXN1cmVkIGJ5IHRy
YWNpbmcgbWFsbG9jL2NhbGxvYyBjYWxscyBvbiBNYWMgT1MgMTAuNi42LCB4ODZfNjQuCisgICAg
Ly8gQSBub24temVybyB2YWx1ZSBlbnN1cmVzIGNhY2hlZCBpbWFnZXMgd2l0aCBubyBkZWNvZGVk
IGZyYW1lcyBzdGlsbCBlbnRlcgorICAgIC8vIHRoZSBsaXZlIGRlY29kZWQgcmVzb3VyY2VzIGxp
c3Qgd2hlbiB0aGUgQ0dJbWFnZVNvdXJjZSBkZWNvZGVzIGltYWdlCisgICAgLy8gcHJvcGVydGll
cywgYWxsb3dpbmcgdGhlIGNhY2hlIHRvIHBydW5lIHRoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFn
ZS4KKyAgICAvLyBUaGlzIHZhbHVlIGlzIGxpa2VseSB0byBiZSBpbmFjY3VyYXRlIG9uIG90aGVy
IHBsYXRmb3JtcywgYnV0IHRoZSBvdmVyYWxsCisgICAgLy8gYmVoYXZpb3IgaXMgdW5jaGFuZ2Vk
LgorICAgIHJldHVybiAxMzA4ODsKK30KKworU3RyaW5nIEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdAoreworICAgIENGU3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENH
SW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlcik7CisgICAgcmV0dXJuIFdlYkNvcmU6
OnByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOwor
fQorCitib29sIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICAv
LyBSYWduYXJvcyB5ZWxsczogVE9PIFNPT04hIFlvdSBoYXZlIGF3YWtlbmVkIG1lIFRPTyBTT09O
LCBFeGVjdXR1cyEKKyAgICBpZiAoQ0dJbWFnZVNvdXJjZUdldFN0YXR1cyhtX25hdGl2ZURlY29k
ZXIpIDwga0NHSW1hZ2VTdGF0dXNJbmNvbXBsZXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFk
b3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIs
IDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0
aWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIENGRGljdGlvbmFy
eUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhl
bFdpZHRoKQorICAgICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMu
Z2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VE
ZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9zaXplID0gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gbV9zaXplOwor
fQorCitzaXplX3QgSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQ0dJbWFnZVNvdXJjZUdldENvdW50KG1fbmF0aXZlRGVjb2Rlcik7Cit9CisKK2ludCBJbWFn
ZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0
aWVzKG1fbmF0aXZlRGVjb2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBp
ZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAg
CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNG
RGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZE
aWN0aW9uYXJ5KTsKKyAgICBpZiAoZ2lmUHJvcGVydGllcykgeworICAgICAgICBDRk51bWJlclJl
ZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywg
a0NHSW1hZ2VQcm9wZXJ0eUdJRkxvb3BDb3VudCk7CisgICAgICAgIAorICAgICAgICAvLyBObyBw
cm9wZXJ0eSBtZWFucyBsb29wIG9uY2UuCisgICAgICAgIGlmICghbnVtKQorICAgICAgICAgICAg
cmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAgICAgICAgCisgICAgICAgIGludCBsb29wQ291
bnQ7CisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmbG9v
cENvdW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIEEgcHJvcGVydHkgd2l0aCB2YWx1ZSAwIG1l
YW5zIGxvb3AgZm9yZXZlci4KKyAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/IGxvb3BDb3VudCA6
IGNBbmltYXRpb25Mb29wSW5maW5pdGU7CisgICAgfQorICAgIAorICAgIENGRGljdGlvbmFyeVJl
ZiBwbmdQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
cm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgaWYg
KHBuZ1Byb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVy
dHlBUE5HTG9vcENvdW50KTsKKyAgICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICByZXR1cm4g
Y0FuaW1hdGlvbkxvb3BPbmNlOworICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAg
ICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQp
OworICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJ
bmZpbml0ZTsKKyAgICB9CisgICAgCisgICAgLy8gVHVybnMgb3V0IHdlJ3JlIG5vdCBhbiBhbmlt
YXRlZCBpbWFnZSBhZnRlciBhbGwsIHNvIHdlIGRvbid0IGFuaW1hdGUuCisgICAgcmV0dXJuIGNB
bmltYXRpb25Ob25lOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6Z2V0SG90U3BvdChJbnRQb2lu
dCYgaG90U3BvdCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9w
ZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0
aXZlRGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXBy
b3BlcnRpZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnQgeCA9IC0xLCB5
ID0gLTE7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WCIpKTsKKyAgICBpZiAoIW51
bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25h
cnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7CisgICAgaWYg
KCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBob3RTcG90ID0gSW50UG9pbnQoeCwgeSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdElu
ZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25z
dAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENG
KENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRl
eCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7CisgICAgCisg
ICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGludCB3
aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENG
TnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdl
UHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZh
bHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICAKKyAgICBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBpeGVsSGVpZ2h0KTsKKyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZh
bHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7CisgICAgCisgICAgcmV0dXJuIElu
dFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoZnJhbWVDb3Vu
dCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKK30KKworSW1hZ2VPcmll
bnRhdGlvbiBJbWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNv
bnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGlu
ZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykK
KyAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworICAgIAorICAgIHJldHVy
biBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOworfQorCitmbG9h
dCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QK
K3sKKyAgICBmbG9hdCBkdXJhdGlvbiA9IDA7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRl
eChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwor
ICAgIGlmIChwcm9wZXJ0aWVzKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0
aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChnaWZQcm9w
ZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZV
bmNsYW1wZWREZWxheVRpbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1w
ZWQgZnJhbWUgZGVsYXkgaWYgaXQgZXhpc3RzLgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0
VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgeworICAg
ICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0
aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAg
IENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENGRGljdGlvbmFyeVJl
ZiBwbmdQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
cm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgICAg
IGlmIChwbmdQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0g
KENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVD
R0ltYWdlUHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lKSkKKyAgICAgICAgICAgICAgICBD
Rk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAg
ICAgICAgICAgZWxzZSBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVs
YXlUaW1lKSkKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVy
RmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE1h
bnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxh
c2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKyAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJl
aGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBz
cGVjaWZ5CisgICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxl
bS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+CisgICAgLy8gZm9yIG1v
cmUgaW5mb3JtYXRpb24uCisgICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQorICAgICAgICByZXR1
cm4gMC4xZjsKKyAgICByZXR1cm4gZHVyYXRpb247Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjph
bGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VD
b3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlv
bnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0
PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwg
a0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7CisgICAgaWYgKGpmaWZQcm9wZXJ0aWVz
KSB7CisgICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJv
b2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVBy
b3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKKyAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgewor
ICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9n
Q0ZCb29sKTsKKyAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81
MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVj
b2RpbmcgcHJvZ3Jlc3NpdmUKKyAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5
IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1w
bGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCisgICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRo
ZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2Rl
ZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlz
IGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCisgICAgICAgICAgICByZXR1cm4gIWlz
UHJvZ3Jlc3NpdmU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0Cit7CisgICAgaWYgKCFmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFn
ZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyKTsKKyAgICAKKyAgICAvLyBSZXR1cm4gZmFs
c2UgaWYgdGhlcmUgaXMgbm8gaW1hZ2UgdHlwZSBvciB0aGUgaW1hZ2UgdHlwZSBpcyBKUEVHLCBi
ZWNhdXNlCisgICAgLy8gSlBFRyBkb2VzIG5vdCBzdXBwb3J0IGFscGhhIHRyYW5zcGFyZW5jeS4K
KyAgICBpZiAoIWltYWdlVHlwZSB8fCBDRkVxdWFsKGltYWdlVHlwZSwgQ0ZTVFIoInB1YmxpYy5q
cGVnIikpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IENvdWxk
IHJldHVybiBmYWxzZSBmb3Igb3RoZXIgbm9uLXRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMuCisg
ICAgLy8gRklYTUU6IENvdWxkIG1heWJlIHJldHVybiBmYWxzZSBmb3IgYSBHSUYgRnJhbWUgaWYg
d2UgaGF2ZSBlbm91Z2ggaW5mbyBpbiB0aGUgR0lGIHByb3BlcnRpZXMgZGljdGlvbmFyeQorICAg
IC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIHRyYW5zcGFyZW50IGNvbG9yIHdhcyBk
ZWZpbmVkLgorICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZy
YW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsKSBjb25zdAoreworICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgp
ICogZnJhbWVTaXplLmhlaWdodCgpICogNDsKK30KKworUGFzc05hdGl2ZUltYWdlUHRyIEltYWdl
RGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIERlY29kZU1vZGUgZGVjb2RlTW9kZSkgY29uc3QKK3sK
KyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VD
cmVhdGVJbWFnZUF0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRp
b25zKHN1YnNhbXBsaW5nTGV2ZWwsIGRlY29kZU1vZGUpLmdldCgpKSk7CisgICAgICAgIAorI2lm
IFBMQVRGT1JNKElPUykKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzM3MTE5OD4gLSBDb3JlR3Jh
cGhpY3MgY2hhbmdlZCB0aGUgZGVmYXVsdCBjYWNoaW5nIGJlaGF2aW91ciBpbiBpT1MgNC4wIHRv
IGtDR0ltYWdlQ2FjaGluZ1RyYW5zaWVudAorICAgIC8vIHdoaWNoIGNhdXNlZCBhIHBlcmZvcm1h
bmNlIHJlZ3Jlc3Npb24gZm9yIHVzIHNpbmNlIHRoZSBpbWFnZXMgaGFkIHRvIGJlIHJlc2FtcGxl
ZC9yZWNyZWF0ZWQgZXZlcnkgdGltZSB3ZSBjYWxsZWQKKyAgICAvLyBDR0NvbnRleHREcmF3SW1h
Z2UuIFdlIG5vdyB0ZWxsIENHIHRvIGNhY2hlIHRoZSBkcmF3biBpbWFnZXMuIFNlZSBhbHNvIDxy
ZGFyOi8vcHJvYmxlbS8xNDM2Njc1NT4gLQorICAgIC8vIENvcmVHcmFwaGljcyBuZWVkcyB0byB1
bi1kZXByZWNhdGUga0NHSW1hZ2VDYWNoaW5nVGVtcG9yYXJ5IHNpbmNlIGl0J3Mgc3RpbGwgbm90
IHRoZSBkZWZhdWx0LgorI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQt
ZGVjbGFyYXRpb25zIgorI2VuZGlmCisgICAgICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1h
Z2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcp
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisgICAgICAgIAorICAgIENGU3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJj
ZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYg
eGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdlIik7CisKKyAgICBpZiAoIWltYWdl
VVRJKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisKKyAgICBpZiAoIUNGRXF1YWwoaW1hZ2VVVEks
IHhibVVUSSkpCisgICAgICAgIHJldHVybiBpbWFnZTsKKworICAgIC8vIElmIGl0IGlzIGFuIHhi
bSBpbWFnZSwgbWFzayBvdXQgYWxsIHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFu
c3BhcmVudC4KKyAgICBjb25zdCBDR0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUs
ICAyNTUsIDI1NSwgMjU1LCAyNTV9OworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJ
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgp
LCBtYXNraW5nQ29sb3JzKSk7CisgICAgcmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2Ug
OiBpbWFnZTsKK30KKyAgICAKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZl
ciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgLy8gT24gTWFjIHRoZSBOU0RhdGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNl
Y3JldGx5IGFwcGVuZGVkIHRvIHdpdGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4K
KyAgICAvLyBXZSB1c2UgU2hhcmVkQnVmZmVyJ3MgYWJpbGl0eSB0byB3cmFwIGl0c2VsZiBpbnNp
ZGUgQ0ZEYXRhIHRvIGdldCBhcm91bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzCisg
ICAgLy8gcmVhbGx5IGxvb2tpbmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBDR0ltYWdlU291
cmNlVXBkYXRlRGF0YShtX25hdGl2ZURlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgp
LCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UKKyAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRl
ciB0byB3cmFwIHRoZSBTaGFyZWRCdWZmZXIuCisgICAgZGF0YS0+cmVmKCk7CisgICAgLy8gV2Ug
dXNlIHRoZSBHZXRCeXRlc0F0UG9zaXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5
dGVQb2ludGVyIG9uZSBiZWNhdXNlIFNoYXJlZEJ1ZmZlcgorICAgIC8vIGRvZXMgbm90IHByb3Zp
ZGUgYSB3YXkgdG8gbG9jayBkb3duIHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0
IGl0IHdvbid0IG1vdmUsIHdoaWNoCisgICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcg
dGhlIEdldEJ5dGVQb2ludGVyIGNhbGxiYWNrLgorICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2Fs
bGJhY2tzIHByb3ZpZGVyQ2FsbGJhY2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRl
c0F0UG9zaXRpb24sIHNoYXJlZEJ1ZmZlclJlbGVhc2UgfTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRh
UHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVE
aXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKKyAgICBDR0lt
YWdlU291cmNlVXBkYXRlRGF0YVByb3ZpZGVyKG1fbmF0aXZlRGVjb2RlciwgZGF0YVByb3ZpZGVy
LmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2VuZGlmCit9CisKK30KKworI2VuZGlmIC8vIFVT
RShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU2MWFiOWUxNzc5MTcyYmYzZWQyN2ZhMDQwYTBlNDE5MWJh
MTY2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdlRGVjb2Rlcl9oCisjZGVmaW5l
IEltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgcHJlZmVycmVkRXh0ZW5z
aW9uRm9ySW1hZ2VTb3VyY2VUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7CisKK2VudW0gY2xhc3Mg
RGVjb2RlTW9kZSB7IEltbWVkaWF0ZSwgTGF6eSB9OworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisK
K2NsYXNzIEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAgSW1hZ2VEZWNvZGVyKCk7CisgICAg
dmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkgeyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzRGVj
b2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpOworICAgIHN0YXRpYyBTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBt
YXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdDsKKyAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgIEludFNpemUg
c2l6ZSgpIGNvbnN0OworICAgIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgaW50IHJl
cGV0aXRpb25Db3VudCgpIGNvbnN0OworICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYgaG90
U3BvdCkgY29uc3Q7CisKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsKSBjb25zdDsKKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6
ZV90KSBjb25zdDsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXpl
X3QpIGNvbnN0OworCisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25z
dDsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9v
bCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBjb25z
dDsKKworICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXpl
X3QsIFN1YnNhbXBsaW5nTGV2ZWwsIERlY29kZU1vZGUgPSBEZWNvZGVNb2RlOjpMYXp5KSBjb25z
dDsKKworICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZl
ZCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsKKyAgICBD
R0ltYWdlU291cmNlUmVmIG1fbmF0aXZlRGVjb2RlcjsKK307CisgICAgCit9CisKKyNlbmRpZiAv
LyBJbWFnZURlY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAppbmRleCBkNGEwMTJiNmY1N2JmNTM5MzA2NDc3N2I2
YzEwOTM2NmIyNGM0NDVjLi5kY2Y3OWE3MmExNWU5Zjc5NDBmYWRhNmQ2MTk1YjhjZDQzNTQzM2Iz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkltYWdlU291cmNlQ0cu
aCIKIAogI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTQ0LDQ0ICs0NSw5IEBACiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2lt
cG9ydCA8SW1hZ2VJTy9DR0ltYWdlU291cmNlUHJpdmF0ZS5oPgotI2Vsc2UKLWNvbnN0IENGU3Ry
aW5nUmVmIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291
cmNlU3Vic2FtcGxlRmFjdG9yIik7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
b25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5
VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdl
YkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lID0gQ0ZTVFIoIkRlbGF5VGltZSIpOwot
Y29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQgPSBD
RlNUUigiTG9vcENvdW50Iik7Ci0KLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hv
dWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiIp
OwotY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigi
a0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEiKTsKLQotI2lmICFQTEFURk9STShDT0NPQSkKLXNp
emVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9pZCogYnVm
ZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQotewotICAgIFNoYXJlZEJ1ZmZlciog
c2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7Ci0gICAgc2l6
ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXItPnNpemUoKTsKLSAgICBpZiAocG9zaXRpb24g
Pj0gc291cmNlU2l6ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBjaGFyKiBzb3Vy
Y2UgPSBzaGFyZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uOwotICAgIHNpemVfdCBhbW91bnQg
PSBzdGQ6Om1pbjxzaXplX3Q+KGNvdW50LCBzb3VyY2VTaXplIC0gcG9zaXRpb24pOwotICAgIG1l
bWNweShidWZmZXIsIHNvdXJjZSwgYW1vdW50KTsKLSAgICByZXR1cm4gYW1vdW50OwotfQotCi12
b2lkIHNoYXJlZEJ1ZmZlclJlbGVhc2Uodm9pZCogaW5mbykKLXsKLSAgICBTaGFyZWRCdWZmZXIq
IHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAgIHNo
YXJlZEJ1ZmZlci0+ZGVyZWYoKTsKLX0KLSNlbmRpZgotCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3Vy
Y2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24pCi0gICAgOiBtX2RlY29kZXIoMCkKIHsKICAgICAvLyBGSVhNRTogQWxwaGFP
cHRpb24gYW5kIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGFyZSBpZ25vcmVkLgogfQpAQCAt
MTAwLDM1NCArNjYsMTI5IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFs
bEZyYW1lcywgc2l6ZV90LCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKG1fZGVjb2RlcikgewotICAgICAgICBDRlJlbGVhc2UobV9kZWNvZGVyKTsK
KyAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKICAgICAgICAgbV9kZWNvZGVyID0gMDsKICAgICB9
CisgICAgCiAgICAgaWYgKGRhdGEpCiAgICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKIH0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdl
U291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCisgICAgCit2
b2lkIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKFNoYXJlZEJ1ZmZlciogZGF0
YSkKIHsKLSAgICBpZiAoIXN1YnNhbXBsaW5nTGV2ZWwpIHsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbnVtT3B0aW9ucyA9IDM7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbbnVtT3B0aW9uc10g
PSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVy
UkdCMzIsIGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIH07Ci0gICAgICAgIGNvbnN0IHZvaWQq
IHZhbHVlc1tudW1PcHRpb25zXSA9IHsga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBr
Q0ZCb29sZWFuVHJ1ZSB9OwotICAgICAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxw
dHIsIGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgfQotCi0gICAgc2hv
cnQgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsID0gc3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6
bWF4PHNob3J0PigwLCBzdWJzYW1wbGluZ0xldmVsKSk7Ci0gICAgaW50IHN1YnNhbXBsZUludCA9
IDEgPDwgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQs
IDhdCi0KLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0
Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxl
SW50KSk7Ci0gICAgY29uc3QgQ0ZJbmRleCBudW1PcHRpb25zID0gNDsKLSAgICBjb25zdCB2b2lk
KiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFn
ZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NH
SW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgfTsKLSAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVt
T3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRy
dWUsIHN1YnNhbXBsZU51bWJlci5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAgCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIG1fZGVjb2RlciA9IG5ldyBJbWFnZURlY29kZXIoKTsKIH0K
LQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9ucyhT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSAwKQorICAgIAordm9pZCBJbWFnZVNv
dXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQog
ewotICAgIGlmIChzdWJzYW1wbGluZ0xldmVsKQotICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2VT
b3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIGlmICghZGF0YSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+PiBvcHRpb25zID0gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKDApOwotICAgIHJldHVy
biBvcHRpb25zOwotfQorICAgIGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoZGF0YSk7CisgICAgaWYg
KCFtX2RlY29kZXIpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9kZWNvZGVyOworICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxE
YXRhUmVjZWl2ZWQpOwogfQogCi12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZl
ciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVu
YW1lRXh0ZW5zaW9uKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIW1f
ZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVu
dGFsKDApOwotICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVkQnVmZmVy
IGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIncyBr
bm93bGVkZ2UuICBXZSB1c2UgU2hhcmVkQnVmZmVyJ3MgYWJpbGl0eQotICAgIC8vIHRvIHdyYXAg
aXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0IElt
YWdlSU8gaXMgcmVhbGx5IGxvb2tpbmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBDR0ltYWdl
U291cmNlVXBkYXRlRGF0YShtX2RlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBh
bGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9k
ZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIENyZWF0
ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBkYXRhLT5y
ZWYoKTsKLSAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRo
ZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVmZmVyCi0gICAg
Ly8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRlciBh
bmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwgd2hpY2gKLSAgICAvLyBpcyBhIHJlcXVp
cmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBvaW50ZXIgY2FsbGJhY2suCi0gICAgQ0dEYXRh
UHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAsIHNo
YXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgc2hhcmVkQnVmZmVyUmVsZWFzZSB9OwotICAg
IFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0Rh
dGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBkYXRhLT5zaXplKCksICZwcm92aWRlckNhbGxi
YWNrcykpOwotICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhUHJvdmlkZXIobV9kZWNvZGVyLCBk
YXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKKyAgICByZXR1cm4g
aW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IFN0cmluZygp
OwogfQogCi1TdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK1N1
YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9h
dCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIENG
U3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rl
cik7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNl
VHlwZShpbWFnZVNvdXJjZVR5cGUpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnN1YnNhbXBs
aW5nTGV2ZWxGb3JTY2FsZShzY2FsZSwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwogfQorICAg
IAogCi1TdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2Nh
bGUoZmxvYXQgc2NhbGUpIGNvbnN0CitzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRv
RGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CiB7Ci0gICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vi
c2FtcGxpbmcgbGV2ZWxzOiAwID0gMXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXgu
Ci0gICAgZmxvYXQgY2xhbXBlZFNjYWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1p
bjxmbG9hdD4oMSwgc2NhbGUpKTsKLSAgICBpbnQgcmVzdWx0ID0gY2VpbGYobG9nMmYoMSAvIGNs
YW1wZWRTY2FsZSkpOwotICAgIEFTU0VSVChyZXN1bHQgPj0wICYmIHJlc3VsdCA8PSAzKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRv
RGV0ZXJtaW5lUHJvcGVydGllcygpOwogfQotCisgICAgCiBib29sIEltYWdlU291cmNlOjppc1Np
emVBdmFpbGFibGUoKQogewotICAgIC8vIFJhZ25hcm9zIHllbGxzOiBUT08gU09PTiEgWW91IGhh
dmUgYXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1dHVzIQotICAgIGlmIChDR0ltYWdlU291cmNl
R2V0U3RhdHVzKG1fZGVjb2RlcikgPCBrQ0dJbWFnZVN0YXR1c0luY29tcGxldGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlMFBy
b3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9k
ZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghaW1hZ2Uw
UHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENGRGljdGlv
bmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQ
aXhlbFdpZHRoKQotICAgICAgICAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShpbWFnZTBQcm9w
ZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOworICAgIHJldHVybiBt
X2RlY29kZXIgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKIH0KIAotc3RhdGljIElt
YWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYg
aW1hZ2VQcm9wZXJ0aWVzKQorYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJh
bWVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaW1hZ2VQcm9wZXJ0
aWVzKTsKLSAgICBDRk51bWJlclJlZiBvcmllbnRhdGlvblByb3BlcnR5ID0gKENGTnVtYmVyUmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdlUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eU9y
aWVudGF0aW9uKTsKLSAgICBpZiAoIW9yaWVudGF0aW9uUHJvcGVydHkpCi0gICAgICAgIHJldHVy
biBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLQotICAgIGludCBleGlmVmFsdWU7Ci0gICAgQ0ZO
dW1iZXJHZXRWYWx1ZShvcmllbnRhdGlvblByb3BlcnR5LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZXhp
ZlZhbHVlKTsKLSAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlm
VmFsdWUpOworICAgIHJldHVybiBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+YWxsb3dTdWJz
YW1wbGluZ09mRnJhbWVBdEluZGV4KGluZGV4KTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6YWxs
b3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3QKK0ludFNpemUgSW1hZ2VT
b3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbikgY29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4
KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXBy
b3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBq
ZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5
KSk7Ci0gICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGQm9vbGVhblJlZiBpc1By
b2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKLSAg
ICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgewotICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZl
ID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKLSAgICAgICAgICAgIC8vIFdvcmth
cm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkg
bGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKLSAgICAgICAgICAg
IC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRo
aXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCi0g
ICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hl
Y2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQx
OD4pCi0gICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXpl
QXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwg
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAotewotICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRp
b25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSAgICBpZiAoIXByb3BlcnRpZXMpCisg
ICAgaWYgKCFpbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAg
aW50IHdpZHRoID0gMDsKLSAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBDRk51bWJlclJlZiBudW0g
PSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NH
SW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwotICAgIG51bSA9IChDRk51
bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVBy
b3BlcnR5UGl4ZWxIZWlnaHQpOwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFs
dWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKLQotICAgIGlmICgoZGVzY3JpcHRp
b24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikg
JiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKS51c2VzV2lkdGhB
c0hlaWdodCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZShoZWlnaHQsIHdpZHRoKTsKKyAgICBJ
bnRTaXplIHNpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBs
aW5nTGV2ZWwpOworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBtX2RlY29kZXIt
Pm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7CiAKLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKKyAgICByZXR1cm4gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPT0gUmVz
cGVjdEltYWdlT3JpZW50YXRpb24gJiYgb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/
IHNpemUudHJhbnNwb3NlZFNpemUoKSA6IHNpemU7CiB9CiAKIEltYWdlT3JpZW50YXRpb24gSW1h
Z2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0gICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNv
dXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9w
dGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uOwotCi0gICAgcmV0dXJuIG9yaWVudGF0aW9uRnJvbVByb3Bl
cnRpZXMocHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2Rl
Y29kZXItPm9yaWVudGF0aW9uQXRJbmRleChpbmRleCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlv
bjsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3Jp
cHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7Cisg
ICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6
OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNl
OjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3Bl
cnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsK
LSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCB4
ID0gLTEsIHkgPSAtMTsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RYIikpOwotICAg
IGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJngp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RZIikpOwotICAg
IGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJnkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoeCA8IDAgfHwgeSA8IDApCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGhvdFNwb3QgPSBJbnRQb2ludCh4LCB5KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9E
ZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKK2Jvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3Qo
SW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiB7Ci0gICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBt
YWxsb2MvY2FsbG9jIGNhbGxzIG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KLSAgICAvLyBBIG5v
bi16ZXJvIHZhbHVlIGVuc3VyZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVz
IHN0aWxsIGVudGVyCi0gICAgLy8gdGhlIGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVu
IHRoZSBDR0ltYWdlU291cmNlIGRlY29kZXMgaW1hZ2UKLSAgICAvLyBwcm9wZXJ0aWVzLCBhbGxv
d2luZyB0aGUgY2FjaGUgdG8gcHJ1bmUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgotICAg
IC8vIFRoaXMgdmFsdWUgaXMgbGlrZWx5IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZv
cm1zLCBidXQgdGhlIG92ZXJhbGwKLSAgICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCi0gICAg
cmV0dXJuIDEzMDg4OworICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVyLT5nZXRIb3RT
cG90KGhvdFNwb3QpOwogfQotICAgIAorCiBpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3Vu
dCgpCiB7Ci0gICAgaWYgKCFpbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gY0FuaW1hdGlv
bkxvb3BPbmNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9
IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1fZGVjb2RlciwgaW1hZ2VTb3Vy
Y2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVy
biBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGll
cyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOwotICAgIGlmIChnaWZQcm9wZXJ0aWVz
KSB7Ci0gICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGTG9vcENvdW50KTsKLQot
ICAgICAgICAvLyBObyBwcm9wZXJ0eSBtZWFucyBsb29wIG9uY2UuCi0gICAgICAgIGlmICghbnVt
KQotICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQotICAgICAgICBpbnQg
bG9vcENvdW50OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlw
ZSwgJmxvb3BDb3VudCk7Ci0KLSAgICAgICAgLy8gQSBwcm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVh
bnMgbG9vcCBmb3JldmVyLgotICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDog
Y0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKLSAgICB9Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgcG5n
UHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVy
dGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgIGlmIChwbmdQ
cm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBO
R0xvb3BDb3VudCk7Ci0gICAgICAgIGlmICghbnVtKQotICAgICAgICAgICAgcmV0dXJuIGNBbmlt
YXRpb25Mb29wT25jZTsKLQotICAgICAgICBpbnQgbG9vcENvdW50OwotICAgICAgICBDRk51bWJl
ckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0gICAgICAgIHJl
dHVybiBsb29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9uTG9vcEluZmluaXRlOwotICAg
IH0KLQotICAgIC8vIFR1cm5zIG91dCB3ZSdyZSBub3QgYW4gYW5pbWF0ZWQgaW1hZ2UgYWZ0ZXIg
YWxsLCBzbyB3ZSBkb24ndCBhbmltYXRlLgotICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKyAg
ICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBj
QW5pbWF0aW9uTG9vcE9uY2U7CiB9CiAKIHNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGVjb2RlciA/IENHSW1hZ2VTb3VyY2VHZXRDb3VudCht
X2RlY29kZXIpIDogMDsKKyAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNv
dW50KCkgOiAwOwogfQogCi1DR0ltYWdlUmVmIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCitQYXNz
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewotICAgIGlmICgh
aW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5k
ZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwp
LmdldCgpKSk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcz
NzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlv
dXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBj
YXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhh
ZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8g
Q0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1h
Z2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3Jh
cGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5j
ZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSNlbmRpZgotICAgIENHSW1hZ2VTZXRDYWNo
aW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7Ci0jaWYgQ09N
UElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCi0KLSAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VT
b3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhi
bVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFnZSIpOwotCi0gICAgaWYgKCFpbWFnZVVU
SSkKLSAgICAgICAgcmV0dXJuIGltYWdlLmxlYWtSZWYoKTsKLQotICAgIGlmICghQ0ZFcXVhbChp
bWFnZVVUSSwgeGJtVVRJKSkKLSAgICAgICAgcmV0dXJuIGltYWdlLmxlYWtSZWYoKTsKLSAgICAK
LSAgICAvLyBJZiBpdCBpcyBhbiB4Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJl
YXMgdG8gcmVuZGVyIHRoZW0gdHJhbnNwYXJlbnQuCi0gICAgY29uc3QgQ0dGbG9hdCBtYXNraW5n
Q29sb3JzWzZdID0gezI1NSwgMjU1LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gbWFza2VkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFz
a2luZ0NvbG9ycyhpbWFnZS5nZXQoKSwgbWFza2luZ0NvbG9ycykpOwotICAgIGlmICghbWFza2Vk
SW1hZ2UpCi0gICAgICAgIHJldHVybiBpbWFnZS5sZWFrUmVmKCk7Ci0KLSAgICByZXR1cm4gbWFz
a2VkSW1hZ2UubGVha1JlZigpOworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVy
LT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxs
cHRyOwogfQogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVf
dCBpbmRleCkKIHsKICAgICBBU1NFUlQoZnJhbWVDb3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFn
ZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9kZWNvZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0
dXNDb21wbGV0ZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOwogfQogCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVE
dXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNv
cHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMo
KS5nZXQoKSkpOwotICAgIGlmIChwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJl
ZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
cm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgICAg
IGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0g
KENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdl
UHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNl
IHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgICAg
IENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlU
aW1lKSkgewotICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFt
ZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4aXN0LgotICAg
ICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZk
dXJhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDRkRpY3Rpb25h
cnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAg
ICAgICBpZiAocG5nUHJvcGVydGllcykgewotICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51
bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJD
b3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSkpCi0gICAgICAgICAgICAg
ICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBO
R0RlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51
bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1h
bnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxh
c2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KLSAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJl
aGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBz
cGVjaWZ5Ci0gICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxl
bS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+Ci0gICAgLy8gZm9yIG1v
cmUgaW5mb3JtYXRpb24uCi0gICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQotICAgICAgICByZXR1
cm4gMC4xZjsKLSAgICByZXR1cm4gZHVyYXRpb247CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkg
PyBtX2RlY29kZXItPmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KSA6IDA7CiB9CiAKIGJvb2wg
SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBGSVhNRTogd2h5IGRvZXNu
J3QgdGhpcyByZXR1cm4gdHJ1ZT8KLQotICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChp
bmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBl
ID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKLQotICAgIC8vIFJldHVybiBmYWxz
ZSBpZiB0aGVyZSBpcyBubyBpbWFnZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJl
Y2F1c2UKLSAgICAvLyBKUEVHIGRvZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5Lgot
ICAgIGlmICghaW1hZ2VUeXBlIHx8IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpw
ZWciKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1
cm4gZmFsc2UgZm9yIG90aGVyIG5vbi10cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzLgotICAgIC8v
IEZJWE1FOiBDb3VsZCBtYXliZSByZXR1cm4gZmFsc2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhh
dmUgZW5vdWdoIGluZm8gaW4gdGhlIEdJRiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0
byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5l
ZC4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29k
ZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKIH0KIAogdW5zaWduZWQgSW1hZ2VTb3Vy
Y2U6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKSBjb25zdAogewotICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXpl
QXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0
aW9uKFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSk7Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0
aCgpICogZnJhbWVTaXplLmhlaWdodCgpICogNDsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/
IG1fZGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDog
MDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5kZXggYmE0MTU5N2FhMTEwMWRi
NjI5MDIzZDI3M2IyMDBlNzgxZDMzYWFjOS4uNTljYzJjOWJlOGIzZmZlMTExODZhNjg1ZDJlOGNm
NTk0YzFkMzkzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0yNjMsNyArMjYzLDcg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291
bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUF0SW5kZXgoMCk7CisgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUltYWdlQXRJbmRleCgwKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ltYWdlU3VyZmFj
ZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIC8vIDEu
IEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJl
bXVsdGlwbHlBbHBoYSBoYWQgYmVlbiBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhG
RiBmb3IgZWFjaCBwaXhlbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9JY29uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ljb25JT1MubW0KaW5kZXggMjE1OTE1ZjI4YTE5MjE3MjM5NmQ0NmYwODZkMjI0OWI4MWQ5
ZDc2YS4uZTE4MzNkMTk4MzBiMTA3NjYzNjY0YjYxMjg0NDU5N2Y4M2ZjMGE4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KQEAgLTMzLDcg
KzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotSWNvbjo6SWNvbihDR0ltYWdl
UmVmIGltYWdlKQorSWNvbjo6SWNvbihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKICAgICA6IG1fY2dJ
bWFnZShpbWFnZSkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9JbWFnZU1hYy5tbQppbmRleCBmZjA3MTMxYTYxZmNlZDA0NTg2YjM3MmQ5YmEyMDc5YTk4
NzNjMzhiLi5mYTAxMWFhODgxNjMwMzAwMDk0NDk4ZWJjMGZmY2E5ZmI5YzMwMzRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC05
NSw3ICs5NSw3IEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9u
KCkKIAogICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2Ug
PSBmcmFtZUF0SW5kZXgoaSk7CisgICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpLmdldCgpOwogICAgICAgICBpZiAoY2dJbWFnZSkKICAgICAgICAgICAgIGlt
YWdlcy5hcHBlbmQoY2dJbWFnZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCmluZGV4IDgzNWVjZjNmNGZlZWViOGEw
ZGZhOGQzNjk3MzEyOGYzYjgwN2I5MjYuLjQ3MDczYzBlZDY5MGUwNDRmZmIzYTk0ZTU4NmYyNjAy
NzlkMWM0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VDR1dpbi5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
d0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxv
YXQKIHsKICAgICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZy
YW1lQXRJbmRleChpKTsKKyAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KGkpLmdldCgpOwogICAgICAgICBpZiAoaW1hZ2UgJiYgQ0dJbWFnZUdldEhlaWdodChpbWFn
ZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UpID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS53aWR0aCgpKSkgewog
ICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwogICAgICAg
ICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDI5YTIwMjNkYjYzYTkx
NDM0YzM5NDhlYWE1NTIzYmI2MWZlODEwNzUuLjk3ZWQwOTc5MzVjNTFmYzIwYTg0NWM5NThlMTU2
OThkMjAwMGRiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwg
Y29uc3QgRmxvYXQKIHsKICAgICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lQXRJbmRleChpKTsKKyAgICAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOwogICAgICAgICBp
ZiAoIXN1cmZhY2UpCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KaW5kZXggYmJhZTkxZmE4ZTNjMDY2NDQ3YzQ2NGQ2
ZTMxMjAwZGUyNDhjZTgzZi4uOTFjOTJlOTEyY2MyMTg5MmY2NTllNjdhOTU5NTcxZmJkZDAwMjdi
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCkBAIC05
MSw3ICs5MSw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
SW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpCiAgICAgaWYgKGlzPEJpdG1hcElt
YWdlPigqaW1hZ2UpKSB7CiAgICAgICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247CiAg
ICAgICAgIEJpdG1hcEltYWdlJiBiaXRtYXBJbWFnZSA9IGRvd25jYXN0PEJpdG1hcEltYWdlPigq
aW1hZ2UpOwotICAgICAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBiaXRt
YXBJbWFnZS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKGRlc2NyaXB0aW9uKTsKKyAgICAgICAg
SW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uuc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbigpOwogCiAgICAgICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQogICAgICAgICAgICAg
b3JpZW50YXRpb24gPSBiaXRtYXBJbWFnZS5vcmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273932</attachid>
            <date>2016-03-14 00:30:03 -0700</date>
            <delta_ts>2016-03-14 00:41:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160314002951.patch</filename>
            <type>text/plain</type>
            <size>91796</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjOThmYzYxZmI4ZmUx
ZTAxYTY5MWNjNzg0OTM0NmU1YTkwNzI1MC4uMzU2YTg1MGYyODAzYTQwZTJhYjg1MTM1N2ExMmIz
MmE3MDM3ZTgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2OSBAQAorMjAxNi0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBpbWFnZSBkZWNvZGluZyBjb2RlIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAg
b3V0IHRvIGEgbmV3IGNsYXNzIG5hbWVkCisgICAgICAgIEltYWdlRGVjb2Rlci4gVGhlIHB1cnBv
c2Ugb2YgdGhpcyBzcGxpdCBpcyB0byBoYXZlIHRoZSBDRyBJbWFnZVNvdXJjZSBzaW1pbGFyCisg
ICAgICAgIHRvIHRoZSBub25lIENHIEltYWdlU291cmNlIHdoZXJlIHRoZXJlIGlzIGEgc2VwYXJh
dGUgY2xhc3MgZm9yIGRlY29kaW5nLiBUaGUKKyAgICAgICAgcGxhbiBpcyB0byBtZXJnZSB0aGUg
SW1hZ2VTb3VyY2UuY3BwIGFuZCBJbWFnZVNvdXJjZUNHLmNwcCBpbiBvbmUgZmlsZSBzbworICAg
ICAgICBkZWNpZGluZyB3aGV0aGVyIHRoZSBkZWNvZGluZyBzaG91bGQgaGFwcGVuIHN5bmNocm9u
b3VzbHkgb3IgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgY2FuIGhhcHBlbiBpbiBvbmUgcGxhY2Ug
YW5kIHRoZSBjYWNoaW5nIG9mIHRoZSBmcmFtZXMgY2FuIGJlIGhhbmRsZWQgYnkgdGhlCisgICAg
ICAgIEltYWdlU291cmNlIGFzIHdlbGwuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRl
cmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmR1bXApOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcElt
YWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjppbWFnZVNvdXJjZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVk
QnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTsKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZl
clJlbGVhc2UpOworICAgICAgICAoV2ViQ29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
OjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpnZXRI
b3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1l
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6fkltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmVuc3VyZURl
Y29kZXJJc0NyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFt
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpm
cmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlv
bkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkQnVmZmVyUmVsZWFzZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKToKKworMjAxNi0wMy0xMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENoYW5nZSBOYXRpdmVJbWFnZVB0ciBm
b3IgQ0cgdG8gYmUgUmV0YWluUHRyPENHSW1hZ2VSZWY+CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0MTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIYXZpbmcgTmF0aXZlSW1hZ2VQdHIgYXMgYSByYXcg
cG9pbnRlciBtYWtlcyBtYW5hZ2luZyB0aGUgbGlmZSBjeWNsZSBvZgorICAgICAgICB0aGUgQ0dJ
bWFnZVJlZiBoYXJkLiBBIGxvdCBvZiB3b3JrcyB3YXMgZG9uZSB0byBtYWtlIHN1cmUgdGhlIENH
IHBvaW50ZXIKKyAgICAgICAgaXMgbWFpbnRhaW5lZCBjb3JyZWN0bHkuIEl0IHdhcyBhbHNvIG5v
dCBwb3NzaWJsZSB0byBtb3ZlIGEgRnJhbWVEYXRhIHNpbmNlCisgICAgICAgIGNhbGxpbmcgdGhl
IGRlc3RydWN0b3Igd2FzIHJlbGVhc2luZyB0aGUgQ0dJbWFnZVJlZi4KKworICAgICAgICBJIGFt
IGdvaW5nIHRvIGZvbGxvdyB0aGlzIG5hbWluZyBjb252ZW50aW9uOgorICAgICAgICAxLiBBbiBJ
bWFnZSBvYmplY3QgY2FuIGhhdmUgb25lIG9yIG1vcmUgRnJhbWVEYXRhLiBBIEZyYW1lRGF0YSBj
YW4gYmUgbmFtZWQKKyAgICAgICAgICAgZm9yIHNob3J0bmVzcyBhcyAiZnJhbWUiLCAibV9mcmFt
ZXMiLCBldGMuCisgICAgICAgIDIuIEEgRnJhbWVEYXRhIGNhbiBoYXZlIHplcm8gb3Igb25lIE5h
dGl2ZUltYWdlUHRyLiBBIE5hdGl2ZUltYWdlUHRyIGNhbgorICAgICAgICAgICBiZSBuYW1lZCBh
cyAiaW1hZ2UiLCAibV9pbWFnZSIsIGV0Yy4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1v
cnlDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0Nh
Y2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmhhdmVGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJh
bWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJp
dG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6Y29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdElt
YWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Okljb246Okljb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVw
cmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1Nv
dXJjZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1Nv
dXJjZVNpemUpOgorCiAyMDE2LTAzLTEyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0Zvcm1zOiBmb2N1c10gZm9jdXMgcmluZ3MgYXJvdW5kIHRleHQgZmllbGRz
IGRvIG5vdCBmb2xsb3cgY29udG91ciAoYm9yZGVyLXJhZGl1cykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlCmluZGV4IGU1MjA5Y2IyMGNmMDMzODdhMjUyNjQzZGY0ZTBiMjE1MTQ5
MjA0ZjcuLjdiMzY3YTczYWM5ZTE1YmQ5NWM4OWM5N2EzNmEwZjAyNWY3MjgwNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtNzEsNiArNzEsNyBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VEZWNvZGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNl
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQppbmRleCA4MzViOWFhMjI0YWE5ZWFhZWUwNDYyMzM5N2U5OTAxNmU5ZjdlZWJmLi5kYWNk
YTU2OTFhNjVjNjY1NjA2M2E0YzA3MDZjMTBhMGVmYjYyMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQpAQCAtNDAwLDYgKzQwMCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW50UG9pbnRDRy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAwMzA3YmEzOGZmMGYzYTRjNDcxYjlkNDI5MTQ2MTYyYTk1
OWVlNzY2Li42YjYyOTMxMzM3YTBjNzE5NTk5YzYyNTY5MTRhYzIyMmExNWE4YTUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
MjkxLDYgKzIyOTEsOCBAQAogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NN
YWNyb3MuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5o
ICovOyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTU1OUJCODc5MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU5QkI4NzcxQzk2NDY1ODAw
MjQxM0NEIC8qIEltYWdlRGVjb2Rlci5jcHAgKi87IH07CisJCTU1OUJCODdBMUM5NjQ2NTgwMDI0
MTNDRCAvKiBJbWFnZURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1OUJCODc4MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuaCAq
LzsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMDFDNkU1
NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsgfTsKIAkJNTcyQTdGMjMxQzZFNUE2
NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0
ZWRDbGljay5jcHAgKi87IH07CiAJCTU4MDM3MTYxMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVj
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAz
NzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICovOyB9OwpAQCAtOTg3NSw2ICs5
ODc3LDggQEAKIAkJNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFs
aWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJNTU5QkI4NzcxQzk2NDY1ODAwMjQxM0NE
IC8qIEltYWdlRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZURlY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTlCQjg3
ODFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xp
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNpbXVsYXRlZENsaWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxODMz
LDYgKzIxODM3LDggQEAKIAkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwICovLAogCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1
ZmZlckRhdGFDRy5oICovLAogCQkJCUIyNzUzNTMwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNH
LmNwcCAqLywKKwkJCQk1NTlCQjg3NzFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmNw
cCAqLywKKwkJCQk1NTlCQjg3ODFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggKi8s
CiAJCQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICovLAog
CQkJCTRCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggKi8sCiAJCQkJ
NEIzNDgwOTEwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0dNYWMubW0gKi8sCkBAIC0y
NjgxMiw2ICsyNjgxOCw3IEBACiAJCQkJRkRBMTVFQ0UxMkIwM0Y2MTAwM0E1ODNBIC8qIEpTU2Ny
aXB0UHJvY2Vzc29yTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUZBMzdFRkIxMTcyRkRBNjAw
QzRDRDU1IC8qIEpTU2NyaXB0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUZBMzdFRkQx
MTcyRkRBNjAwQzRDRDU1IC8qIEpTU2NyaXB0UHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTU1OUJCODdBMUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNFRDA2QUQxMUM3Nzc1NDgwMEZERkFGMSAvKiBKU1NlY3VyaXR5UG9saWN5Vmlv
bGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCREE2NEQ4MUI5NzVDRjIwMDlDNDM4
NyAvKiBKU1NoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEOURFMTdCMTdBQUM3NUIw
MEVBMzg2RCAvKiBKU1NvdXJjZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTIwMyw2ICsy
OTIxMCw3IEBACiAJCQkJQjI3NTM1NjYwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQ0YzMzI0MEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBQkE3NkM5MTFEMjBFNDcwMDRDMjAxQyAvKiBDb2xvckRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTU5QkI4NzkxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdl
RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzI5OTM1RDE3QTFERDU4MDBCQ0U4ODAg
LyogQ29sb3JJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDNFREQ2N0UxQjQ4
NURCRjAwNjQwRTc1IC8qIENvbWJpbmVkRmlsdGVyc0FscGhhYmV0LmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5kZXggZjM3
ODc1MjFkZGZmZjY4MmJkODhlNjQ3MmNhZjA2MjVlM2YwNDU0NC4uOWExNDc1Nzg4MzdmY2RlMTMx
MGQxYWQxMDYyMmI3YmI3MDY4NGFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkSW1hZ2UuY3BwCkBAIC0yNzgsNyArMjc4LDcgQEAgTGF5b3V0U2l6ZSBDYWNoZWRJbWFn
ZTo6aW1hZ2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxv
YXQKICAgICBpZiAocmVuZGVyZXIgJiYgaXM8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKSkgewogICAg
ICAgICBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gb3JpZW50YXRpb25EZXNjcmlwdGlvbihy
ZW5kZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSwgcmVuZGVyZXItPnN0eWxl
KCkuaW1hZ2VPcmllbnRhdGlvbigpKTsKICAgICAgICAgaWYgKG9yaWVudGF0aW9uRGVzY3JpcHRp
b24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikK
LSAgICAgICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+
KCptX2ltYWdlKS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKG9yaWVudGF0aW9uRGVzY3JpcHRp
b24pKTsKKyAgICAgICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUoZG93bmNhc3Q8Qml0bWFw
SW1hZ2U+KCptX2ltYWdlKS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkpOwogICAgIH0KICNl
bHNlCiAgICAgaWYgKGlzPEJpdG1hcEltYWdlPigqbV9pbWFnZSkgJiYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1v
cnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3Bw
CmluZGV4IDk5OTQ2NWVhMzkwNjk3Y2JlMDBmZTZmYTg4MzhjMTM4ZTU0NDdhMTcuLjg0NmMwZGM5
Mzg0ZTc1ZGJhMDgyMGMyODBmYjY0MWNlOGEwOGYxNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApAQCAtMjI1LDggKzIyNSw2IEBAIGJvb2wgTWVtb3J5
Q2FjaGU6OmFkZEltYWdlVG9DYWNoZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwgY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkSW1hZ2U+IGNhY2hlZElt
YWdlID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRJbWFnZT4odXJsLCBiaXRtYXBJbWFnZS5nZXQo
KSwgQ2FjaGVkSW1hZ2U6Ok1hbnVhbGx5Q2FjaGVkLCBzZXNzaW9uSUQpOwogCi0gICAgLy8gQWN0
dWFsIHJlbGVhc2Ugb2YgdGhlIENHSW1hZ2VSZWYgaXMgZG9uZSBpbiBCaXRtYXBJbWFnZS4KLSAg
ICBDRlJldGFpbihpbWFnZSk7CiAgICAgY2FjaGVkSW1hZ2UtPmFkZENsaWVudCgmZHVtbXlDYWNo
ZWRJbWFnZUNsaWVudCgpKTsKICAgICBjYWNoZWRJbWFnZS0+c2V0RGVjb2RlZFNpemUoYml0bWFw
SW1hZ2UtPmRlY29kZWRTaXplKCkpOwogI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggZmFmMGY4Njk2MmMzZmI2NTc3NzQ1YmZhZjc1YjRjODRkODBjYzA2MC4uOTY0MGVlMmIzODQy
ZjdjMmNkMDYwMGI0MDY5YThlMTc1MzNhMDVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNDcsOSArNDcsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9taW5pbXVtU3Vic2FtcGxp
bmdMZXZlbCgwKQotICAgICwgbV9pbWFnZU9yaWVudGF0aW9uKE9yaWdpblRvcExlZnQpCi0gICAg
LCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKGZhbHNlKQogICAgICwgbV9jdXJyZW50
RnJhbWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwg
bV9yZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikKQEAgLTk2LDcgKzkzLDcgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6c3RhcnRUaW1lcihkb3VibGUgZGVsYXkpCiAgICAgbV9mcmFtZVRpbWVyLT5z
dGFydE9uZVNob3QoZGVsYXkpOwogfQogCi1ib29sIEJpdG1hcEltYWdlOjpoYXZlRnJhbWVBdElu
ZGV4KHNpemVfdCBpbmRleCkKK2Jvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA0LDcgKzEwMSw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6Omhh
dmVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5z
aXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKQEAgLTE4NCw5
ICsxODEsOSBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgICAgICBtX2ZyYW1lcy5ncm93
KG51bUZyYW1lcyk7CiAKICAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFBbmRG
cmFtZSkgewotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0
ZUZyYW1lQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgIG1fZnJhbWVz
W2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgs
IHN1YnNhbXBsaW5nTGV2ZWwpOwogICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGlu
Z0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICAgICAgaWYgKG51bUZyYW1lcyA9PSAxICYm
IG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgICAgICBpZiAobnVtRnJhbWVzID09IDEgJiYg
bV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCiAgICAgICAgICAgICBjaGVja0ZvclNvbGlkQ29sb3Io
KTsKICAgICB9CiAKQEAgLTIwNCw3ICsyMDEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZy
YW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQog
ICAgIGlmICghc3Vic2FtcGxpbmdMZXZlbCAmJiBmcmFtZVNpemUgIT0gbV9zaXplKQogICAgICAg
ICBtX2hhc1VuaWZvcm1GcmFtZVNpemUgPSBmYWxzZTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZSkgeworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkgewogICAgICAg
ICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVC
eXRlcyk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gZGVsdGFCeXRlczsKICAgICAgICAgLy8g
VGhlIGZ1bGx5LWRlY29kZWQgZnJhbWUgd2lsbCBzdWJzdW1lIHRoZSBwYXJ0aWFsbHkgZGVjb2Rl
ZCBkYXRhIHVzZWQKQEAgLTIzNiwxNiArMjMzLDEzIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRpZERl
Y29kZVByb3BlcnRpZXMoKSBjb25zdAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRT
aXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6dXBk
YXRlU2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0Cit2
b2lkIEJpdG1hcEltYWdlOjp1cGRhdGVTaXplKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2l6ZUF2
YWlsYWJsZSB8fCBtX2hhdmVTaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3NpemUgPSBt
X3NvdXJjZS5zaXplKGRlc2NyaXB0aW9uKTsKLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24gPSBtX3NvdXJjZS5zaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbiwgZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKSk7Ci0KLSAgICBt
X2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRpb24uaW1h
Z2VPcmllbnRhdGlvbigpKTsKLSAgICBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KCkpOworICAgIG1fc2l6ZSA9IG1fc291cmNlLnNpemUoKTsKKyAgICBtX3NpemVSZXNwZWN0aW5n
T3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7CiAKICAg
ICBtX2hhdmVTaXplID0gdHJ1ZTsKIApAQCAtMjU5LDkgKzI1Myw5IEBAIEZsb2F0U2l6ZSBCaXRt
YXBJbWFnZTo6c2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAotSW50U2l6ZSBC
aXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEJpdG1hcEltYWdlOjpzaXplUmVz
cGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICB1cGRhdGVTaXplKGRlc2NyaXB0aW9u
KTsKKyAgICB1cGRhdGVTaXplKCk7CiAgICAgcmV0dXJuIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbjsKIH0KIApAQCAtMzc5LDIzICszNzMsMjMgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZW5zdXJl
RnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZyYW1lQ2FjaGkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUo
KQotICAgICAgICB8fCAoZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFBbmRGcmFtZSAmJiAh
bV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2Fj
aGVNZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKICAgICAgICAg
fHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhd
Lm1faGF2ZU1ldGFkYXRhKSkKICAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNo
aW5nKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFw
SW1hZ2U6OmZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxl
SGludCkKK1Bhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhpbnQpCiB7CiAgICAgaWYgKGlu
ZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBzdGQ6Om1pbihtX3NvdXJjZS5zdWJzYW1w
bGluZ0xldmVsRm9yU2NhbGUocHJlc2VudGF0aW9uU2NhbGVIaW50KSwgbV9taW5pbXVtU3Vic2Ft
cGxpbmdMZXZlbCk7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gbV9z
b3VyY2Uuc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKHByZXNlbnRhdGlvblNjYWxlSGludCwgbV9t
YXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7CiAKICAgICAvLyBXZSBtYXkgaGF2ZSBjYWNoZWQgYSBm
cmFtZSB3aXRoIGEgaGlnaGVyIHN1YnNhbXBsaW5nIGxldmVsLCBpbiB3aGljaCBjYXNlIHdlIG5l
ZWQgdG8KICAgICAvLyByZS1kZWNvZGUgd2l0aCBhIGxvd2VyIGxldmVsLgotICAgIGlmIChpbmRl
eCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSAmJiBzdWJzYW1w
bGluZ0xldmVsIDwgbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkgeworICAgIGlm
IChpbmRleCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSAmJiBz
dWJzYW1wbGluZ0xldmVsIDwgbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkgewog
ICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYWxyZWFkeSBjYWNoZWQsIGJ1dCBhdCB0b28gc21h
bGwgYSBzaXplLCByZS1kZWNvZGUgYSBsYXJnZXIgdmVyc2lvbi4KICAgICAgICAgaW50IHNpemVD
aGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlczsKICAgICAgICAgbV9mcmFtZXNb
aW5kZXhdLmNsZWFyKHRydWUpOwpAQCAtNDA2LDEwICs0MDAsMTAgQEAgUGFzc05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVzZW50
YXRpb25TY2EKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQgYSBmcmFtZSB5
ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVz
W2luZGV4XS5tX2ZyYW1lKQorICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1f
ZnJhbWVzW2luZGV4XS5tX2ltYWdlKQogICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJzYW1w
bGluZ0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOwogCi0gICAgcmV0dXJuIG1fZnJhbWVz
W2luZGV4XS5tX2ZyYW1lOworICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKIH0K
IAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgp
CkBAIC00MzAsNyArNDI0LDcgQEAgZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCBpbmRleCkKIAogUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lQXRJbmRleChjdXJy
ZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KGN1cnJlbnRGcmFtZSgp
KTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQpAQCAtNzE0LDkgKzcwOCw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVh
bSYgdHMpIGNvbnN0CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3ctc3Vic2FtcGxpbmci
LCBhbGxvd1N1YnNhbXBsaW5nKCkpOwogICAgIGlmIChtX2lzU29saWRDb2xvcikKICAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJzb2xpZC1jb2xvciIsIG1faXNTb2xpZENvbG9yKTsKLSAgICAKLSAg
ICBpZiAobV9pbWFnZU9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBtX2ltYWdlT3JpZW50YXRpb24pOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAppbmRleCA3
NDkzYzZhNGJmYjg2M2Q5NzYzN2M0OWM0NjRjYzM3YWU3OGUwYTA0Li43NjlhZjFhZjEyMmIwZTVl
N2RiY2JiZTliZDA3MjBmNzQ2ODFhZWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTQ3LDE2ICs0Nyw2IEBAIHR5cGVkZWYgc3RydWN0
IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
c3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0gICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1lRGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xh
c3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Jbml0aWFsaXpl
V2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZyYW1lRGF0YSBtZW1iZXJzIGluaXRpYWxp
emUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVy
OwogCkBAIC02NSwxNyArNTUsOCBAQCBjbGFzcyBUaW1lcjsKIC8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBzdHJ1Y3QgRnJhbWVEYXRhIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmFtZURhdGEpOwogcHVibGljOgogICAgIEZyYW1lRGF0
YSgpCi0gICAgICAgIDogbV9mcmFtZSgwKQotICAgICAgICAsIG1fb3JpZW50YXRpb24oRGVmYXVs
dEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgICwgbV9zdWJzYW1wbGluZ0xldmVsKDApCi0gICAg
ICAgICwgbV9kdXJhdGlvbigwKQotICAgICAgICAsIG1faGF2ZU1ldGFkYXRhKGZhbHNlKQotICAg
ICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpIAot
ICAgICAgICAsIG1fZnJhbWVCeXRlcygwKQogICAgIHsKICAgICB9CiAKQEAgLTg0LDE4ICs2NSwy
MiBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyKHRydWUpOwogICAgIH0KIAotICAgIC8vIENsZWFy
IHRoZSBjYWNoZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhl
IG1ldGFkYXRhLgotICAgIC8vIFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdl
IGRhdGEgdG8gY2xlYXIuCiAgICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbV9mcmFtZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50
YXRpb247Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWw7Ci0gICAgZmxv
YXQgbV9kdXJhdGlvbjsKLSAgICBib29sIG1faGF2ZU1ldGFkYXRhIDogMTsKLSAgICBib29sIG1f
aXNDb21wbGV0ZSA6IDE7Ci0gICAgYm9vbCBtX2hhc0FscGhhIDogMTsKLSAgICB1bnNpZ25lZCBt
X2ZyYW1lQnl0ZXM7CisgICAgT3B0aW9uYWw8Q29sb3I+IHNvbGlkQ29sb3IoKSBjb25zdDsKKwor
ICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVu
dGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKKyAgICBTdWJzYW1wbGluZ0xldmVs
IG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKKyAgICBmbG9hdCBtX2R1cmF0aW9uIHsgMCB9Owor
ICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGJvb2wgbV9oYXZlTWV0
YWRhdGEgOiAxOworICAgICAgICAgICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOworICAgICAgICAg
ICAgYm9vbCBtX2hhc0FscGhhIDogMTsKKyAgICAgICAgfTsKKyAgICAgICAgdWludDhfdCBtX2Zs
YWdzW3NpemVvZihib29sKV0geyAwIH07CisgICAgfTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lQnl0
ZXMgeyAwIH07CiB9OwogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkBAIC0xMjUsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgLy8gRmxvYXRT
aXplIGR1ZSB0byBvdmVycmlkZS4KICAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkgY29uc3Q7CisgICAg
SW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3Q7CiAKICAgICBib29sIGdl
dEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTg5LDcgKzE3NCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCB1cGRhdGVTaXplKEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyAg
ICB2b2lkIHVwZGF0ZVNpemUoKSBjb25zdDsKICAgICB2b2lkIGRldGVybWluZU1pbmltdW1TdWJz
YW1wbGluZ0xldmVsKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKQEAgLTIxNCwxMCArMTk5LDEwIEBA
IHByb3RlY3RlZDoKIAogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKLSAgICBQYXNzTmF0aXZl
SW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50
ID0gMSk7Ci0gICAgUGFzc05hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleChz
aXplX3QpOworICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3Qs
IGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOworICAgIFBhc3NOYXRpdmVJbWFnZVB0
ciBjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCi0gICAgYm9vbCBoYXZl
RnJhbWVBdEluZGV4KHNpemVfdCk7CisgICAgYm9vbCBoYXZlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90KTsKIAogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOwogICAgIGZs
b2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CkBAIC0yOTcsMTAgKzI4Miw3IEBAIHBy
aXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsgLy8gVGhlIHNpemUgdG8gdXNlIGZv
ciB0aGUgb3ZlcmFsbCBpbWFnZSAod2lsbCBqdXN0IGJlIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBp
bWFnZSkuCiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsK
IAotICAgIG11dGFibGUgU3Vic2FtcGxpbmdMZXZlbCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVs
OwotCi0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX2ltYWdlT3JpZW50YXRpb24gOiA0OyAvLyBJbWFn
ZU9yaWVudGF0aW9uRW51bQotICAgIG11dGFibGUgdW5zaWduZWQgbV9zaG91bGRSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbiA6IDE7IC8vIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bQorICAgIG11
dGFibGUgU3Vic2FtcGxpbmdMZXZlbCBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsIHsgMCB9Owog
CiAgICAgc2l6ZV90IG1fY3VycmVudEZyYW1lOyAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQg
ZnJhbWUgb2YgYW5pbWF0aW9uLgogICAgIFZlY3RvcjxGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAv
LyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZl
IHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSWNvbi5oCmluZGV4IGQ5NWU3ZGViODEwZmMyNGY3ZjYxYjFiMjNhNGI5
YWVmM2YzYzE3YjcuLjI4YzEzN2QyOWIxMThhOWNmMWI2MTYxZWRlNGRlNDkxZDA0ODgzMDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKQEAgLTY4LDggKzY4LDggQEAg
cHVibGljOgogCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKElPUykKLSAgICBJY29uKENHSW1hZ2VS
ZWYpOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7CisgICAgSWNvbihOYXRp
dmVJbWFnZVB0cik7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9jZ0ltYWdlOwogI2VsaWYgUExBVEZP
Uk0oTUFDKQogICAgIEljb24oTlNJbWFnZSopOwogICAgIFJldGFpblB0cjxOU0ltYWdlPiBtX25z
SW1hZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKaW5kZXggNzRlZjA1M2EzMzNmZjVmYzU3OGU4MTgwMGNjNmZjOTc1NWVmYmFiOC4uZjgx
OWNhYjcxOGFkODk2OTUwZjhlMGZiMjMxZDUyNGQ5MDAwODQ2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtNjgsMTEgKzY4LDYg
QEAgdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJC
ZWZvcmVGcmFtZSwgU2hhcmVkQnVmZmVyKgogICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFS
ZWNlaXZlZCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9kZWNvZGVyOwotfQotCiB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7CiAgICAgLy8gTWFrZSB0
aGUgZGVjb2RlciBieSBzbmlmZmluZyB0aGUgYnl0ZXMuCkBAIC05Niw3ICs5MSw3IEBAIFN0cmlu
ZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAogICAgIHJldHVybiBtX2Rl
Y29kZXIgPyBtX2RlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCkgOiBTdHJpbmcoKTsKIH0KIAot
U3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZs
b2F0KSBjb25zdAorU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZl
bEZvclNjYWxlKGZsb2F0LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdAogewogICAgIHJldHVybiAw
OwogfQpAQCAtMTExLDIxICsxMDYsMjUgQEAgYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxh
YmxlKCkKICAgICByZXR1cm4gbV9kZWNvZGVyICYmIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxl
KCk7CiB9CiAKLUludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCwgZGVzY3JpcHRpb24pOwor
ICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDApOworfQorICAgIAorSW50U2l6ZSBJbWFn
ZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb24pOwogfQogCi1J
bnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25z
dAorSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25F
bnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdAogewotICAgIGlmICghbV9k
ZWNvZGVyKQorICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKIAogICAgIEludFNpemUgc2l6ZSA9IG1fZGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRl
eCk7Ci0gICAgaWYgKChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKSAmJiBtX2RlY29kZXItPm9yaWVudGF0aW9uKCkudXNlc1dp
ZHRoQXNIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoc2l6ZS5oZWlnaHQoKSwgc2l6
ZS53aWR0aCgpKTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gbV9kZWNvZGVy
LT5vcmllbnRhdGlvbigpOwogCi0gICAgcmV0dXJuIHNpemU7CisgICAgcmV0dXJuIHNob3VsZFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uICYmIG9yaWVu
dGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBzaXplLnRyYW5zcG9zZWRTaXplKCkgOiBzaXpl
OwogfQogCiBib29sIEltYWdlU291cmNlOjpnZXRIb3RTcG90KEludFBvaW50JiBob3RTcG90KSBj
b25zdApAQCAtMTQ4LDcgKzE0Nyw3IEBAIHNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDog
MDsKIH0KIAotUGFzc05hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsKQorUGFzc05hdGl2ZUltYWdlUHRyIElt
YWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwpCiB7CiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggYWNk
ZDFjZTRjZTMwMGRlODFjOWUwNjJlZWU3NjA3YmY0NzJhNzBhZi4uOTBiNDI5MzYzNjY2NzJjNWZi
NDMzNjdiN2RhY2QzOGI5OWE3MTVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00NiwxOCArNDYsOSBAQCBjbGFzcyBJbnRQb2ludDsK
IGNsYXNzIEludFNpemU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLSNpZiBVU0UoQ0cpCi10eXBl
ZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOwotI2Vsc2UKIGNsYXNz
IEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZURlY29kZXJQ
dHI7Ci0jZW5kaWYKLQotI2lmIFVTRShDRykKLSNkZWZpbmUgTmF0aXZlSW1hZ2VEZWNvZGVyIElt
YWdlRGVjb2RlcgotI2Vsc2UKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlRGVjb2Rl
cjsKLSNlbmRpZgogCiAvLyBSaWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBp
bWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBhbmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5
c3RlbSBhbmQgdGhlIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1p
bmQuCkBAIC0xMTAsNyArMTAxLDcgQEAgcHVibGljOgogICAgIC8vIGRlY29kZWQgZnJhbWVzLgog
ICAgIC8vCiAgICAgLy8gQ2FsbGVycyBzaG91bGQgbm90IGNhbGwgY2xlYXIoZmFsc2UsIG4pIGFu
ZCBzdWJzZXF1ZW50bHkgY2FsbAotICAgIC8vIGNyZWF0ZUZyYW1lQXRJbmRleChtKSB3aXRoIG0g
PCBuLCB1bmxlc3MgdGhleSBmaXJzdCBjYWxsIGNsZWFyKHRydWUpLgorICAgIC8vIGNyZWF0ZUZy
YW1lSW1hZ2VBdEluZGV4KG0pIHdpdGggbSA8IG4sIHVubGVzcyB0aGV5IGZpcnN0IGNhbGwgY2xl
YXIodHJ1ZSkuCiAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgc3RhdGVmdWwgSW1hZ2VTb3VyY2Vz
L2RlY29kZXJzIHdpbGwgd29yayBwcm9wZXJseS4KICAgICAvLwogICAgIC8vIFRoZSB8ZGF0YXwg
YW5kIHxhbGxEYXRhUmVjZWl2ZWR8IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHN1cHBsaWVkIGJ5IGNh
bGxlcnMKQEAgLTEyMiwxOSArMTEzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgIFNoYXJl
ZEJ1ZmZlciogZGF0YSA9IE5VTEwsCiAgICAgICAgICAgICAgICBib29sIGFsbERhdGFSZWNlaXZl
ZCA9IGZhbHNlKTsKIAotICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdDsKKyAgICBib29sIGlu
aXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyOyB9CiAKICAgICB2b2lkIHNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgU3RyaW5n
IGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CiAKLSAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCkgY29uc3Q7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBz
dWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQsIFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Owog
ICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CiAK
ICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogICAgIC8vIEFsd2F5cyBvcmlnaW5hbCBzaXpl
LCB3aXRob3V0IHN1YnNhbXBsaW5nLgotICAgIEludFNpemUgc2l6ZShJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkgY29uc3Q7CisgICAg
SW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0
aW9uKCkgY29uc3Q7CiAgICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1YnNhbXBsZWQgZnJhbWUu
Ci0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IDAsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbigpKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7CiAKICAgICBib29sIGdldEhvdFNwb3QoSW50UG9p
bnQmKSBjb25zdDsKIApAQCAtMTQ2LDcgKzEzOCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENhbGxl
cnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGggYSBoaWdo
ZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCi0gICAgUGFz
c05hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2
ZWwgPSAwKTsKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgo
c2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCk7CiAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QpOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KTsg
Ly8gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGFjdHVhbGx5IHVzZWQgYW55IGFscGhhLgpAQCAt
MTYzLDcgKzE1NSw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIE5hdGl2ZUlt
YWdlRGVjb2RlclB0ciBtX2RlY29kZXI7CisgICAgdm9pZCBlbnN1cmVEZWNvZGVySXNDcmVhdGVk
KFNoYXJlZEJ1ZmZlciopOworICAgIAorICAgIE5hdGl2ZUltYWdlRGVjb2RlclB0ciBtX2RlY29k
ZXIgeyBudWxscHRyIH07CiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFP
cHRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRp
dmVJbWFnZVB0ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1h
Z2VQdHIuaAppbmRleCBkZjk0MWE1NjZhOWU0NjkyNzcyN2JhMWVjNjg0OGYyMTY4MDNhNDViLi5l
Y2ExYjkyYzQxZWUxODI4ZTMxMGQ1YmVkYmIyYjVhY2E1OTVmNTQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKQEAgLTI5LDYgKzI5
LDcgQEAKICNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAogCiAjaWYgVVNFKENHKQorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KIHR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAj
ZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKQEAgLTQxLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gRklYTUU6IE5hdGl2ZUltYWdlUHRyIGFuZCBQYXNz
TmF0aXZlSW1hZ2VQdHIgc2hvdWxkIGJlIHNtYXJ0CiAvLyBwb2ludGVycyAoc2VlIFNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKS4KICNpZiBVU0UoQ0cpCi10eXBlZGVmIENH
SW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7Cit0eXBlZGVmIFJldGFpblB0cjxDR0ltYWdlUmVmPiBO
YXRpdmVJbWFnZVB0cjsKICNlbGlmIFVTRShDQUlSTykKIHR5cGVkZWYgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gTmF0aXZlSW1hZ2VQdHI7CiB0eXBlZGVmIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBQYXNzTmF0aXZlSW1hZ2VQdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA2M2RjZjBhMjUzZTIz
NDBmNjdmMWM4MWQ4NWZjMjcwZGQyMzBlODZkLi5hNGM2NWJkZmYzMmE5MmY5YzFkZjI2ZDRiZjUz
MDgwZjA1YWI5NjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTEwMzcsNyArMTAzNyw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29s
b3IpCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFn
ZSkKIHsKICAgICBpZiAoaW1hZ2UpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBuZXdJbWFnZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBDR0ltYWdlUmVmIG5l
d0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkuZ2V0KCk7CiAgICAg
ICAgIGlmICghbmV3SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWly
by5jcHAKaW5kZXggY2Q1N2VlNDg1ZWE4MGM2Y2YzNDdhYjNiZDk3MzdkNTk5OWUxMDI4Mi4uYTNm
NWM3ZGE5OTc1NjkzZjE5ZTU3NTNmYmQ4NzE3YzRkZjFmMzdiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWly
by5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFBhc3NSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlcioKIHsKICAgICBt
X2ZyYW1lcy5ncm93KDEpOwogICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBjYWlyb19zdXJm
YWNlX2dldF9jb250ZW50KG5hdGl2ZUltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9S
OwotICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSBuYXRpdmVJbWFnZTsKKyAgICBtX2ZyYW1lc1sw
XS5tX2ltYWdlID0gbmF0aXZlSW1hZ2U7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEg
PSB0cnVlOwogCiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CkBAIC03Miw3ICs3Miw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdCwgY29uc3QgRmxvCiAKICAgICBzdGFydEFuaW1hdGlvbigpOwogCi0gICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdElu
ZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVh
cmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKQEAgLTEz
NSw3ICsxMzUsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAg
IGlmIChmcmFtZUNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKKyAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9j
dXJyZW50RnJhbWUpOwogICAgIGlmICghc3VyZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ug
d29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKIApAQCAtMTU4LDggKzE1
OCw4IEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCiAgICAgaWYg
KGNsZWFyTWV0YWRhdGEpCiAgICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7CiAKLSAgICBp
ZiAobV9mcmFtZSkgewotICAgICAgICBtX2ZyYW1lID0gbnVsbHB0cjsKKyAgICBpZiAobV9pbWFn
ZSkgeworICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAK
aW5kZXggY2M3MDQ2MTQ3YWU4MWYxZmFkYWE2ZDg0MTYyNDk4MGM2ZmRmY2JmMS4uOGM0MTg2ZDcx
ZTUzYTE5MDdlOTJkNzNhMmIwMTY0N2ZmZDY2YjFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RDYWlyby5jcHAKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJ
bWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAog
ICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAg
aWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdElu
ZGV4KDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2ltYWdlU3VyZmFj
ZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApOworICAgICAgICBtX2ltYWdlU3VyZmFj
ZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwogICAgICAgICAvLyAxLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVudCBp
bnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQgdGhl
IGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVhY2ggcGl4ZWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmluZGV4IDAxYjdk
NjkyY2RiZDdhYjRkMjJiYmMxMzk5YzEwMzI4ZjU3ZTVlNDcuLmNjN2VjZDg2MzVhZWM4NzcwZDcw
MTM0MmQyMGNmMDZkNjZmZGFlYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCkBAIC01OCwyMiArNTgsMTggQEAgYm9v
bCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKICAgICBtX29yaWVudGF0aW9u
ID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247CiAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gMDsK
IAotICAgIGlmIChtX2ZyYW1lKSB7CisgICAgaWYgKG1faW1hZ2UpIHsKICNpZiBDQUNIRV9TVUJJ
TUFHRVMKLSAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9mcmFtZSk7CisgICAg
ICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwogI2VuZGlmCi0g
ICAgICAgIENHSW1hZ2VSZWxlYXNlKG1fZnJhbWUpOwotICAgICAgICBtX2ZyYW1lID0gMDsKKyAg
ICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVm
IGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQorQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKE5hdGl2ZUltYWdlUHRyIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6
IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgwKQotICAg
ICwgbV9pbWFnZU9yaWVudGF0aW9uKE9yaWdpblRvcExlZnQpCi0gICAgLCBtX3Nob3VsZFJlc3Bl
Y3RJbWFnZU9yaWVudGF0aW9uKGZhbHNlKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAs
IG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0aW9uQ291
bnRTdGF0dXMoVW5rbm93bikKQEAgLTg5LDggKzg1LDggQEAgQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBt
X3NpemVBdmFpbGFibGUodHJ1ZSkKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKIHsKLSAg
ICBDR0Zsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwotICAgIENHRmxvYXQg
aGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKKyAgICBDR0Zsb2F0IHdpZHRoID0g
Q0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKTsKKyAgICBDR0Zsb2F0IGhlaWdodCA9IENHSW1h
Z2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOwogICAgIG1fZGVjb2RlZFNpemUgPSB3aWR0aCAqIGhl
aWdodCAqIDQ7CiAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKIApAQCAtOTks
NyArOTUsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24g
PSBtX3NpemU7CiAKICAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBdLm1fZnJh
bWUgPSBDR0ltYWdlUmV0YWluKGNnSW1hZ2UpOworICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBp
bWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1ZTsKICAgICBtX2ZyYW1lc1sw
XS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKQEAgLTEyNSw3ICsxMjEsNyBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0CiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsID0gY3Vy
cmVudExldmVsOworICAgIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBjdXJyZW50TGV2ZWw7
CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCkBAIC0xMzYsNyAr
MTMyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICBpZiAo
ZnJhbWVDb3VudCgpID4gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFoYXZlRnJhbWVB
dEluZGV4KDApKSB7CisgICAgaWYgKCFoYXZlRnJhbWVJbWFnZUF0SW5kZXgoMCkpIHsKICAgICAg
ICAgSW50U2l6ZSBzaXplID0gbV9zb3VyY2UuZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKICAgICAg
ICAgaWYgKHNpemUud2lkdGgoKSAhPSAxIHx8IHNpemUuaGVpZ2h0KCkgIT0gMSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE0Nyw3ICsxNDMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IoKQogCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IG51bGxwdHI7CiAgICAgaWYg
KG1fZnJhbWVzLnNpemUoKSkKLSAgICAgICAgaW1hZ2UgPSBtX2ZyYW1lc1swXS5tX2ZyYW1lOwor
ICAgICAgICBpbWFnZSA9IG1fZnJhbWVzWzBdLm1faW1hZ2UuZ2V0KCk7CiAKICAgICBpZiAoIWlt
YWdlKQogICAgICAgICByZXR1cm47CkBAIC0xNzMsMTYgKzE2OSwxNiBAQCB2b2lkIEJpdG1hcElt
YWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogCiBDR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRD
R0ltYWdlUmVmKCkKIHsKLSAgICByZXR1cm4gZnJhbWVBdEluZGV4KDApOworICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleCgwKS5nZXQoKTsKIH0KIAogQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6
Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgc2l6
ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUF0SW5kZXgoaSk7
Ci0gICAgICAgIGlmIChjZ0ltYWdlICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2Up
LCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJu
IGNnSW1hZ2U7CisgICAgICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IGZyYW1lSW1hZ2VB
dEluZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSkgPT0gc2l6ZSkKKyAg
ICAgICAgICAgIHJldHVybiBpbWFnZS5nZXQoKTsKICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0
byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUK
QEAgLTE5Nyw4ICsxOTMsOCBAQCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6Omdl
dENHSW1hZ2VBcnJheSgpCiAgICAgCiAgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFy
cmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0lt
YWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lQXRJbmRleChpKSkKLSAgICAgICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lKTsKKyAgICAgICAgaWYgKE5hdGl2ZUltYWdlUHRy
IGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgQ0ZBcnJheUFw
cGVuZFZhbHVlKGFycmF5LCBjdXJyRnJhbWUuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gYWRv
cHRDRihhcnJheSk7CiB9CkBAIC0yMTEsMTUgKzIwNywxNSBAQCB2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRgogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAjZW5kaWYKIAotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKICAgICAvLyBOZXZlciB1
c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCiAgICAg
aWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoY29weVVuc2NhbGVkRnJhbWVBdEluZGV4KG1fY3VycmVudEZy
YW1lKSk7CisgICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgobV9j
dXJyZW50RnJhbWUpOwogICAgIGVsc2UgewogICAgICAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0
aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250
ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKICAgICAgICAgZmxvYXQgc3Vic2Ft
cGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3Rp
bmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3Rp
bmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKIAotICAgICAgICBp
bWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Cisg
ICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBs
aW5nU2NhbGUpOwogICAgIH0KIAogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5
IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgpAQCAtMjUxLDE4ICsyNDcsMTggQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEYKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMp
OwogfQogCi1QYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1l
QXRJbmRleChzaXplX3QgaW5kZXgpCitQYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmNv
cHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChp
bmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAg
IGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdl
KQogICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKIAogICAgIGlmICghbV9mcmFtZXNbaW5k
ZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIENHSW1hZ2VSZXRhaW4obV9m
cmFtZXNbaW5kZXhdLm1fZnJhbWUpOworICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1f
aW1hZ2U7CiAKLSAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KTsK
KyAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCmluZGV4IDZjMDNhMmNlZjg0NjA2NTYxZWEwN2ViOTI4
ZjFjZjI5NWY5ZjVlMzYuLjdhMTNiYjU4NDY3MDhkMzdlMDJiZDNkZDY3MjNjMjdhNDk1MTc2YzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dDNEQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCkBAIC0zMzMsMTAgKzMzMywxMCBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbAogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fZGVjb2RlZEltYWdlID0gYWRvcHRDRihk
ZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CisgICAgICAgIG1fZGVjb2RlZEltYWdlID0g
ZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKICAgICAgICAgbV9jZ0ltYWdlID0g
bV9kZWNvZGVkSW1hZ2UuZ2V0KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY2dJbWFnZSA9IG1f
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIG1fY2dJbWFnZSA9
IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkuZ2V0KCk7CiAgICAgaWYgKCFt
X2NnSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTM2LDcgKzUzNiw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciog
aW1hZ2VQaXhlbHMsIGludCBpbWFnCiAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEp
KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtaW1hZ2VIZWlnaHQpOwogICAgIGNvbnRleHQu
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTm9uZSk7Ci0gICAgY29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoY2dJbWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBjYW52YXNSZWN0
LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZVNpemUpLCBDb21wb3NpdGVDb3B5KTsKKyAg
ICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjZ0ltYWdlLCBpbWFnZVNpemUsIGNhbnZhc1JlY3Qs
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSksIENvbXBvc2l0ZUNvcHkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggYTQ0OTY1NDA0
NmFlOGYxMGFiYWQxNjQxNWU2NDYwYWRiYmJiOGU4OC4uMTYyMDlhZjUzNDQ4MWRiNGNkZGQ4YjQy
M2NlN2JmMmE0MGIwZGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMzExLDggKzMxMSw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgZmxvYXQgYWRqdXN0ZWRYID0gcGhhc2UueCgp
IC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChw
YXR0ZXJuVHJhbnNmb3JtLmEoKSk7IC8vIFdlIHRyYW5zbGF0ZWQgdGhlIGNvbnRleHQgc28gdGhh
dCBkZXN0UmVjdC54KCkgaXMgdGhlIG9yaWdpbiwgc28gc3VidHJhY3QgaXQgb3V0LgogICAgIGZs
b2F0IGFkanVzdGVkWSA9IGRlc3RSZWN0LmhlaWdodCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0
LnkoKSArIHRpbGVSZWN0LnkoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5z
Zm9ybS5kKCkpICsgc2NhbGVkVGlsZUhlaWdodCk7CiAKLSAgICBDR0ltYWdlUmVmIHRpbGVJbWFn
ZSA9IGltYWdlLm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgZmxvYXQgaCA9IENH
SW1hZ2VHZXRIZWlnaHQodGlsZUltYWdlKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gdGls
ZUltYWdlID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBmbG9hdCBo
ID0gQ0dJbWFnZUdldEhlaWdodCh0aWxlSW1hZ2UuZ2V0KCkpOwogCiAgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IHN1YkltYWdlOwogI2lmIFBMQVRGT1JNKElPUykKQEAgLTMyNiwxMyArMzI2LDEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgICAgIC8vIENvcHlpbmcgYSBzdWItaW1h
Z2Ugb3V0IG9mIGEgcGFydGlhbGx5LWRlY29kZWQgaW1hZ2Ugc3RvcHMgdGhlIGRlY29kaW5nIG9m
IHRoZSBvcmlnaW5hbCBpbWFnZS4gSXQgc2hvdWxkIG5ldmVyIGhhcHBlbgogICAgICAgICAvLyBi
ZWNhdXNlIHN1Yi1pbWFnZXMgYXJlIG9ubHkgdXNlZCBmb3IgYm9yZGVyLWltYWdlLCB3aGljaCBv
bmx5IHJlbmRlcnMgd2hlbiB0aGUgaW1hZ2UgaXMgZnVsbHkgZGVjb2RlZC4KICAgICAgICAgQVNT
RVJUKGggPT0gaW1hZ2UuaGVpZ2h0KCkpOwotICAgICAgICBzdWJJbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdCh0aWxlSW1hZ2UsIHRpbGVSZWN0KSk7CisgICAgICAg
IHN1YkltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KHRpbGVJbWFn
ZS5nZXQoKSwgdGlsZVJlY3QpKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBuZWVkIHRvIHBhaW50
IGdhcHMgYmV0d2VlbiB0aWxlcyBiZWNhdXNlIHdlIGhhdmUgYSBwYXJ0aWFsbHkgbG9hZGVkIGlt
YWdlIG9yIG5vbi16ZXJvIHNwYWNpbmcsCiAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBsZXNzIGVm
ZmljaWVudCBDR1BhdHRlcm4tYmFzZWQgbWVjaGFuaXNtLgogICAgIGZsb2F0IHNjYWxlZFRpbGVX
aWR0aCA9IHRpbGVSZWN0LndpZHRoKCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5U
cmFuc2Zvcm0uYSgpKTsKLSAgICBmbG9hdCB3ID0gQ0dJbWFnZUdldFdpZHRoKHRpbGVJbWFnZSk7
CisgICAgZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2UuZ2V0KCkpOwogICAgIGlm
ICh3ID09IGltYWdlLnNpemUoKS53aWR0aCgpICYmIGggPT0gaW1hZ2Uuc2l6ZSgpLmhlaWdodCgp
ICYmICFzcGFjaW5nLndpZHRoKCkgJiYgIXNwYWNpbmcuaGVpZ2h0KCkpIHsKICAgICAgICAgLy8g
RklYTUU6IENHIHNlZW1zIHRvIHNuYXAgdGhlIGltYWdlcyB0byBpbnRlZ3JhbCBzaXplcy4gV2hl
biB3ZSBjYXJlIChlLmcuIHdpdGggYm9yZGVyLWltYWdlLXJlcGVhdDogcm91bmQpLAogICAgICAg
ICAvLyB3ZSBzaG91bGQgdGlsZSBhbGwgYnV0IHRoZSBsYXN0LCBhbmQgc3RldGNoIHRoZSBsYXN0
IGltYWdlIHRvIGZpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZURlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNWFjNGFmMTMwMWU0YjViMWM3MjI2
YTU1OWYyZjM5M2VkOGI0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwCkBAIC0wLDAgKzEsNDEzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVk
ZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmICFQTEFURk9STShJT1MpCisjaW5jbHVkZSA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQorI2luY2x1ZGUgPElt
YWdlSU8vSW1hZ2VJTy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNlbmRpZgorCisj
aWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNpbXBvcnQgPEltYWdlSU8vQ0dJbWFnZVNvdXJj
ZVByaXZhdGUuaD4KKyNlbHNlCitjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVN1YnNh
bXBsZUZhY3RvciA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciIpOworY29u
c3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZUltbWVkaWF0ZWx5ID0gQ0ZT
VFIoImtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGVJbW1lZGlhdGVseSIpOworI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdl
UHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lID0gQ0ZTVFIoIlVuY2xhbXBlZERlbGF5VGlt
ZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRp
bWUgPSBDRlNUUigiRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFn
ZVByb3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RSKCJMb29wQ291bnQiKTsKKworY29uc3QgQ0ZT
dHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFn
ZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7Citjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNv
dXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOwor
CitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRp
b25zKFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgRGVjb2RlTW9kZSBkZWNvZGVN
b2RlKQoreworICAgIGNvbnN0IENGSW5kZXggYmFzaWNPcHRpb25zID0gMzsKKyAgICBjb25zdCB2
b2lkKiBrZXlzW2Jhc2ljT3B0aW9ucyArIDJdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hl
LCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRh
ZGF0YSB9OworICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tiYXNpY09wdGlvbnMgKyAyXSA9IHsga0NG
Qm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9OworICAgIENGSW5k
ZXggbnVtT3B0aW9ucyA9IGJhc2ljT3B0aW9uczsKKyAgICAKKyAgICBpZiAoc3Vic2FtcGxpbmdM
ZXZlbCA+IDApIHsKKyAgICAgICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVsID0g
c3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1wbGluZ0xldmVsKSk7
CisgICAgICAgIGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IGNvbnN0cmFpbmVkU3Vic2FtcGxpbmdM
ZXZlbDsgLy8gWzAuLjNdID0+IFsxLCAyLCA0LCA4XQorICAgICAgICBSZXRhaW5QdHI8Q0ZOdW1i
ZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwg
IGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7CisgICAgICAgIAorICAgICAgICBr
ZXlzW251bU9wdGlvbnNdID0ga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3I7CisgICAgICAg
IHZhbHVlc1tudW1PcHRpb25zKytdID0ga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3I7Cisg
ICAgfQorICAgIAorICAgIGlmIChkZWNvZGVNb2RlID09IERlY29kZU1vZGU6OkltbWVkaWF0ZSkg
eworICAgICAgICBrZXlzW251bU9wdGlvbnNdID0ga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZUlt
bWVkaWF0ZWx5OworICAgICAgICB2YWx1ZXNbbnVtT3B0aW9ucysrXSA9IGtDRkJvb2xlYW5UcnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUobnVs
bHB0ciwga2V5cywgdmFsdWVzLCBudW1PcHRpb25zLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gMCwgRGVjb2RlTW9kZSBkZWNvZGVNb2RlID0gRGVjb2Rl
TW9kZTo6TGF6eSkKK3sKKyAgICBpZiAoc3Vic2FtcGxpbmdMZXZlbCB8fCBkZWNvZGVNb2RlID09
IERlY29kZU1vZGU6OkltbWVkaWF0ZSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlU291cmNl
T3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGVNb2RlKTsKKyAgICAKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IG9wdGlvbnMgPSBjcmVh
dGVJbWFnZVNvdXJjZU9wdGlvbnMoMCwgRGVjb2RlTW9kZTo6TGF6eSk7CisgICAgcmV0dXJuIG9w
dGlvbnM7Cit9CisKK3N0YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRnJvbVByb3Bl
cnRpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllcykKK3sKKyAgICBBU1NFUlQoaW1h
Z2VQcm9wZXJ0aWVzKTsKKyAgICBDRk51bWJlclJlZiBvcmllbnRhdGlvblByb3BlcnR5ID0gKENG
TnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdlUHJvcGVydGllcywga0NHSW1hZ2VQ
cm9wZXJ0eU9yaWVudGF0aW9uKTsKKyAgICBpZiAoIW9yaWVudGF0aW9uUHJvcGVydHkpCisgICAg
ICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyAgICAKKyAgICBpbnQgZXhpZlZh
bHVlOworICAgIENGTnVtYmVyR2V0VmFsdWUob3JpZW50YXRpb25Qcm9wZXJ0eSwga0NGTnVtYmVy
SW50VHlwZSwgJmV4aWZWYWx1ZSk7CisgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246OmZyb21F
WElGVmFsdWUoZXhpZlZhbHVlKTsKK30KKyAgICAKKyNpZiAhUExBVEZPUk0oQ09DT0EpCitzaXpl
X3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZl
ciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKK3sKKyAgICBTaGFyZWRCdWZmZXIqIHNo
YXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNpemVf
dCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7CisgICAgaWYgKHBvc2l0aW9uID49
IHNvdXJjZVNpemUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGNvbnN0IGNoYXIqIHNv
dXJjZSA9IHNoYXJlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247CisgICAgc2l6ZV90IGFtb3Vu
dCA9IHN0ZDo6bWluPHNpemVfdD4oY291bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlvbik7CisgICAg
bWVtY3B5KGJ1ZmZlciwgc291cmNlLCBhbW91bnQpOworICAgIHJldHVybiBhbW91bnQ7Cit9CisK
K3ZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQoreworICAgIFNoYXJlZEJ1ZmZl
ciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7CisgICAg
c2hhcmVkQnVmZmVyLT5kZXJlZigpOworfQorI2VuZGlmCisKK0ltYWdlRGVjb2Rlcjo6SW1hZ2VE
ZWNvZGVyKCkKK3sKKyAgICBtX25hdGl2ZURlY29kZXIgPSBDR0ltYWdlU291cmNlQ3JlYXRlSW5j
cmVtZW50YWwoMCk7Cit9CisKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VEZWNvZGVyOjpzdWJzYW1w
bGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2
ZWxzOiAwID0gMXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCisgICAgZmxvYXQg
Y2xhbXBlZFNjYWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwg
c2NhbGUpKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHJlc3VsdCA9IGNlaWxmKGxvZzJmKDEgLyBj
bGFtcGVkU2NhbGUpKTsKKyAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1bHQgPD0gMyk7Cisg
ICAgcmV0dXJuIHN0ZDo6bWluKHJlc3VsdCwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworfQor
CitzaXplX3QgSW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMo
KQoreworICAgIC8vIE1lYXN1cmVkIGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxvYyBjYWxscyBvbiBN
YWMgT1MgMTAuNi42LCB4ODZfNjQuCisgICAgLy8gQSBub24temVybyB2YWx1ZSBlbnN1cmVzIGNh
Y2hlZCBpbWFnZXMgd2l0aCBubyBkZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRlcgorICAgIC8vIHRo
ZSBsaXZlIGRlY29kZWQgcmVzb3VyY2VzIGxpc3Qgd2hlbiB0aGUgQ0dJbWFnZVNvdXJjZSBkZWNv
ZGVzIGltYWdlCisgICAgLy8gcHJvcGVydGllcywgYWxsb3dpbmcgdGhlIGNhY2hlIHRvIHBydW5l
IHRoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZS4KKyAgICAvLyBUaGlzIHZhbHVlIGlzIGxpa2Vs
eSB0byBiZSBpbmFjY3VyYXRlIG9uIG90aGVyIHBsYXRmb3JtcywgYnV0IHRoZSBvdmVyYWxsCisg
ICAgLy8gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLgorICAgIHJldHVybiAxMzA4ODsKK30KKworU3Ry
aW5nIEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAoreworICAgIENGU3Ry
aW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVj
b2Rlcik7CisgICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291
cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6aXNTaXpl
QXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBSYWduYXJvcyB5ZWxsczogVE9PIFNPT04hIFlv
dSBoYXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKKyAgICBpZiAoQ0dJbWFnZVNv
dXJjZUdldFN0YXR1cyhtX25hdGl2ZURlY29kZXIpIDwga0NHSW1hZ2VTdGF0dXNJbmNvbXBsZXRl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0
aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgp
KSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMu
Z2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQorICAgICYmIENGRGljdGlvbmFyeUNv
bnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhl
aWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zaXplID0gZnJhbWVTaXplQXRJbmRleCgw
LCAwKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3QgSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldENvdW50KG1fbmF0
aXZlRGVjb2Rlcik7Cit9CisKK2ludCBJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGNv
bnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1fbmF0aXZlRGVjb2RlciwgaW1hZ2VTb3Vy
Y2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVy
biBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdpZlByb3Bl
cnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMu
Z2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5KTsKKyAgICBpZiAoZ2lmUHJvcGVy
dGllcykgeworICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRkxvb3BDb3VudCk7
CisgICAgICAgIAorICAgICAgICAvLyBObyBwcm9wZXJ0eSBtZWFucyBsb29wIG9uY2UuCisgICAg
ICAgIGlmICghbnVtKQorICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAg
ICAgICAgCisgICAgICAgIGludCBsb29wQ291bnQ7CisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmbG9vcENvdW50KTsKKyAgICAgICAgCisgICAgICAgIC8v
IEEgcHJvcGVydHkgd2l0aCB2YWx1ZSAwIG1lYW5zIGxvb3AgZm9yZXZlci4KKyAgICAgICAgcmV0
dXJuIGxvb3BDb3VudCA/IGxvb3BDb3VudCA6IGNBbmltYXRpb25Mb29wSW5maW5pdGU7CisgICAg
fQorICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFy
eVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3Bl
cnR5UE5HRGljdGlvbmFyeSk7CisgICAgaWYgKHBuZ1Byb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZO
dW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3Bl
cnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50KTsKKyAgICAgICAgaWYg
KCFudW0pCisgICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOworICAgICAgICAK
KyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtD
Rk51bWJlckludFR5cGUsICZsb29wQ291bnQpOworICAgICAgICByZXR1cm4gbG9vcENvdW50ID8g
bG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKKyAgICB9CisgICAgCisgICAgLy8g
VHVybnMgb3V0IHdlJ3JlIG5vdCBhbiBhbmltYXRlZCBpbWFnZSBhZnRlciBhbGwsIHNvIHdlIGRv
bid0IGFuaW1hdGUuCisgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworfQorCitib29sIEltYWdl
RGVjb2Rlcjo6Z2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKK3sKKyAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRp
b25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpbnQgeCA9IC0xLCB5ID0gLTE7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0g
KENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENGU1RS
KCJob3RzcG90WCIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtD
Rk51bWJlckludFR5cGUsICZ4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG51
bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBD
RlNUUigiaG90c3BvdFkiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUobnVt
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoeCA8IDAgfHwgeSA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBo
b3RTcG90ID0gSW50UG9pbnQoeCwgeSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ludFNpemUg
SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0
SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBs
aW5nTGV2ZWwpLmdldCgpKSk7CisgICAgCisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIAorICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGhlaWdodCA9IDA7
CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKKyAgICBpZiAo
bnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndp
ZHRoKTsKKyAgICAKKyAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKKyAgICBpZiAo
bnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhl
aWdodCk7CisgICAgCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKK2Jv
b2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoZnJhbWVDb3VudCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJj
ZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0
dXNDb21wbGV0ZTsKK30KKworSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXI6Om9yaWVudGF0
aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVz
QXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQo
KSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9y
aWVudGF0aW9uOworICAgIAorICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHBy
b3BlcnRpZXMuZ2V0KCkpOworfQorCitmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Cisg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFn
ZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFn
ZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmIChwcm9wZXJ0aWVzKSB7CisgICAgICAg
IENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGljdGlv
bmFyeSk7CisgICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAoQ0ZO
dW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3Bl
cnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUpKSB7CisgICAgICAg
ICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgaXQgZXhpc3RzLgor
ICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUs
ICZkdXJhdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChD
Rk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVBy
b3BlcnR5R0lGRGVsYXlUaW1lKSkgeworICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0
aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMg
bm90IGV4aXN0LgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFy
eVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3Bl
cnR5UE5HRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7CisgICAgICAg
ICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HVW5jbGFtcGVkRGVs
YXlUaW1lKSkKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVy
RmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICAgICAgZWxzZSBpZiAoQ0ZOdW1iZXJSZWYg
bnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdl
YkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lKSkKKyAgICAgICAgICAgICAgICBDRk51
bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1
cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKyAg
ICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAx
MDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5CisgICAgLy8gYSBkdXJhdGlvbiBvZiA8
PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMzYwODI+CisgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgaWYgKGR1cmF0
aW9uIDwgMC4wMTFmKQorICAgICAgICByZXR1cm4gMC4xZjsKKyAgICByZXR1cm4gZHVyYXRpb247
Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgo
c2l6ZV90KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRp
ZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVy
dGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBq
ZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5
KSk7CisgICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGQm9vbGVhblJlZiBpc1By
b2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKKyAg
ICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgeworICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZl
ID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKKyAgICAgICAgICAgIC8vIFdvcmth
cm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkg
bGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKKyAgICAgICAgICAg
IC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRo
aXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCisg
ICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hl
Y2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQx
OD4pCisgICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFmcmFtZUlzQ29t
cGxldGVBdEluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ0ZT
dHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVy
KTsKKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgbm8gaW1hZ2UgdHlwZSBv
ciB0aGUgaW1hZ2UgdHlwZSBpcyBKUEVHLCBiZWNhdXNlCisgICAgLy8gSlBFRyBkb2VzIG5vdCBz
dXBwb3J0IGFscGhhIHRyYW5zcGFyZW5jeS4KKyAgICBpZiAoIWltYWdlVHlwZSB8fCBDRkVxdWFs
KGltYWdlVHlwZSwgQ0ZTVFIoInB1YmxpYy5qcGVnIikpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgLy8gRklYTUU6IENvdWxkIHJldHVybiBmYWxzZSBmb3Igb3RoZXIgbm9uLXRy
YW5zcGFyZW50IGltYWdlIGZvcm1hdHMuCisgICAgLy8gRklYTUU6IENvdWxkIG1heWJlIHJldHVy
biBmYWxzZSBmb3IgYSBHSUYgRnJhbWUgaWYgd2UgaGF2ZSBlbm91Z2ggaW5mbyBpbiB0aGUgR0lG
IHByb3BlcnRpZXMgZGljdGlvbmFyeQorICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5v
dCBhIHRyYW5zcGFyZW50IGNvbG9yIHdhcyBkZWZpbmVkLgorICAgIHJldHVybiB0cnVlOworfQor
Cit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIEludFNpemUg
ZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Cisg
ICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhlaWdodCgpICogNDsKK30K
KworUGFzc05hdGl2ZUltYWdlUHRyIEltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIERlY29k
ZU1vZGUgZGVjb2RlTW9kZSkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9uYXRpdmVEZWNv
ZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwsIGRlY29kZU1v
ZGUpLmdldCgpKSk7CisgICAgICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyA8cmRhcjov
L3Byb2JsZW0vNzM3MTE5OD4gLSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUgZGVmYXVsdCBjYWNo
aW5nIGJlaGF2aW91ciBpbiBpT1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1RyYW5zaWVudAorICAg
IC8vIHdoaWNoIGNhdXNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9yIHVzIHNpbmNlIHRo
ZSBpbWFnZXMgaGFkIHRvIGJlIHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkgdGltZSB3ZSBjYWxs
ZWQKKyAgICAvLyBDR0NvbnRleHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENHIHRvIGNhY2hlIHRo
ZSBkcmF3biBpbWFnZXMuIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2Njc1NT4gLQorICAg
IC8vIENvcmVHcmFwaGljcyBuZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1hZ2VDYWNoaW5nVGVt
cG9yYXJ5IHNpbmNlIGl0J3Mgc3RpbGwgbm90IHRoZSBkZWZhdWx0LgorI2lmIENPTVBJTEVSKENM
QU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorI2VuZGlmCisgICAgICAg
IENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBv
cmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAgIAorICAgIENGU3RyaW5n
UmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyKTsKKyAg
ICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFw
LWltYWdlIik7CisKKyAgICBpZiAoIWltYWdlVVRJKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisK
KyAgICBpZiAoIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVUSSkpCisgICAgICAgIHJldHVybiBpbWFn
ZTsKKworICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFzayBvdXQgYWxsIHRoZSB3aGl0
ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KKyAgICBjb25zdCBDR0Zsb2F0IG1h
c2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwgMjU1LCAyNTV9OworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdp
dGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5nQ29sb3JzKSk7CisgICAgcmV0dXJu
IG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2UgOiBpbWFnZTsKK30KKyAgICAKK3ZvaWQgSW1hZ2VE
ZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
Cit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8gT24gTWFjIHRoZSBOU0RhdGEgaW5zaWRl
IHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRvIHdpdGhvdXQgdGhl
IFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4KKyAgICAvLyBXZSB1c2UgU2hhcmVkQnVmZmVyJ3Mg
YWJpbGl0eSB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBhcm91bmQgdGhpcywg
ZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzCisgICAgLy8gcmVhbGx5IGxvb2tpbmcgYXQgdGhlIFNo
YXJlZEJ1ZmZlci4KKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX25hdGl2ZURlY29kZXIs
IGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UKKyAg
ICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFyZWRCdWZmZXIuCisg
ICAgZGF0YS0+cmVmKCk7CisgICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0UG9zaXRpb24gY2Fs
bGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNhdXNlIFNoYXJlZEJ1
ZmZlcgorICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3duIHRoZSBieXRl
IHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNoCisgICAgLy8g
aXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVyIGNhbGxiYWNrLgor
ICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJhY2tzID0geyAw
LCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1ZmZlclJlbGVh
c2UgfTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgpLCAmcHJv
dmlkZXJDYWxsYmFja3MpKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVByb3ZpZGVyKG1f
bmF0aXZlRGVjb2RlciwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vu
ZGlmCit9CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU2MWFiOWUx
Nzc5MTcyYmYzZWQyN2ZhMDQwYTBlNDE5MWJhMTY2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIEltYWdlRGVjb2Rlcl9oCisKKyNpbmNsdWRlICJJ
bWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSk7CisKK2VudW0gY2xhc3MgRGVjb2RlTW9kZSB7IEltbWVkaWF0ZSwgTGF6eSB9
OworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2RlciB7CitwdWJsaWM6
CisgICAgSW1hZ2VEZWNvZGVyKCk7CisgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkgeyB9CisK
KyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpOwor
ICAgIHN0YXRpYyBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9h
dCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7CisKKyAg
ICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKyAgICBib29sIGlzU2l6ZUF2YWls
YWJsZSgpIGNvbnN0OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIHNpemVfdCBmcmFt
ZUNvdW50KCkgY29uc3Q7CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OworICAgIGJv
b2wgZ2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3Q7CisKKyAgICBJbnRTaXplIGZy
YW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsKKyAgICBib29s
IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBJbWFnZU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OworCisgICAgZmxvYXQgZnJhbWVE
dXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5k
ZXgoc2l6ZV90KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3Qs
IFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBjb25zdDsKKworICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBj
cmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwsIERlY29kZU1v
ZGUgPSBEZWNvZGVNb2RlOjpMYXp5KSBjb25zdDsKKworICAgIHZvaWQgc2V0RGF0YShTaGFyZWRC
dWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgbXV0
YWJsZSBJbnRTaXplIG1fc2l6ZTsKKyAgICBDR0ltYWdlU291cmNlUmVmIG1fbmF0aXZlRGVjb2Rl
cjsKK307CisgICAgCit9CisKKyNlbmRpZiAvLyBJbWFnZURlY29kZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAppbmRl
eCBkNGEwMTJiNmY1N2JmNTM5MzA2NDc3N2I2YzEwOTM2NmIyNGM0NDVjLi5kY2Y3OWE3MmExNWU5
Zjc5NDBmYWRhNmQ2MTk1YjhjZDQzNTQzM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkltYWdlU291cmNlQ0cuaCIKIAogI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQ
SS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTQ0
LDQ0ICs0NSw5IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKLSNpZiBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8SW1hZ2VJTy9DR0ltYWdlU291cmNlUHJp
dmF0ZS5oPgotI2Vsc2UKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU3Vic2FtcGxl
RmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIik7Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFn
ZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRp
bWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlU
aW1lID0gQ0ZTVFIoIkRlbGF5VGltZSIpOwotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1h
Z2VQcm9wZXJ0eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7Ci0KLWNvbnN0IENG
U3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1h
Z2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiIpOwotY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VT
b3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEiKTsK
LQotI2lmICFQTEFURk9STShDT0NPQSkKLXNpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9z
aXRpb24odm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNv
dW50KQotewotICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hh
cmVkQnVmZmVyKj4oaW5mbyk7Ci0gICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXIt
PnNpemUoKTsKLSAgICBpZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBjb25zdCBjaGFyKiBzb3VyY2UgPSBzaGFyZWRCdWZmZXItPmRhdGEoKSArIHBv
c2l0aW9uOwotICAgIHNpemVfdCBhbW91bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KGNvdW50LCBzb3Vy
Y2VTaXplIC0gcG9zaXRpb24pOwotICAgIG1lbWNweShidWZmZXIsIHNvdXJjZSwgYW1vdW50KTsK
LSAgICByZXR1cm4gYW1vdW50OwotfQotCi12b2lkIHNoYXJlZEJ1ZmZlclJlbGVhc2Uodm9pZCog
aW5mbykKLXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNo
YXJlZEJ1ZmZlcio+KGluZm8pOwotICAgIHNoYXJlZEJ1ZmZlci0+ZGVyZWYoKTsKLX0KLSNlbmRp
ZgotCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJ
bWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0gICAgOiBtX2RlY29kZXIo
MCkKIHsKICAgICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uIGFyZSBpZ25vcmVkLgogfQpAQCAtMTAwLDM1NCArNjYsMTI5IEBAIHZvaWQgSW1hZ2VT
b3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZGVjb2RlcikgewotICAg
ICAgICBDRlJlbGVhc2UobV9kZWNvZGVyKTsKKyAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKICAg
ICAgICAgbV9kZWNvZGVyID0gMDsKICAgICB9CisgICAgCiAgICAgaWYgKGRhdGEpCiAgICAgICAg
IHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KLQotc3RhdGljIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVs
IHN1YnNhbXBsaW5nTGV2ZWwpCisgICAgCit2b2lkIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVy
SXNDcmVhdGVkKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIXN1YnNhbXBsaW5nTGV2
ZWwpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgbnVtT3B0aW9ucyA9IDM7Ci0gICAgICAgIGNv
bnN0IHZvaWQqIGtleXNbbnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGUs
IGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291cmNlU2tpcE1ldGFk
YXRhIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tudW1PcHRpb25zXSA9IHsga0NGQm9v
bGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9OwotICAgICAgICByZXR1
cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcyk7Ci0gICAgfQotCi0gICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xldmVs
ID0gc3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1wbGluZ0xldmVs
KSk7Ci0gICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRTdWJzYW1wbGluZ0xl
dmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCi0KLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJS
ZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtD
Rk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7Ci0gICAgY29uc3QgQ0ZJbmRleCBudW1P
cHRpb25zID0gNDsKLSAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFn
ZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJ
bWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgfTsK
LSAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5UcnVlLCBr
Q0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJlci5nZXQoKSB9Owot
ICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1
ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAg
CisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fZGVjb2Rl
ciA9IG5ldyBJbWFnZURlY29kZXIoKTsKIH0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IGltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2
ZWwgPSAwKQorICAgIAordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmIChzdWJzYW1wbGluZ0xldmVsKQot
ICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwp
OworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25zID0gY3JlYXRlSW1hZ2VT
b3VyY2VPcHRpb25zKDApOwotICAgIHJldHVybiBvcHRpb25zOwotfQorICAgIGVuc3VyZURlY29k
ZXJJc0NyZWF0ZWQoZGF0YSk7CisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLWJvb2wgSW1hZ2VTb3Vy
Y2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyOworICAgIG1f
ZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi12b2lkIEltYWdl
U291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
CitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKIHsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0g
Q0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIE9uIE1hYyB0aGUgTlNE
YXRhIGluc2lkZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3
aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuICBXZSB1c2UgU2hhcmVkQnVmZmVy
J3MgYWJpbGl0eQotICAgIC8vIHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFy
b3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0IEltYWdlSU8gaXMgcmVhbGx5IGxvb2tpbmcgYXQgdGhl
IFNoYXJlZEJ1ZmZlci4KLSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX2RlY29kZXIsIGRh
dGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUlu
Y3JlbWVudGFsKDApOwotICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhl
IFNoYXJlZEJ1ZmZlci4KLSAgICBkYXRhLT5yZWYoKTsKLSAgICAvLyBXZSB1c2UgdGhlIEdldEJ5
dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25l
IGJlY2F1c2UgU2hhcmVkQnVmZmVyCi0gICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBs
b2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92
ZSwgd2hpY2gKLSAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBv
aW50ZXIgY2FsbGJhY2suCi0gICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlk
ZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwg
c2hhcmVkQnVmZmVyUmVsZWFzZSB9OwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4g
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBk
YXRhLT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOwotICAgIENHSW1hZ2VTb3VyY2VVcGRh
dGVEYXRhUHJvdmlkZXIobV9kZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFSZWNl
aXZlZCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+Zmls
ZW5hbWVFeHRlbnNpb24oKSA6IFN0cmluZygpOwogfQogCi1TdHJpbmcgSW1hZ2VTb3VyY2U6OmZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1
YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIENGU3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENH
SW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnByZWZl
cnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOworICAgIHJl
dHVybiBJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShzY2FsZSwgbWF4aW11
bVN1YnNhbXBsaW5nTGV2ZWwpOwogfQorICAgIAogCi1TdWJzYW1wbGluZ0xldmVsIEltYWdlU291
cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUpIGNvbnN0CitzaXplX3Qg
SW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CiB7
Ci0gICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2ZWxzOiAwID0gMXgsIDEgPSAw
LjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCi0gICAgZmxvYXQgY2xhbXBlZFNjYWxlID0gc3Rk
OjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwgc2NhbGUpKTsKLSAgICBpbnQg
cmVzdWx0ID0gY2VpbGYobG9nMmYoMSAvIGNsYW1wZWRTY2FsZSkpOwotICAgIEFTU0VSVChyZXN1
bHQgPj0wICYmIHJlc3VsdCA8PSAzKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBJ
bWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpOwogfQotCisg
ICAgCiBib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQogewotICAgIC8vIFJhZ25h
cm9zIHllbGxzOiBUT08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1
dHVzIQotICAgIGlmIChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fZGVjb2RlcikgPCBrQ0dJbWFn
ZVN0YXR1c0luY29tcGxldGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlMFByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMo
KS5nZXQoKSkpOwotICAgIGlmICghaW1hZ2UwUHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRp
ZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQotICAgICAgICAmJiBDRkRpY3Rp
b25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5
UGl4ZWxIZWlnaHQpOworICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVyLT5pc1NpemVB
dmFpbGFibGUoKTsKIH0KIAotc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9t
UHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQorYm9vbCBJbWFnZVNv
dXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoaW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBDRk51bWJlclJlZiBvcmllbnRh
dGlvblByb3BlcnR5ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdlUHJv
cGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eU9yaWVudGF0aW9uKTsKLSAgICBpZiAoIW9yaWVudGF0
aW9uUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLQot
ICAgIGludCBleGlmVmFsdWU7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1ZShvcmllbnRhdGlvblByb3Bl
cnR5LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZXhpZlZhbHVlKTsKLSAgICByZXR1cm4gSW1hZ2VPcmll
bnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOworICAgIHJldHVybiBpbml0aWFsaXpl
ZCgpICYmIG1fZGVjb2Rlci0+YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KGluZGV4KTsK
IH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNp
emVfdCkgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3QKIHsKLSAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdl
U291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRp
b25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENG
RGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NH
SW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7Ci0gICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7
Ci0gICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xl
YW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3Bl
cnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKLSAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgewotICAg
ICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZC
b29sKTsKLSAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0
NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2Rp
bmcgcHJvZ3Jlc3NpdmUKLSAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxv
bmcgdGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUg
cHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCi0gICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0g
dG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4K
LSAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZp
eGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCi0gICAgICAgICAgICByZXR1cm4gIWlzUHJv
Z3Jlc3NpdmU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotSW50
U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3Bl
cnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNv
ZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7
Ci0KLSAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgaWYgKCFpbml0aWFsaXplZCgpKQogICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgaGVpZ2h0
ID0gMDsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOwotICAg
IGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmd2lkdGgpOwotICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
cm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwotICAgIGlmIChu
dW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVp
Z2h0KTsKLQotICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9
PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhw
cm9wZXJ0aWVzLmdldCgpKS51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAgICByZXR1cm4gSW50
U2l6ZShoZWlnaHQsIHdpZHRoKTsKKyAgICBJbnRTaXplIHNpemUgPSBtX2RlY29kZXItPmZyYW1l
U2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIEltYWdlT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBtX2RlY29kZXItPm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7CiAK
LSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gc2hvdWxkUmVz
cGVjdEltYWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gJiYgb3JpZW50
YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUoKSA6IHNpemU7
CiB9CiAKIEltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJv
cGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2Rl
Y29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJv
cGVydGllcykKLSAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwotCi0gICAg
cmV0dXJuIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSk7CisgICAg
cmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPm9yaWVudGF0aW9uQXRJbmRleChpbmRl
eCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6
c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRT
aXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJ
bmRleCgwLCAwLCBkZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwg
MCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3Qp
IGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkg
Y29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRv
cHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1h
Z2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGludCB4ID0gLTEsIHkgPSAtMTsKLSAgICBDRk51bWJlclJl
ZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwgQ0ZTVFIoImhvdHNwb3RYIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVl
KG51bSwga0NGTnVtYmVySW50VHlwZSwgJngpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwgQ0ZTVFIoImhvdHNwb3RZIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVl
KG51bSwga0NGTnVtYmVySW50VHlwZSwgJnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoeCA8IDAgfHwgeSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGhvdFNw
b3QgPSBJbnRQb2ludCh4LCB5KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZnJhbWVT
aXplQXRJbmRleCgwLCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CiB9CiAKLXNpemVfdCBJ
bWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKK2Jv
b2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiB7Ci0g
ICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9jIGNhbGxzIG9uIE1hYyBPUyAx
MC42LjYsIHg4Nl82NC4KLSAgICAvLyBBIG5vbi16ZXJvIHZhbHVlIGVuc3VyZXMgY2FjaGVkIGlt
YWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVyCi0gICAgLy8gdGhlIGxpdmUg
ZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVuIHRoZSBDR0ltYWdlU291cmNlIGRlY29kZXMgaW1h
Z2UKLSAgICAvLyBwcm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUgY2FjaGUgdG8gcHJ1bmUgdGhlIHBh
cnRpYWxseSBkZWNvZGVkIGltYWdlLgotICAgIC8vIFRoaXMgdmFsdWUgaXMgbGlrZWx5IHRvIGJl
IGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZvcm1zLCBidXQgdGhlIG92ZXJhbGwKLSAgICAvLyBi
ZWhhdmlvciBpcyB1bmNoYW5nZWQuCi0gICAgcmV0dXJuIDEzMDg4OworICAgIHJldHVybiBtX2Rl
Y29kZXIgJiYgbV9kZWNvZGVyLT5nZXRIb3RTcG90KGhvdFNwb3QpOwogfQotICAgIAorCiBpbnQg
SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCiB7Ci0gICAgaWYgKCFpbml0aWFsaXplZCgp
KQotICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9w
ZXJ0aWVzKG1fZGVjb2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAo
IXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICBD
RkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25h
cnkpOwotICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVyUmVmIG51bSA9
IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFn
ZVByb3BlcnR5R0lGTG9vcENvdW50KTsKLQotICAgICAgICAvLyBObyBwcm9wZXJ0eSBtZWFucyBs
b29wIG9uY2UuCi0gICAgICAgIGlmICghbnVtKQotICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRp
b25Mb29wT25jZTsKLQotICAgICAgICBpbnQgbG9vcENvdW50OwotICAgICAgICBDRk51bWJlckdl
dFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0KLSAgICAgICAgLy8g
QSBwcm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVyLgotICAgICAgICByZXR1
cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKLSAgICB9
Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBO
R0RpY3Rpb25hcnkpOwotICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVz
LCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCk7Ci0gICAgICAgIGlmICghbnVt
KQotICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQotICAgICAgICBpbnQg
bG9vcENvdW50OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlw
ZSwgJmxvb3BDb3VudCk7Ci0gICAgICAgIHJldHVybiBsb29wQ291bnQgPyBsb29wQ291bnQgOiBj
QW5pbWF0aW9uTG9vcEluZmluaXRlOwotICAgIH0KLQotICAgIC8vIFR1cm5zIG91dCB3ZSdyZSBu
b3QgYW4gYW5pbWF0ZWQgaW1hZ2UgYWZ0ZXIgYWxsLCBzbyB3ZSBkb24ndCBhbmltYXRlLgotICAg
IHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVj
b2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTG9vcE9uY2U7CiB9CiAKIHNpemVf
dCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGVjb2Rl
ciA/IENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX2RlY29kZXIpIDogMDsKKyAgICByZXR1cm4gbV9k
ZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQogCi1DR0ltYWdlUmVmIElt
YWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwpCitQYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNy
ZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3Vy
Y2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSNpZiBQTEFURk9STShJT1Mp
Ci0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQg
dGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hp
bmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9u
IGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2
ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVs
bCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0v
MTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtD
R0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4K
LSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIK
LSNlbmRpZgotICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdl
Q2FjaGluZ1RlbXBvcmFyeSk7Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCi0jZW5kaWYKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0KLSAgICBDRlN0
cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7Ci0gICAg
c3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1p
bWFnZSIpOwotCi0gICAgaWYgKCFpbWFnZVVUSSkKLSAgICAgICAgcmV0dXJuIGltYWdlLmxlYWtS
ZWYoKTsKLQotICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKLSAgICAgICAgcmV0
dXJuIGltYWdlLmxlYWtSZWYoKTsKLSAgICAKLSAgICAvLyBJZiBpdCBpcyBhbiB4Ym0gaW1hZ2Us
IG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJlYXMgdG8gcmVuZGVyIHRoZW0gdHJhbnNwYXJlbnQu
Ci0gICAgY29uc3QgQ0dGbG9hdCBtYXNraW5nQ29sb3JzWzZdID0gezI1NSwgMjU1LCAgMjU1LCAy
NTUsIDI1NSwgMjU1fTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbWFza2VkSW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9ycyhpbWFnZS5nZXQoKSwgbWFza2lu
Z0NvbG9ycykpOwotICAgIGlmICghbWFza2VkSW1hZ2UpCi0gICAgICAgIHJldHVybiBpbWFnZS5s
ZWFrUmVmKCk7Ci0KLSAgICByZXR1cm4gbWFza2VkSW1hZ2UubGVha1JlZigpOworICAgIHJldHVy
biBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOwogfQogCiBib29sIEltYWdlU291cmNlOjpm
cmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoZnJhbWVD
b3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9kZWNv
ZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOwogfQog
CiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9h
dCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGll
cyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIs
IGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmIChwcm9wZXJ0aWVz
KSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFy
eVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3Bl
cnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAg
ICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYg
aXQgZXhpc3RzLgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVz
LCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAgICAgICAgIC8vIEZh
bGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1l
IGRlbGF5IGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rp
b25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgICAgICBpZiAocG5nUHJvcGVydGllcykgewotICAg
ICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBl
ZERlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51
bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVz
LCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAg
Q0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1
cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KLSAg
ICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAx
MDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBkdXJhdGlvbiBvZiA8
PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMzYwODI+Ci0gICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgaWYgKGR1cmF0
aW9uIDwgMC4wMTFmKQotICAgICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1cm4gZHVyYXRpb247
CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1lRHVyYXRpb25BdElu
ZGV4KGluZGV4KSA6IDA7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBGSVhNRTogd2h5IGRvZXNuJ3QgdGhpcyByZXR1cm4gdHJ1ZT8KLQotICAgIGlm
ICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNv
ZGVyKTsKLQotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFnZSB0eXBlIG9y
IHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKLSAgICAvLyBKUEVHIGRvZXMgbm90IHN1
cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIGlmICghaW1hZ2VUeXBlIHx8IENGRXF1YWwo
aW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5vbi10cmFuc3Bh
cmVudCBpbWFnZSBmb3JtYXRzLgotICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSByZXR1cm4gZmFs
c2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhlIEdJRiBwcm9w
ZXJ0aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0
cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4
KTsKIH0KIAogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAogewotICAgIElu
dFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSk7
Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhlaWdodCgpICogNDsK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgo
aW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogMDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVm
bC5jcHAKaW5kZXggYmE0MTU5N2FhMTEwMWRiNjI5MDIzZDI3M2IyMDBlNzgxZDMzYWFjOS4uNTlj
YzJjOWJlOGIzZmZlMTExODZhNjg1ZDJlOGNmNTk0YzFkMzkzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RFZmwuY3BwCkBAIC0yNjMsNyArMjYzLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wKICAg
ICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxl
dGVBdEluZGV4KDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1faW1h
Z2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCk7CisgICAgICAgIG1faW1h
Z2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKICAgICB9IGVs
c2UgewogICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CiAgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTFZpZGVv
RWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBoYWQgYmVlbiBhcHBsaWVk
IGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3IgZWFjaCBwaXhlbCwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KaW5kZXggMjE1OTE1ZjI4
YTE5MjE3MjM5NmQ0NmYwODZkMjI0OWI4MWQ5ZDc2YS4uZTE4MzNkMTk4MzBiMTA3NjYzNjY0YjYx
Mjg0NDU5N2Y4M2ZjMGE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ljb25JT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL0ljb25JT1MubW0KQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIAotSWNvbjo6SWNvbihDR0ltYWdlUmVmIGltYWdlKQorSWNvbjo6SWNvbihOYXRpdmVJ
bWFnZVB0ciBpbWFnZSkKICAgICA6IG1fY2dJbWFnZShpbWFnZSkKIHsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCBmZjA3MTMx
YTYxZmNlZDA0NTg2YjM3MmQ5YmEyMDc5YTk4NzNjMzhiLi5mYTAxMWFhODgxNjMwMzAwMDk0NDk4
ZWJjMGZmY2E5ZmI5YzMwMzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC05NSw3ICs5NSw3IEBAIENGRGF0YVJlZiBCaXRtYXBJ
bWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKIAogICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBp
bWFnZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewot
ICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUF0SW5kZXgoaSk7CisgICAgICAgIENH
SW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwogICAgICAgICBp
ZiAoY2dJbWFnZSkKICAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4u
Y3BwCmluZGV4IDgzNWVjZjNmNGZlZWViOGEwZGZhOGQzNjk3MzEyOGYzYjgwN2I5MjYuLjQ3MDcz
YzBlZDY5MGUwNDRmZmIzYTk0ZTU4NmYyNjAyNzlkMWM0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAgLTkwLDcgKzkw
LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBo
aWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXQKIHsKICAgICBzaXplX3QgZnJhbWVzID0gZnJh
bWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKLSAg
ICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleChpKTsKKyAgICAgICAgQ0dJbWFn
ZVJlZiBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwogICAgICAgICBpZiAoaW1h
Z2UgJiYgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNT
aXplLmhlaWdodCgpKSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09IHN0YXRpY19jYXN0PHNp
emVfdD4oc3JjU2l6ZS53aWR0aCgpKSkgewogICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRGcmFt
ZSA9IG1fY3VycmVudEZyYW1lOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9X
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9X
aW4uY3BwCmluZGV4IDI5YTIwMjNkYjYzYTkxNDM0YzM5NDhlYWE1NTIzYmI2MWZlODEwNzUuLjk3
ZWQwOTc5MzVjNTFmYzIwYTg0NWM5NThlMTU2OThkMjAwMGRiODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKQEAg
LTkzLDcgKzkzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VT
aXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXQKIHsKICAgICBzaXplX3QgZnJh
bWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyAr
K2kpIHsKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lQXRJ
bmRleChpKTsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1l
SW1hZ2VBdEluZGV4KGkpOwogICAgICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFn
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KaW5k
ZXggYmJhZTkxZmE4ZTNjMDY2NDQ3YzQ2NGQ2ZTMxMjAwZGUyNDhjZTgzZi4uOTFjOTJlOTEyY2My
MTg5MmY2NTllNjdhOTU5NTcxZmJkZDAwMjdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRHJhZ0ltYWdlTWFjLm1tCkBAIC05MSw3ICs5MSw3IEBAIFJldGFpblB0cjxOU0ltYWdl
PiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpCiAgICAgaWYgKGlzPEJpdG1hcEltYWdlPigqaW1hZ2UpKSB7CiAgICAgICAgIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb247CiAgICAgICAgIEJpdG1hcEltYWdlJiBiaXRtYXBJbWFn
ZSA9IGRvd25jYXN0PEJpdG1hcEltYWdlPigqaW1hZ2UpOwotICAgICAgICBJbnRTaXplIHNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24gPSBiaXRtYXBJbWFnZS5zaXplUmVzcGVjdGluZ09yaWVudGF0
aW9uKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0
aW9uID0gYml0bWFwSW1hZ2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOwogCiAgICAgICAg
IGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKQogICAgICAgICAgICAgb3JpZW50YXRpb24gPSBiaXRtYXBJbWFnZS5vcmll
bnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273935</attachid>
            <date>2016-03-14 00:41:26 -0700</date>
            <delta_ts>2016-03-14 01:08:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160314004114.patch</filename>
            <type>text/plain</type>
            <size>92549</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjOThmYzYxZmI4ZmUx
ZTAxYTY5MWNjNzg0OTM0NmU1YTkwNzI1MC4uYjNlYTg3ODE2N2ZlZjgzYTMxNzkwNDNhZTNmNmNm
NmE1ZTdmNmU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MSBAQAorMjAxNi0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBpbWFnZSBkZWNvZGluZyBjb2RlIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAg
b3V0IHRvIGEgbmV3IGNsYXNzIG5hbWVkCisgICAgICAgIEltYWdlRGVjb2Rlci4gVGhlIHB1cnBv
c2Ugb2YgdGhpcyBzcGxpdCBpcyB0byBoYXZlIHRoZSBDRyBJbWFnZVNvdXJjZSBzaW1pbGFyCisg
ICAgICAgIHRvIHRoZSBub25lIENHIEltYWdlU291cmNlIHdoZXJlIHRoZXJlIGlzIGEgc2VwYXJh
dGUgY2xhc3MgZm9yIGRlY29kaW5nLiBUaGUKKyAgICAgICAgcGxhbiBpcyB0byBtZXJnZSB0aGUg
SW1hZ2VTb3VyY2UuY3BwIGFuZCBJbWFnZVNvdXJjZUNHLmNwcCBpbiBvbmUgZmlsZSBzbworICAg
ICAgICBkZWNpZGluZyB3aGV0aGVyIHRoZSBkZWNvZGluZyBzaG91bGQgaGFwcGVuIHN5bmNocm9u
b3VzbHkgb3IgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgY2FuIGhhcHBlbiBpbiBvbmUgcGxhY2Ug
YW5kIHRoZSBjYWNoaW5nIG9mIHRoZSBmcmFtZXMgY2FuIGJlIGhhbmRsZWQgYnkgdGhlCisgICAg
ICAgIEltYWdlU291cmNlIGFzIHdlbGwuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRl
cmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmR1bXApOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcElt
YWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjppbWFnZVNvdXJjZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVk
QnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTsKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZl
clJlbGVhc2UpOworICAgICAgICAoV2ViQ29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
OjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpnZXRI
b3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1l
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6fkltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmVuc3VyZURl
Y29kZXJJc0NyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFt
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpm
cmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlv
bkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkQnVmZmVyUmVsZWFzZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9C
aXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXRl
cm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk6CisKKzIwMTYtMDMtMTMgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBDaGFuZ2UgTmF0aXZl
SW1hZ2VQdHIgZm9yIENHIHRvIGJlIFJldGFpblB0cjxDR0ltYWdlUmVmPgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2aW5nIE5hdGl2ZUltYWdlUHRy
IGFzIGEgcmF3IHBvaW50ZXIgbWFrZXMgbWFuYWdpbmcgdGhlIGxpZmUgY3ljbGUgb2YKKyAgICAg
ICAgdGhlIENHSW1hZ2VSZWYgaGFyZC4gQSBsb3Qgb2Ygd29ya3Mgd2FzIGRvbmUgdG8gbWFrZSBz
dXJlIHRoZSBDRyBwb2ludGVyCisgICAgICAgIGlzIG1haW50YWluZWQgY29ycmVjdGx5LiBJdCB3
YXMgYWxzbyBub3QgcG9zc2libGUgdG8gbW92ZSBhIEZyYW1lRGF0YSBzaW5jZQorICAgICAgICBj
YWxsaW5nIHRoZSBkZXN0cnVjdG9yIHdhcyByZWxlYXNpbmcgdGhlIENHSW1hZ2VSZWYuCisKKyAg
ICAgICAgSSBhbSBnb2luZyB0byBmb2xsb3cgdGhpcyBuYW1pbmcgY29udmVudGlvbjoKKyAgICAg
ICAgMS4gQW4gSW1hZ2Ugb2JqZWN0IGNhbiBoYXZlIG9uZSBvciBtb3JlIEZyYW1lRGF0YS4gQSBG
cmFtZURhdGEgY2FuIGJlIG5hbWVkCisgICAgICAgICAgIGZvciBzaG9ydG5lc3MgYXMgImZyYW1l
IiwgIm1fZnJhbWVzIiwgZXRjLgorICAgICAgICAyLiBBIEZyYW1lRGF0YSBjYW4gaGF2ZSB6ZXJv
IG9yIG9uZSBOYXRpdmVJbWFnZVB0ci4gQSBOYXRpdmVJbWFnZVB0ciBjYW4KKyAgICAgICAgICAg
YmUgbmFtZWQgYXMgImltYWdlIiwgIm1faW1hZ2UiLCBldGMuCisKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmFk
ZEltYWdlVG9DYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SWNvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNr
Rm9yU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFn
ZVJlZik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVm
T2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpl
eHRyYWN0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
VG9DYW52YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6
OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpJY29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKToKKwogMjAxNi0wMy0xMiAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtGb3JtczogZm9jdXNdIGZvY3VzIHJpbmdzIGFyb3VuZCB0
ZXh0IGZpZWxkcyBkbyBub3QgZm9sbG93IGNvbnRvdXIgKGJvcmRlci1yYWRpdXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBlNTIwOWNiMjBjZjAzMzg3YTI1MjY0M2Rm
NGUwYjIxNTE0OTIwNGY3Li43YjM2N2E3M2FjOWUxNWJkOTVjODljOTdhMzZhMGYwMjVmNzI4MDc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTcxLDYgKzcxLDcgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZVNvdXJjZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dX
aW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKaW5kZXggODM1YjlhYTIyNGFhOWVhYWVlMDQ2MjMzOTdlOTkwMTZlOWY3
ZWViZi4uZGFjZGE1NjkxYTY1YzY2NTYwNjNhNGMwNzA2YzEwYTBlZmI2MjE0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKQEAgLTQwMCw2ICs0MDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDMwN2JhMzhmZjBmM2E0YzQ3MWI5ZDQy
OTE0NjE2MmE5NTllZTc2Ni4uNmI2MjkzMTMzN2EwYzcxOTU5OWM2MjU2OTE0YWMyMjJhMTVhOGE1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjI5MSw2ICsyMjkxLDggQEAKIAkJNTNFRjc2NkMxNjUzMTk5NDAwNENCRTQ5IC8q
IFNldHRpbmdzTWFjcm9zLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGlu
Z3NNYWNyb3MuaCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmll
ZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1
NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1NTlCQjg3OTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OUJCODc3
MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuY3BwICovOyB9OworCQk1NTlCQjg3QTFD
OTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTlCQjg3ODFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VE
ZWNvZGVyLmggKi87IH07CiAJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRD
bGljay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcy
QTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi87IH07CiAJCTU3MkE3
RjIzMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkg
LyogU2ltdWxhdGVkQ2xpY2suY3BwICovOyB9OwogCQk1ODAzNzE2MTFBNjZGMDBBMDBCQUY1MTkg
LyogQ2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTgwMzcxNUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCAqLzsgfTsKQEAg
LTk4NzUsNiArOTg3Nyw4IEBACiAJCTUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5n
c01hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR0aW5nc01hY3Jv
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUz
RDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYw
MzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTU1OUJCODc3MUM5NjQ2
NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTU5QkI4NzgxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZURlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNp
bXVsYXRlZENsaWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRl
ZENsaWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYw
MDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTaW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMTgzMyw2ICsyMTgzNyw4IEBACiAJCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8q
IEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKIAkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYg
LyogSW1hZ2VDRy5jcHAgKi8sCisJCQkJNTU5QkI4NzcxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdl
RGVjb2Rlci5jcHAgKi8sCisJCQkJNTU5QkI4NzgxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVj
b2Rlci5oICovLAogCQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNH
LmNwcCAqLywKIAkJCQk0QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5o
ICovLAogCQkJCTRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1t
ICovLApAQCAtMjY4MTIsNiArMjY4MTgsNyBAQAogCQkJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgz
QSAvKiBKU1NjcmlwdFByb2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGQTM3RUZC
MTE3MkZEQTYwMEM0Q0Q1NSAvKiBKU1NjcmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTlGQTM3RUZEMTE3MkZEQTYwMEM0Q0Q1NSAvKiBKU1NjcmlwdFByb2ZpbGVOb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTlCQjg3QTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRUQwNkFEMTFDNzc3NTQ4MDBGREZBRjEgLyogSlNTZWN1cml0
eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkRBNjREODFCOTc1
Q0YyMDA5QzQzODcgLyogSlNTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDlERTE3
QjE3QUFDNzVCMDBFQTM4NkQgLyogSlNTb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MjkyMDMsNiArMjkyMTAsNyBAQAogCQkJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNGMzMyNDBGMkI5NzE1MDA0QjY3OTUgLyogQ29s
b3JDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDOTExRDIwRTQ3MDA0QzIwMUMgLyog
Q29sb3JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTU1OUJCODc5MUM5NjQ2NTgwMDI0MTND
RCAvKiBJbWFnZURlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyOTkzNUQxN0ExREQ1
ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUz
NTc3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQz
RURENjdFMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
CmluZGV4IGYzNzg3NTIxZGRmZmY2ODJiZDg4ZTY0NzJjYWYwNjI1ZTNmMDQ1NDQuLjlhMTQ3NTc4
ODM3ZmNkZTEzMTBkMWFkMTA2MjJiN2JiNzA2ODRhZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcApAQCAtMjc4LDcgKzI3OCw3IEBAIExheW91dFNpemUg
Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGZsb2F0CiAgICAgaWYgKHJlbmRlcmVyICYmIGlzPEJpdG1hcEltYWdlPigqbV9pbWFn
ZSkpIHsKICAgICAgICAgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIG9yaWVudGF0aW9uRGVz
Y3JpcHRpb24ocmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCksIHJlbmRl
cmVyLT5zdHlsZSgpLmltYWdlT3JpZW50YXRpb24oKSk7CiAgICAgICAgIGlmIChvcmllbnRhdGlv
bkRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24pCi0gICAgICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25jYXN0PEJp
dG1hcEltYWdlPigqbV9pbWFnZSkuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihvcmllbnRhdGlv
bkRlc2NyaXB0aW9uKSk7CisgICAgICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25j
YXN0PEJpdG1hcEltYWdlPigqbV9pbWFnZSkuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpKTsK
ICAgICB9CiAjZWxzZQogICAgIGlmIChpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpICYmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmNwcAppbmRleCA5OTk0NjVlYTM5MDY5N2NiZTAwZmU2ZmE4ODM4YzEzOGU1NDQ3YTE3
Li44NDZjMGRjOTM4NGU3NWRiYTA4MjBjMjgwZmI2NDFjZThhMDhmMTYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKQEAgLTIyNSw4ICsyMjUsNiBAQCBi
b29sIE1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdAogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZEltYWdl
PiBjYWNoZWRJbWFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkSW1hZ2U+KHVybCwgYml0bWFw
SW1hZ2UuZ2V0KCksIENhY2hlZEltYWdlOjpNYW51YWxseUNhY2hlZCwgc2Vzc2lvbklEKTsKIAot
ICAgIC8vIEFjdHVhbCByZWxlYXNlIG9mIHRoZSBDR0ltYWdlUmVmIGlzIGRvbmUgaW4gQml0bWFw
SW1hZ2UuCi0gICAgQ0ZSZXRhaW4oaW1hZ2UpOwogICAgIGNhY2hlZEltYWdlLT5hZGRDbGllbnQo
JmR1bW15Q2FjaGVkSW1hZ2VDbGllbnQoKSk7CiAgICAgY2FjaGVkSW1hZ2UtPnNldERlY29kZWRT
aXplKGJpdG1hcEltYWdlLT5kZWNvZGVkU2l6ZSgpKTsKICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElU
SU9OSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCmluZGV4IGZhZjBmODY5NjJjM2ZiNjU3Nzc0NWJmYWY3NWI0Yzg0ZDgwY2MwNjAuLjk2
NDBlZTJiMzg0MmY3YzJjZDA2MDBiNDA2OWE4ZTE3NTMzYTA1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTQ3LDkgKzQ3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11
bVN1YnNhbXBsaW5nTGV2ZWwoMCkKLSAgICAsIG1faW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BM
ZWZ0KQotICAgICwgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAs
IG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9u
ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCkBAIC05Niw3ICs5Myw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoZG91YmxlIGRlbGF5KQogICAgIG1fZnJh
bWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6aGF2
ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCitib29sIEJpdG1hcEltYWdlOjpoYXZlRnJhbWVJ
bWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNCw3ICsxMDEsNyBAQCBib29sIEJpdG1h
cEltYWdlOjpoYXZlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9m
cmFtZXNbaW5kZXhdLm1fZnJhbWU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdl
OwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0
CkBAIC0xODQsOSArMTgxLDkgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3Qg
aW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW0KICAgICAgICAgbV9m
cmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCiAgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1l
dGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUgPSBtX3Nv
dXJjZS5jcmVhdGVGcmFtZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgICAg
ICBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSA9IG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKICAgICAgICAgbV9mcmFtZXNbaW5kZXhdLm1f
c3Vic2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7Ci0gICAgICAgIGlmIChudW1GcmFt
ZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICAgICAgaWYgKG51bUZyYW1l
cyA9PSAxICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQogICAgICAgICAgICAgY2hlY2tGb3JT
b2xpZENvbG9yKCk7CiAgICAgfQogCkBAIC0yMDQsNyArMjAxLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbCwgSW0KICAgICBpZiAoIXN1YnNhbXBsaW5nTGV2ZWwgJiYgZnJhbWVTaXplICE9IG1fc2l6
ZSkKICAgICAgICAgbV9oYXNVbmlmb3JtRnJhbWVTaXplID0gZmFsc2U7CiAKLSAgICBpZiAobV9m
cmFtZXNbaW5kZXhdLm1fZnJhbWUpIHsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faW1hZ2Up
IHsKICAgICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lQnl0ZXMpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAg
ICAgICAgIC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlh
bGx5IGRlY29kZWQgZGF0YSB1c2VkCkBAIC0yMzYsMTYgKzIzMywxMyBAQCB2b2lkIEJpdG1hcElt
YWdlOjpkaWREZWNvZGVQcm9wZXJ0aWVzKCkgY29uc3QKICAgICAgICAgaW1hZ2VPYnNlcnZlcigp
LT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgZGVsdGFCeXRlcyk7CiB9CiAKLXZvaWQgQml0bWFw
SW1hZ2U6OnVwZGF0ZVNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KSBjb25zdAordm9pZCBCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX3NpemVBdmFpbGFibGUgfHwgbV9oYXZlU2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9zaXplID0gbV9zb3VyY2Uuc2l6ZShkZXNjcmlwdGlvbik7Ci0gICAgbV9zaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uID0gbV9zb3VyY2Uuc2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24o
UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSkp
OwotCi0gICAgbV9pbWFnZU9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2Ny
aXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0gICAgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbigpKTsKKyAgICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKCk7CisgICAgbV9zaXpl
UmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zb3VyY2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bigpOwogCiAgICAgbV9oYXZlU2l6ZSA9IHRydWU7CiAKQEAgLTI1OSw5ICsyNTMsOSBAQCBGbG9h
dFNpemUgQml0bWFwSW1hZ2U6OnNpemUoKSBjb25zdAogICAgIHJldHVybiBtX3NpemU7CiB9CiAK
LUludFNpemUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBCaXRtYXBJbWFn
ZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgdXBkYXRlU2l6ZShk
ZXNjcmlwdGlvbik7CisgICAgdXBkYXRlU2l6ZSgpOwogICAgIHJldHVybiBtX3NpemVSZXNwZWN0
aW5nT3JpZW50YXRpb247CiB9CiAKQEAgLTM3OSwyMyArMzczLDIzIEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRleCA+PSBtX2Zy
YW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5k
RnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgICAgICB8fCAoZnJhbWVDYWNo
aW5nID09IENhY2hlTWV0YWRhdGFBbmRGcmFtZSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2Up
CiAgICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgJiYgIW1fZnJh
bWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIDAs
IGZyYW1lQ2FjaGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVzZW50
YXRpb25TY2FsZUhpbnQpCitQYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50KQogewog
ICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gc3RkOjptaW4obV9zb3Vy
Y2Uuc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKHByZXNlbnRhdGlvblNjYWxlSGludCksIG1fbWlu
aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbCA9IG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShwcmVzZW50YXRpb25TY2Fs
ZUhpbnQsIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwogCiAgICAgLy8gV2UgbWF5IGhhdmUg
Y2FjaGVkIGEgZnJhbWUgd2l0aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2gg
Y2FzZSB3ZSBuZWVkIHRvCiAgICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAg
ICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUg
JiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwp
IHsKKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1f
aW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5n
TGV2ZWwpIHsKICAgICAgICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQg
YXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCiAgICAgICAg
IGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7CiAgICAgICAg
IG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKQEAgLTQwNiwxMCArNDAwLDEwIEBAIFBhc3NO
YXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2NhCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6
ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKICAgICAgICAgY2FjaGVGcmFtZShpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKIAotICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1f
aW1hZ2U7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQpAQCAtNDMwLDcgKzQyNCw3IEBAIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiAKIFBhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVybiBmcmFtZUF0
SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChjdXJy
ZW50RnJhbWUoKSk7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCBpbmRleCkKQEAgLTcxNCw5ICs3MDgsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93LXN1
YnNhbXBsaW5nIiwgYWxsb3dTdWJzYW1wbGluZygpKTsKICAgICBpZiAobV9pc1NvbGlkQ29sb3Ip
CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic29saWQtY29sb3IiLCBtX2lzU29saWRDb2xvcik7
Ci0gICAgCi0gICAgaWYgKG1faW1hZ2VPcmllbnRhdGlvbiAhPSBPcmlnaW5Ub3BMZWZ0KQotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoIm9yaWVudGF0aW9uIiwgbV9pbWFnZU9yaWVudGF0aW9uKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmgKaW5kZXggNzQ5M2M2YTRiZmI4NjNkOTc2MzdjNDljNDY0Y2MzN2FlNzhlMGEwNC4uNzY5YWYx
YWYxMjJiMGU1ZTdkYmNiYmU5YmQwNzIwZjc0NjgxYWVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC00NywxNiArNDcsNiBAQCB0eXBl
ZGVmIHN0cnVjdCBIQklUTUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIHN0cnVjdCBGcmFtZURhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIHRl
bXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpGcmFtZURhdGE+IDogcHVibGlj
IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2Fu
SW5pdGlhbGl6ZVdpdGhNZW1zZXQgPSBmYWxzZTsgLy8gTm90IGFsbCBGcmFtZURhdGEgbWVtYmVy
cyBpbml0aWFsaXplIHRvIDAuCi0gICAgfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBUaW1lcjsKIApAQCAtNjUsMTcgKzU1LDggQEAgY2xhc3MgVGltZXI7CiAvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogc3RydWN0IEZyYW1l
RGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJhbWVEYXRhKTsKIHB1YmxpYzoKICAg
ICBGcmFtZURhdGEoKQotICAgICAgICA6IG1fZnJhbWUoMCkKLSAgICAgICAgLCBtX29yaWVudGF0
aW9uKERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICAsIG1fc3Vic2FtcGxpbmdMZXZl
bCgwKQotICAgICAgICAsIG1fZHVyYXRpb24oMCkKLSAgICAgICAgLCBtX2hhdmVNZXRhZGF0YShm
YWxzZSkKLSAgICAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBo
YSh0cnVlKSAKLSAgICAgICAgLCBtX2ZyYW1lQnl0ZXMoMCkKICAgICB7CiAgICAgfQogCkBAIC04
NCwxOCArNjUsMjIgQEAgcHVibGljOgogICAgICAgICBjbGVhcih0cnVlKTsKICAgICB9CiAKLSAg
ICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRhdGEgb24gdGhlIGZyYW1lLCBhbmQgKG9wdGlv
bmFsbHkpIHRoZSBtZXRhZGF0YS4KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2FzIGNh
Y2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgogICAgIGJvb2wgY2xlYXIoYm9vbCBjbGVhck1ldGFk
YXRhKTsKLQotICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJhbWU7Ci0gICAgSW1hZ2VPcmllbnRhdGlv
biBtX29yaWVudGF0aW9uOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVs
OwotICAgIGZsb2F0IG1fZHVyYXRpb247Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0g
ICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAg
dW5zaWduZWQgbV9mcmFtZUJ5dGVzOworICAgIE9wdGlvbmFsPENvbG9yPiBzb2xpZENvbG9yKCkg
Y29uc3Q7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlv
biB7IDAgfTsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBib29s
IG1faGF2ZU1ldGFkYXRhIDogMTsKKyAgICAgICAgICAgIGJvb2wgbV9pc0NvbXBsZXRlIDogMTsK
KyAgICAgICAgICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7CisgICAgICAgIH07CisgICAgICAgIHVp
bnQ4X3QgbV9mbGFnc1tzaXplb2YoYm9vbCldIHsgMCB9OworICAgIH07CisgICAgdW5zaWduZWQg
bV9mcmFtZUJ5dGVzIHsgMCB9OwogfTsKIAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTI1LDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIEZsb2F0U2l6ZSBkdWUgdG8gb3ZlcnJpZGUuCiAgICAgRmxvYXRTaXplIHNpemUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNv
bnN0OworICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0OwogCiAg
ICAgYm9vbCBnZXRIb3RTcG90KEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTE4OSw3
ICsxNzQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgdXBkYXRlU2l6ZShJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkg
Y29uc3Q7CisgICAgdm9pZCB1cGRhdGVTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBkZXRlcm1pbmVN
aW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0yMTQsMTAg
KzE5OSwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogCi0gICAg
UGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlv
blNjYWxlSGludCA9IDEpOwotICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFt
ZUF0SW5kZXgoc2l6ZV90KTsKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhpbnQgPSAxKTsKKyAgICBQYXNzTmF0
aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAotICAg
IGJvb2wgaGF2ZUZyYW1lQXRJbmRleChzaXplX3QpOworICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VB
dEluZGV4KHNpemVfdCk7CiAKICAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
KTsKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwpAQCAtMjk3LDEwICsy
ODIsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXpl
IHRvIHVzZSBmb3IgdGhlIG92ZXJhbGwgaW1hZ2UgKHdpbGwganVzdCBiZSB0aGUgc2l6ZSBvZiB0
aGUgZmlyc3QgaW1hZ2UpLgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb247CiAKLSAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9taW5pbXVtU3Vic2Ft
cGxpbmdMZXZlbDsKLQotICAgIG11dGFibGUgdW5zaWduZWQgbV9pbWFnZU9yaWVudGF0aW9uIDog
NDsgLy8gSW1hZ2VPcmllbnRhdGlvbkVudW0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fc2hvdWxk
UmVzcGVjdEltYWdlT3JpZW50YXRpb24gOiAxOyAvLyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVu
dW0KKyAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZl
bCB7IDAgfTsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRo
ZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBt
X2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlv
bi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAppbmRleCBkOTVlN2RlYjgxMGZjMjRmN2Y2
MWIxYjIzYTRiOWFlZjNmM2MxN2I3Li4yOGMxMzdkMjliMTE4YTljZjFiNjE2MWVkZTRkZTQ5MWQw
NDg4MzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCkBAIC02OCw4
ICs2OCw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1MpCi0gICAgSWNv
bihDR0ltYWdlUmVmKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOworICAg
IEljb24oTmF0aXZlSW1hZ2VQdHIpOworICAgIE5hdGl2ZUltYWdlUHRyIG1fY2dJbWFnZTsKICNl
bGlmIFBMQVRGT1JNKE1BQykKICAgICBJY29uKE5TSW1hZ2UqKTsKICAgICBSZXRhaW5QdHI8TlNJ
bWFnZT4gbV9uc0ltYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCmluZGV4IDc0ZWYwNTNhMzMzZmY1ZmM1NzhlODE4MDBjYzZmYzk3NTVl
ZmJhYjguLmY4MTljYWI3MThhZDg5Njk1MGY4ZTBmYjIzMWQ1MjRkOTAwMDg0NjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTY4
LDExICs2OCw2IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6
ZV90IGNsZWFyQmVmb3JlRnJhbWUsIFNoYXJlZEJ1ZmZlcioKICAgICAgICAgc2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1ib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2RlcjsKLX0KLQogdm9pZCBJbWFnZVNvdXJjZTo6
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAg
IC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVzLgpAQCAtOTYsNyArOTEs
NyBAQCBTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogU3RyaW5n
KCk7CiB9CiAKLVN1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxG
b3JTY2FsZShmbG9hdCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKICAg
ICByZXR1cm4gMDsKIH0KQEAgLTExMSwyMSArMTA2LDI1IEBAIGJvb2wgSW1hZ2VTb3VyY2U6Omlz
U2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIG1fZGVjb2RlciAmJiBtX2RlY29kZXItPmlzU2l6
ZUF2YWlsYWJsZSgpOwogfQogCi1JbnRTaXplIEltYWdlU291cmNlOjpzaXplKEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6
OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDAsIGRlc2Ny
aXB0aW9uKTsKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKK30KKyAgICAKK0lu
dFNpemUgSW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KTsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbikgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3QKIHsKLSAg
ICBpZiAoIW1fZGVjb2RlcikKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVy
biBJbnRTaXplKCk7CiAKICAgICBJbnRTaXplIHNpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgpOwotICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRp
b24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgbV9kZWNvZGVyLT5vcmllbnRhdGlv
bigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKHNpemUuaGVp
Z2h0KCksIHNpemUud2lkdGgoKSk7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9
IG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKTsKIAotICAgIHJldHVybiBzaXplOworICAgIHJldHVy
biBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
biAmJiBvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZS50cmFuc3Bvc2VkU2l6
ZSgpIDogc2l6ZTsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdChJbnRQb2ludCYg
aG90U3BvdCkgY29uc3QKQEAgLTE0OCw3ICsxNDcsNyBAQCBzaXplX3QgSW1hZ2VTb3VyY2U6OmZy
YW1lQ291bnQoKSBjb25zdAogICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZyYW1l
Q291bnQoKSA6IDA7CiB9CiAKLVBhc3NOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRl
RnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCkKK1Bhc3NOYXRpdmVJ
bWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsKQogewogICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICByZXR1
cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
CmluZGV4IGFjZGQxY2U0Y2UzMDBkZTgxYzllMDYyZWVlNzYwN2JmNDcyYTcwYWYuLjkwYjQyOTM2
MzY2NjcyYzVmYjQzMzY3YjdkYWNkMzhiOTlhNzE1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtNDYsMTggKzQ2LDkgQEAgY2xhc3Mg
SW50UG9pbnQ7CiBjbGFzcyBJbnRTaXplOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCi0jaWYgVVNF
KENHKQotdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKLSNl
bHNlCiBjbGFzcyBJbWFnZURlY29kZXI7CiB0eXBlZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1h
Z2VEZWNvZGVyUHRyOwotI2VuZGlmCi0KLSNpZiBVU0UoQ0cpCi0jZGVmaW5lIE5hdGl2ZUltYWdl
RGVjb2RlciBJbWFnZURlY29kZXIKLSNlbHNlCiB0eXBlZGVmIEltYWdlRGVjb2RlciBOYXRpdmVJ
bWFnZURlY29kZXI7Ci0jZW5kaWYKIAogLy8gUmlnaHQgbm93IEdJRnMgYXJlIHRoZSBvbmx5IHJl
Y29nbml6ZWQgaW1hZ2UgZm9ybWF0IHRoYXQgc3VwcG9ydHMgYW5pbWF0aW9uLgogLy8gVGhlIGFu
aW1hdGlvbiBzeXN0ZW0gYW5kIHRoZSBjb25zdGFudHMgYmVsb3cgYXJlIGRlc2lnbmVkIHdpdGgg
dGhpcyBpbiBtaW5kLgpAQCAtMTEwLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICAvLyBkZWNvZGVk
IGZyYW1lcy4KICAgICAvLwogICAgIC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIGNsZWFyKGZh
bHNlLCBuKSBhbmQgc3Vic2VxdWVudGx5IGNhbGwKLSAgICAvLyBjcmVhdGVGcmFtZUF0SW5kZXgo
bSkgd2l0aCBtIDwgbiwgdW5sZXNzIHRoZXkgZmlyc3QgY2FsbCBjbGVhcih0cnVlKS4KKyAgICAv
LyBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChtKSB3aXRoIG0gPCBuLCB1bmxlc3MgdGhleSBmaXJz
dCBjYWxsIGNsZWFyKHRydWUpLgogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHN0YXRlZnVsIElt
YWdlU291cmNlcy9kZWNvZGVycyB3aWxsIHdvcmsgcHJvcGVybHkuCiAgICAgLy8KICAgICAvLyBU
aGUgfGRhdGF8IGFuZCB8YWxsRGF0YVJlY2VpdmVkfCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBzdXBw
bGllZCBieSBjYWxsZXJzCkBAIC0xMjIsMTkgKzExMywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSBOVUxMLAogICAgICAgICAgICAgICAgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQgPSBmYWxzZSk7CiAKLSAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3Q7Cisg
ICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlcjsgfQogCiAgICAg
dm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwog
ICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwogCi0gICAgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQpIGNvbnN0OworICAgIFN1YnNhbXBs
aW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0LCBTdWJzYW1wbGluZ0xldmVs
KSBjb25zdDsKICAgICBib29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3Qp
IGNvbnN0OwogCiAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKICAgICAvLyBBbHdheXMgb3Jp
Z2luYWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1wbGluZy4KLSAgICBJbnRTaXplIHNpemUoSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNv
bnN0OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgc2l6ZVJlc3BlY3Rp
bmdPcmllbnRhdGlvbigpIGNvbnN0OwogICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBzdWJzYW1w
bGVkIGZyYW1lLgotICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSAwLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24oKSkgY29uc3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNp
emVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9
IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OwogCiAgICAgYm9vbCBnZXRIb3RT
cG90KEludFBvaW50JikgY29uc3Q7CiAKQEAgLTE0Niw3ICsxMzgsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCB0aGlzIGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3
aXRoIGEgaGlnaGVyIGluZGV4OwogICAgIC8vIHNlZSBjb21tZW50cyBvbiBjbGVhcigpIGFib3Zl
LgotICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCk7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApOwogCiAgICAgZmxvYXQgZnJh
bWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCk7IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBhY3R1YWxseSB1c2VkIGFueSBh
bHBoYS4KQEAgLTE2Myw3ICsxNTUsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAg
ICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyOworICAgIHZvaWQgZW5zdXJlRGVjb2Rl
cklzQ3JlYXRlZChTaGFyZWRCdWZmZXIqKTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZURlY29kZXJQ
dHIgbV9kZWNvZGVyIHsgbnVsbHB0ciB9OwogCiAjaWYgIVVTRShDRykKICAgICBBbHBoYU9wdGlv
biBtX2FscGhhT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTmF0aXZlSW1hZ2VQdHIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L05hdGl2ZUltYWdlUHRyLmgKaW5kZXggZGY5NDFhNTY2YTllNDY5Mjc3MjdiYTFlYzY4NDhmMjE2
ODAzYTQ1Yi4uZWNhMWI5MmM0MWVlMTgyOGUzMTBkNWJlZGJiMmI1YWNhNTk1ZjU0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCkBA
IC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIE5hdGl2ZUltYWdlUHRyX2gKIAogI2lmIFVTRShDRykK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiB0eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0lt
YWdlUmVmOwogI2VsaWYgVVNFKENBSVJPKQogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCkBAIC00
MSw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZJWE1FOiBOYXRpdmVJbWFnZVB0
ciBhbmQgUGFzc05hdGl2ZUltYWdlUHRyIHNob3VsZCBiZSBzbWFydAogLy8gcG9pbnRlcnMgKHNl
ZSBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkuCiAjaWYgVVNFKENHKQot
dHlwZWRlZiBDR0ltYWdlUmVmIE5hdGl2ZUltYWdlUHRyOwordHlwZWRlZiBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gTmF0aXZlSW1hZ2VQdHI7CiAjZWxpZiBVU0UoQ0FJUk8pCiB0eXBlZGVmIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IE5hdGl2ZUltYWdlUHRyOwogdHlwZWRlZiBQYXNzUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gUGFzc05hdGl2ZUltYWdlUHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggNjNk
Y2YwYTI1M2UyMzQwZjY3ZjFjODFkODVmYzI3MGRkMjMwZTg2ZC4uYTRjNjViZGZmMzJhOTJmOWMx
ZGYyNmQ0YmY1MzA4MGYwNWFiOTYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC0xMDM3LDcgKzEwMzcs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSogaW1hZ2UpCiB7CiAgICAgaWYgKGltYWdlKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgbmV3
SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgQ0dJ
bWFnZVJlZiBuZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLmdl
dCgpOwogICAgICAgICBpZiAoIW5ld0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFn
ZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1h
cEltYWdlQ2Fpcm8uY3BwCmluZGV4IGNkNTdlZTQ4NWVhODBjNmNmMzQ3YWIzYmQ5NzM3ZDU5OTll
MTAyODIuLjM2MDAwNjcyYmRlYzRkNTViYTdmYjlhYjJmMWExNjg5MzY3NzM2YjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1h
cEltYWdlQ2Fpcm8uY3BwCkBAIC00MSw3ICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEJp
dG1hcEltYWdlOjpCaXRtYXBJbWFnZShQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmF0aXZl
SW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCiAg
ICAgLCBtX3NpemUoY2Fpcm9TdXJmYWNlU2l6ZShuYXRpdmVJbWFnZS5nZXQoKSkpCi0gICAgLCBt
X21pbmltdW1TdWJzYW1wbGluZ0xldmVsKDApCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAg
ICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCiAgICAgLCBtX3JlcGV0aXRpb25D
b3VudFN0YXR1cyhVbmtub3duKQpAQCAtNTgsNyArNTcsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFw
SW1hZ2UoUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5hdGl2ZUltYWdlLCBJbWFnZU9ic2Vy
dmVyKgogewogICAgIG1fZnJhbWVzLmdyb3coMSk7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBo
YSA9IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQobmF0aXZlSW1hZ2UuZ2V0KCkpICE9IENBSVJP
X0NPTlRFTlRfQ09MT1I7Ci0gICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IG5hdGl2ZUltYWdlOwor
ICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBuYXRpdmVJbWFnZTsKICAgICBtX2ZyYW1lc1swXS5t
X2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKQEAgLTcy
LDcgKzcxLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG8KIAogICAgIHN0YXJ0QW5pbWF0aW9u
KCk7CiAKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVBdEluZGV4
KG1fY3VycmVudEZyYW1lKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0g
ZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlmICghc3VyZmFjZSkgLy8g
SWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTI0LDcgKzEyMyw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvCiAKIHZv
aWQgQml0bWFwSW1hZ2U6OmRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKCkgY29uc3QK
IHsKLSAgICBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsID0gMDsKKyAgICBtX21heGltdW1TdWJz
YW1wbGluZ0xldmVsID0gMDsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENv
bG9yKCkKQEAgLTEzNSw3ICsxMzQsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlk
Q29sb3IoKQogICAgIGlmIChmcmFtZUNvdW50KCkgPiAxKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVBdEluZGV4KG1fY3VycmVu
dEZyYW1lKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVJbWFn
ZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlmICghc3VyZmFjZSkgLy8gSWYgaXQncyB0
b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTU4LDggKzE1Nyw4IEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRh
dGEpCiAgICAgaWYgKGNsZWFyTWV0YWRhdGEpCiAgICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFs
c2U7CiAKLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICBtX2ZyYW1lID0gbnVsbHB0cjsKKyAg
ICBpZiAobV9pbWFnZSkgeworICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RDYWlyby5jcHAKaW5kZXggY2M3MDQ2MTQ3YWU4MWYxZmFkYWE2ZDg0MTYyNDk4MGM2ZmRmY2Jm
MS4uOGM0MTg2ZDcxZTUzYTE5MDdlOTJkNzNhMmIwMTY0N2ZmZDY2YjFjMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbAogICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVl
KTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlz
Q29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBt
X2ltYWdlU3VyZmFjZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApOworICAgICAgICBt
X2ltYWdlU3VyZmFjZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAvLyAxLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxW
aWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5QWxwaGEgaGFkIGJlZW4gYXBw
bGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVhY2ggcGl4ZWwsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3Bw
CmluZGV4IDAxYjdkNjkyY2RiZDdhYjRkMjJiYmMxMzk5YzEwMzI4ZjU3ZTVlNDcuLmNjN2VjZDg2
MzVhZWM4NzcwZDcwMTM0MmQyMGNmMDZkNjZmZGFlYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCkBAIC01OCwyMiAr
NTgsMTggQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKICAgICBt
X29yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247CiAgICAgbV9zdWJzYW1wbGlu
Z0xldmVsID0gMDsKIAotICAgIGlmIChtX2ZyYW1lKSB7CisgICAgaWYgKG1faW1hZ2UpIHsKICNp
ZiBDQUNIRV9TVUJJTUFHRVMKLSAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9m
cmFtZSk7CisgICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkp
OwogI2VuZGlmCi0gICAgICAgIENHSW1hZ2VSZWxlYXNlKG1fZnJhbWUpOwotICAgICAgICBtX2Zy
YW1lID0gMDsKKyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZShDR0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQorQml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNl
cnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9taW5pbXVtU3Vic2FtcGxpbmdM
ZXZlbCgwKQotICAgICwgbV9pbWFnZU9yaWVudGF0aW9uKE9yaWdpblRvcExlZnQpCi0gICAgLCBt
X3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKGZhbHNlKQogICAgICwgbV9jdXJyZW50RnJh
bWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9y
ZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikKQEAgLTg5LDggKzg1LDggQEAgQml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2
ZXIpCiAgICAgLCBtX3NpemVBdmFpbGFibGUodHJ1ZSkKICAgICAsIG1faGF2ZUZyYW1lQ291bnQo
dHJ1ZSkKIHsKLSAgICBDR0Zsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwot
ICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKKyAgICBDR0Zs
b2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKTsKKyAgICBDR0Zsb2F0IGhl
aWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOwogICAgIG1fZGVjb2RlZFNpemUg
PSB3aWR0aCAqIGhlaWdodCAqIDQ7CiAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKIApAQCAtOTksNyArOTUsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJl
ZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICBtX3NpemVSZXNwZWN0aW5n
T3JpZW50YXRpb24gPSBtX3NpemU7CiAKICAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJh
bWVzWzBdLm1fZnJhbWUgPSBDR0ltYWdlUmV0YWluKGNnSW1hZ2UpOworICAgIG1fZnJhbWVzWzBd
Lm1faW1hZ2UgPSBpbWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1ZTsKICAg
ICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKQEAgLTEyNSw3ICsxMjEsNyBA
QCB2b2lkIEJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNv
bnN0CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX21pbmltdW1TdWJzYW1wbGlu
Z0xldmVsID0gY3VycmVudExldmVsOworICAgIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBj
dXJyZW50TGV2ZWw7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigp
CkBAIC0xMzYsNyArMTMyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9y
KCkKICAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFoYXZlRnJhbWVBdEluZGV4KDApKSB7CisgICAgaWYgKCFoYXZlRnJhbWVJbWFnZUF0SW5kZXgo
MCkpIHsKICAgICAgICAgSW50U2l6ZSBzaXplID0gbV9zb3VyY2UuZnJhbWVTaXplQXRJbmRleCgw
LCAwKTsKICAgICAgICAgaWYgKHNpemUud2lkdGgoKSAhPSAxIHx8IHNpemUuaGVpZ2h0KCkgIT0g
MSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0Nyw3ICsxNDMsNyBAQCB2b2lkIEJpdG1hcElt
YWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IG51bGxw
dHI7CiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSkKLSAgICAgICAgaW1hZ2UgPSBtX2ZyYW1lc1sw
XS5tX2ZyYW1lOworICAgICAgICBpbWFnZSA9IG1fZnJhbWVzWzBdLm1faW1hZ2UuZ2V0KCk7CiAK
ICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC0xNzMsMTYgKzE2OSwxNiBAQCB2
b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogCiBDR0ltYWdlUmVmIEJpdG1h
cEltYWdlOjpnZXRDR0ltYWdlUmVmKCkKIHsKLSAgICByZXR1cm4gZnJhbWVBdEluZGV4KDApOwor
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKS5nZXQoKTsKIH0KIAogQ0dJbWFnZVJlZiBC
aXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFt
ZUF0SW5kZXgoaSk7Ci0gICAgICAgIGlmIChjZ0ltYWdlICYmIEludFNpemUoQ0dJbWFnZUdldFdp
ZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpKSA9PSBzaXplKQotICAgICAg
ICAgICAgcmV0dXJuIGNnSW1hZ2U7CisgICAgICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgSW50U2l6ZShDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSkg
PT0gc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBpbWFnZS5nZXQoKTsKICAgICB9CiAKICAgICAv
LyBGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhl
IHJpZ2h0IHNpemUKQEAgLTE5Nyw4ICsxOTMsOCBAQCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0
bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCiAgICAgCiAgICAgQ0ZNdXRhYmxlQXJyYXlSZWYg
YXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5cGVBcnJheUNh
bGxCYWNrcyk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lQXRJbmRleChpKSkKLSAgICAgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lKTsKKyAgICAgICAgaWYgKE5h
dGl2ZUltYWdlUHRyIGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAg
ICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJhbWUuZ2V0KCkpOwogICAgIH0KICAg
ICByZXR1cm4gYWRvcHRDRihhcnJheSk7CiB9CkBAIC0yMTEsMTUgKzIwNywxNSBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRgogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAjZW5kaWYKIAotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKICAg
ICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29u
dGV4dHMuCiAgICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250
ZXh0KCkpKQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoY29weVVuc2NhbGVkRnJhbWVBdEluZGV4
KG1fY3VycmVudEZyYW1lKSk7CisgICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFn
ZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGVsc2UgewogICAgICAgICBDR1JlY3QgdHJh
bnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0
UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKICAgICAgICAg
ZmxvYXQgc3Vic2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFu
c2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFu
c2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsK
IAotICAgICAgICBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxp
bmdTY2FsZSk7CisgICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJh
bWUsIHN1YnNhbXBsaW5nU2NhbGUpOwogICAgIH0KIAogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0
J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgpAQCAtMjUxLDE4ICsyNDcs
MTggQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEYKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5k
aWREcmF3KHRoaXMpOwogfQogCi1QYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmNvcHlV
bnNjYWxlZEZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCitQYXNzTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkKIHsK
ICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5t
X2ZyYW1lKQorICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2lu
ZGV4XS5tX2ltYWdlKQogICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKIAogICAgIGlmICgh
bV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIENHSW1h
Z2VSZXRhaW4obV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpOworICAgICAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2U7CiAKLSAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdElu
ZGV4KGluZGV4KTsKKyAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgo
aW5kZXgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCmluZGV4IDZjMDNhMmNlZjg0NjA2
NTYxZWEwN2ViOTI4ZjFjZjI5NWY5ZjVlMzYuLjdhMTNiYjU4NDY3MDhkMzdlMDJiZDNkZDY3MjNj
MjdhNDk1MTc2YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCkBAIC0zMzMsMTAgKzMzMywxMCBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3Vu
dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fZGVjb2RlZEltYWdl
ID0gYWRvcHRDRihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CisgICAgICAgIG1fZGVj
b2RlZEltYWdlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKICAgICAgICAg
bV9jZ0ltYWdlID0gbV9kZWNvZGVkSW1hZ2UuZ2V0KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1f
Y2dJbWFnZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAg
IG1fY2dJbWFnZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkuZ2V0KCk7
CiAgICAgaWYgKCFtX2NnSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTM2LDcg
KzUzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5z
aWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnCiAgICAgY29udGV4dC5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtaW1hZ2VIZWlnaHQpOwog
ICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTm9u
ZSk7Ci0gICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY2dJbWFnZS5nZXQoKSwgaW1hZ2VTaXpl
LCBjYW52YXNSZWN0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZVNpemUpLCBDb21wb3Np
dGVDb3B5KTsKKyAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjZ0ltYWdlLCBpbWFnZVNpemUs
IGNhbnZhc1JlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSksIENvbXBvc2l0
ZUNvcHkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5k
ZXggYTQ0OTY1NDA0NmFlOGYxMGFiYWQxNjQxNWU2NDYwYWRiYmJiOGU4OC4uMTYyMDlhZjUzNDQ4
MWRiNGNkZGQ4YjQyM2NlN2JmMmE0MGIwZGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMzEx
LDggKzMxMSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgZmxvYXQgYWRqdXN0ZWRY
ID0gcGhhc2UueCgpIC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7IC8vIFdlIHRyYW5zbGF0ZWQgdGhlIGNv
bnRleHQgc28gdGhhdCBkZXN0UmVjdC54KCkgaXMgdGhlIG9yaWdpbiwgc28gc3VidHJhY3QgaXQg
b3V0LgogICAgIGZsb2F0IGFkanVzdGVkWSA9IGRlc3RSZWN0LmhlaWdodCgpIC0gKHBoYXNlLnko
KSAtIGRlc3RSZWN0LnkoKSArIHRpbGVSZWN0LnkoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
cGF0dGVyblRyYW5zZm9ybS5kKCkpICsgc2NhbGVkVGlsZUhlaWdodCk7CiAKLSAgICBDR0ltYWdl
UmVmIHRpbGVJbWFnZSA9IGltYWdlLm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAg
ZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdlKTsKKyAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gdGlsZUltYWdlID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBmbG9hdCBoID0gQ0dJbWFnZUdldEhlaWdodCh0aWxlSW1hZ2UuZ2V0KCkpOwogCiAgICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IHN1YkltYWdlOwogI2lmIFBMQVRGT1JNKElPUykKQEAgLTMy
NiwxMyArMzI2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0CiAgICAgICAgIC8vIENvcHlp
bmcgYSBzdWItaW1hZ2Ugb3V0IG9mIGEgcGFydGlhbGx5LWRlY29kZWQgaW1hZ2Ugc3RvcHMgdGhl
IGRlY29kaW5nIG9mIHRoZSBvcmlnaW5hbCBpbWFnZS4gSXQgc2hvdWxkIG5ldmVyIGhhcHBlbgog
ICAgICAgICAvLyBiZWNhdXNlIHN1Yi1pbWFnZXMgYXJlIG9ubHkgdXNlZCBmb3IgYm9yZGVyLWlt
YWdlLCB3aGljaCBvbmx5IHJlbmRlcnMgd2hlbiB0aGUgaW1hZ2UgaXMgZnVsbHkgZGVjb2RlZC4K
ICAgICAgICAgQVNTRVJUKGggPT0gaW1hZ2UuaGVpZ2h0KCkpOwotICAgICAgICBzdWJJbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdCh0aWxlSW1hZ2UsIHRpbGVSZWN0
KSk7CisgICAgICAgIHN1YkltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5S
ZWN0KHRpbGVJbWFnZS5nZXQoKSwgdGlsZVJlY3QpKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBu
ZWVkIHRvIHBhaW50IGdhcHMgYmV0d2VlbiB0aWxlcyBiZWNhdXNlIHdlIGhhdmUgYSBwYXJ0aWFs
bHkgbG9hZGVkIGltYWdlIG9yIG5vbi16ZXJvIHNwYWNpbmcsCiAgICAgLy8gZmFsbCBiYWNrIHRv
IHRoZSBsZXNzIGVmZmljaWVudCBDR1BhdHRlcm4tYmFzZWQgbWVjaGFuaXNtLgogICAgIGZsb2F0
IHNjYWxlZFRpbGVXaWR0aCA9IHRpbGVSZWN0LndpZHRoKCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsKLSAgICBmbG9hdCB3ID0gQ0dJbWFnZUdldFdpZHRo
KHRpbGVJbWFnZSk7CisgICAgZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2UuZ2V0
KCkpOwogICAgIGlmICh3ID09IGltYWdlLnNpemUoKS53aWR0aCgpICYmIGggPT0gaW1hZ2Uuc2l6
ZSgpLmhlaWdodCgpICYmICFzcGFjaW5nLndpZHRoKCkgJiYgIXNwYWNpbmcuaGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IENHIHNlZW1zIHRvIHNuYXAgdGhlIGltYWdlcyB0byBpbnRlZ3Jh
bCBzaXplcy4gV2hlbiB3ZSBjYXJlIChlLmcuIHdpdGggYm9yZGVyLWltYWdlLXJlcGVhdDogcm91
bmQpLAogICAgICAgICAvLyB3ZSBzaG91bGQgdGlsZSBhbGwgYnV0IHRoZSBsYXN0LCBhbmQgc3Rl
dGNoIHRoZSBsYXN0IGltYWdlIHRvIGZpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNWFjNGFmMTMw
MWU0YjViMWM3MjI2YTU1OWYyZjM5M2VkOGI0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwCkBAIC0wLDAgKzEs
NDEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCisjaWYgVVNFKENH
KQorCisjaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRh
dGlvbi5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworI2lmICFQTEFURk9STShJT1MpCisjaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZWxzZQor
I2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNlbmRpZgorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNpbXBvcnQgPEltYWdlSU8v
Q0dJbWFnZVNvdXJjZVByaXZhdGUuaD4KKyNlbHNlCitjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFn
ZVNvdXJjZVN1YnNhbXBsZUZhY3RvciA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZh
Y3RvciIpOworY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZUltbWVk
aWF0ZWx5ID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGVJbW1lZGlhdGVseSIpOwor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NvbnN0IENGU3RyaW5nUmVmIFdl
YkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lID0gQ0ZTVFIoIlVuY2xh
bXBlZERlbGF5VGltZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0
eUFQTkdEZWxheVRpbWUgPSBDRlNUUigiRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmluZ1JlZiBX
ZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RSKCJMb29wQ291bnQiKTsK
KworY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENG
U1RSKCJrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7Citjb25zdCBDRlN0cmluZ1Jl
ZiBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBN
ZXRhZGF0YSIpOworCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlSW1h
Z2VTb3VyY2VPcHRpb25zKFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgRGVjb2Rl
TW9kZSBkZWNvZGVNb2RlKQoreworICAgIGNvbnN0IENGSW5kZXggYmFzaWNPcHRpb25zID0gMzsK
KyAgICBjb25zdCB2b2lkKiBrZXlzW2Jhc2ljT3B0aW9ucyArIDJdID0geyBrQ0dJbWFnZVNvdXJj
ZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNv
dXJjZVNraXBNZXRhZGF0YSB9OworICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tiYXNpY09wdGlvbnMg
KyAyXSA9IHsga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9
OworICAgIENGSW5kZXggbnVtT3B0aW9ucyA9IGJhc2ljT3B0aW9uczsKKyAgICAKKyAgICBpZiAo
c3Vic2FtcGxpbmdMZXZlbCA+IDApIHsKKyAgICAgICAgc2hvcnQgY29uc3RyYWluZWRTdWJzYW1w
bGluZ0xldmVsID0gc3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJzYW1w
bGluZ0xldmVsKSk7CisgICAgICAgIGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IGNvbnN0cmFpbmVk
U3Vic2FtcGxpbmdMZXZlbDsgLy8gWzAuLjNdID0+IFsxLCAyLCA0LCA4XQorICAgICAgICBSZXRh
aW5QdHI8Q0ZOdW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVh
dGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7CisgICAgICAg
IAorICAgICAgICBrZXlzW251bU9wdGlvbnNdID0ga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0
b3I7CisgICAgICAgIHZhbHVlc1tudW1PcHRpb25zKytdID0ga0NHSW1hZ2VTb3VyY2VTdWJzYW1w
bGVGYWN0b3I7CisgICAgfQorICAgIAorICAgIGlmIChkZWNvZGVNb2RlID09IERlY29kZU1vZGU6
OkltbWVkaWF0ZSkgeworICAgICAgICBrZXlzW251bU9wdGlvbnNdID0ga0NHSW1hZ2VTb3VyY2VT
aG91bGRDYWNoZUltbWVkaWF0ZWx5OworICAgICAgICB2YWx1ZXNbbnVtT3B0aW9ucysrXSA9IGtD
RkJvb2xlYW5UcnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGUobnVsbHB0ciwga2V5cywgdmFsdWVzLCBudW1PcHRpb25zLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9
CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMo
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gMCwgRGVjb2RlTW9kZSBkZWNvZGVN
b2RlID0gRGVjb2RlTW9kZTo6TGF6eSkKK3sKKyAgICBpZiAoc3Vic2FtcGxpbmdMZXZlbCB8fCBk
ZWNvZGVNb2RlID09IERlY29kZU1vZGU6OkltbWVkaWF0ZSkKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGVNb2RlKTsKKyAgICAK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IG9w
dGlvbnMgPSBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoMCwgRGVjb2RlTW9kZTo6TGF6eSk7Cisg
ICAgcmV0dXJuIG9wdGlvbnM7Cit9CisKK3N0YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uRnJvbVByb3BlcnRpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllcykKK3sKKyAg
ICBBU1NFUlQoaW1hZ2VQcm9wZXJ0aWVzKTsKKyAgICBDRk51bWJlclJlZiBvcmllbnRhdGlvblBy
b3BlcnR5ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdlUHJvcGVydGll
cywga0NHSW1hZ2VQcm9wZXJ0eU9yaWVudGF0aW9uKTsKKyAgICBpZiAoIW9yaWVudGF0aW9uUHJv
cGVydHkpCisgICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyAgICAKKyAg
ICBpbnQgZXhpZlZhbHVlOworICAgIENGTnVtYmVyR2V0VmFsdWUob3JpZW50YXRpb25Qcm9wZXJ0
eSwga0NGTnVtYmVySW50VHlwZSwgJmV4aWZWYWx1ZSk7CisgICAgcmV0dXJuIEltYWdlT3JpZW50
YXRpb246OmZyb21FWElGVmFsdWUoZXhpZlZhbHVlKTsKK30KKyAgICAKKyNpZiAhUExBVEZPUk0o
Q09DT0EpCitzaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQqIGluZm8s
IHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKK3sKKyAgICBTaGFy
ZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8p
OworICAgIHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7CisgICAgaWYg
KHBvc2l0aW9uID49IHNvdXJjZVNpemUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGNv
bnN0IGNoYXIqIHNvdXJjZSA9IHNoYXJlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247CisgICAg
c2l6ZV90IGFtb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oY291bnQsIHNvdXJjZVNpemUgLSBwb3Np
dGlvbik7CisgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBhbW91bnQpOworICAgIHJldHVybiBh
bW91bnQ7Cit9CisKK3ZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQoreworICAg
IFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4o
aW5mbyk7CisgICAgc2hhcmVkQnVmZmVyLT5kZXJlZigpOworfQorI2VuZGlmCisKK0ltYWdlRGVj
b2Rlcjo6SW1hZ2VEZWNvZGVyKCkKK3sKKyAgICBtX25hdGl2ZURlY29kZXIgPSBDR0ltYWdlU291
cmNlQ3JlYXRlSW5jcmVtZW50YWwoMCk7Cit9CisKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VEZWNv
ZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2
ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vi
c2FtcGxpbmcgbGV2ZWxzOiAwID0gMXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXgu
CisgICAgZmxvYXQgY2xhbXBlZFNjYWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1p
bjxmbG9hdD4oMSwgc2NhbGUpKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHJlc3VsdCA9IGNlaWxm
KGxvZzJmKDEgLyBjbGFtcGVkU2NhbGUpKTsKKyAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1
bHQgPD0gMyk7CisgICAgcmV0dXJuIHN0ZDo6bWluKHJlc3VsdCwgbWF4aW11bVN1YnNhbXBsaW5n
TGV2ZWwpOworfQorCitzaXplX3QgSW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWlu
ZVByb3BlcnRpZXMoKQoreworICAgIC8vIE1lYXN1cmVkIGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxv
YyBjYWxscyBvbiBNYWMgT1MgMTAuNi42LCB4ODZfNjQuCisgICAgLy8gQSBub24temVybyB2YWx1
ZSBlbnN1cmVzIGNhY2hlZCBpbWFnZXMgd2l0aCBubyBkZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRl
cgorICAgIC8vIHRoZSBsaXZlIGRlY29kZWQgcmVzb3VyY2VzIGxpc3Qgd2hlbiB0aGUgQ0dJbWFn
ZVNvdXJjZSBkZWNvZGVzIGltYWdlCisgICAgLy8gcHJvcGVydGllcywgYWxsb3dpbmcgdGhlIGNh
Y2hlIHRvIHBydW5lIHRoZSBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZS4KKyAgICAvLyBUaGlzIHZh
bHVlIGlzIGxpa2VseSB0byBiZSBpbmFjY3VyYXRlIG9uIG90aGVyIHBsYXRmb3JtcywgYnV0IHRo
ZSBvdmVyYWxsCisgICAgLy8gYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLgorICAgIHJldHVybiAxMzA4
ODsKK30KKworU3RyaW5nIEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAor
eworICAgIENGU3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBl
KG1fbmF0aXZlRGVjb2Rlcik7CisgICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVuc2lv
bkZvckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOworfQorCitib29sIEltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBSYWduYXJvcyB5ZWxsczog
VE9PIFNPT04hIFlvdSBoYXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKKyAgICBp
ZiAoQ0dJbWFnZVNvdXJjZUdldFN0YXR1cyhtX25hdGl2ZURlY29kZXIpIDwga0NHSW1hZ2VTdGF0
dXNJbmNvbXBsZXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJj
ZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIDAsIGltYWdlU291cmNlT3B0
aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdl
MFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQorICAgICYmIENG
RGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJv
cGVydHlQaXhlbEhlaWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29u
c3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zaXplID0gZnJhbWVT
aXplQXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3QgSW1hZ2VE
ZWNvZGVyOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdl
dENvdW50KG1fbmF0aXZlRGVjb2Rlcik7Cit9CisKK2ludCBJbWFnZURlY29kZXI6OnJlcGV0aXRp
b25Db3VudCgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVy
dGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1fbmF0aXZlRGVjb2Rl
ciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisg
ICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5
UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5KTsKKyAgICBp
ZiAoZ2lmUHJvcGVydGllcykgeworICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJ
Rkxvb3BDb3VudCk7CisgICAgICAgIAorICAgICAgICAvLyBObyBwcm9wZXJ0eSBtZWFucyBsb29w
IG9uY2UuCisgICAgICAgIGlmICghbnVtKQorICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25M
b29wT25jZTsKKyAgICAgICAgCisgICAgICAgIGludCBsb29wQ291bnQ7CisgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmbG9vcENvdW50KTsKKyAgICAgICAg
CisgICAgICAgIC8vIEEgcHJvcGVydHkgd2l0aCB2YWx1ZSAwIG1lYW5zIGxvb3AgZm9yZXZlci4K
KyAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/IGxvb3BDb3VudCA6IGNBbmltYXRpb25Mb29wSW5m
aW5pdGU7CisgICAgfQorICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0g
KENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBr
Q0dJbWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgaWYgKHBuZ1Byb3BlcnRpZXMpIHsK
KyAgICAgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50KTsK
KyAgICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNl
OworICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAgICAgICAgQ0ZOdW1iZXJHZXRW
YWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOworICAgICAgICByZXR1cm4g
bG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVHVybnMgb3V0IHdlJ3JlIG5vdCBhbiBhbmltYXRlZCBpbWFnZSBhZnRlciBh
bGwsIHNvIHdlIGRvbid0IGFuaW1hdGUuCisgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworfQor
Citib29sIEltYWdlRGVjb2Rlcjo6Z2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QK
K3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihD
R0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgMCwgaW1h
Z2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnQgeCA9IC0xLCB5ID0gLTE7CisgICAgQ0ZOdW1i
ZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMu
Z2V0KCksIENGU1RSKCJob3RzcG90WCIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRW
YWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0
aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBob3RTcG90ID0gSW50UG9pbnQoeCwgeSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5
UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRp
b25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7CisgICAgCisgICAgaWYgKCFwcm9wZXJ0aWVz
KQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50
IGhlaWdodCA9IDA7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlv
bmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRo
KTsKKyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVy
SW50VHlwZSwgJndpZHRoKTsKKyAgICAKKyAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0
KTsKKyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVy
SW50VHlwZSwgJmhlaWdodCk7CisgICAgCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdo
dCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVf
dCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoZnJhbWVDb3VudCgpKTsKKyAgICByZXR1cm4g
Q0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCkgPT0g
a0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKK30KKworSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29k
ZXI6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNv
cHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9w
dGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uOworICAgIAorICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Q
cm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOworfQorCitmbG9hdCBJbWFnZURlY29kZXI6OmZy
YW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBmbG9hdCBkdXJh
dGlvbiA9IDA7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFk
b3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIs
IGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmIChwcm9wZXJ0aWVz
KSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFy
eVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3Bl
cnR5R0lGRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7CisgICAgICAg
ICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUp
KSB7CisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYg
aXQgZXhpc3RzLgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVz
LCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgeworICAgICAgICAgICAgICAgIC8vIEZh
bGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1l
IGRlbGF5IGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIENGRGljdGlvbmFyeVJlZiBwbmdQcm9wZXJ0aWVzID0g
KENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBr
Q0dJbWFnZVByb3BlcnR5UE5HRGljdGlvbmFyeSk7CisgICAgICAgIGlmIChwbmdQcm9wZXJ0aWVz
KSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKHBuZ1Byb3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5H
VW5jbGFtcGVkRGVsYXlUaW1lKSkKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51
bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICAgICAgZWxzZSBpZiAo
Q0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBuZ1By
b3BlcnRpZXMsIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lKSkKKyAgICAgICAg
ICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRp
b24pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNw
ZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBw
b3NzaWJsZS4KKyAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBk
dXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5CisgICAgLy8gYSBk
dXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0
dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+CisgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisg
ICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQorICAgICAgICByZXR1cm4gMC4xZjsKKyAgICByZXR1
cm4gZHVyYXRpb247Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZG
cmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5k
ZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAg
IGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENGRGlj
dGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpG
SUZEaWN0aW9uYXJ5KSk7CisgICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGQm9v
bGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jl
c3NpdmUpKTsKKyAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgeworICAgICAgICAgICAgYm9vbCBp
c1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKKyAgICAgICAg
ICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVu
ZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUK
KyAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBu
b3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1h
Z2VzLiBUaGlzCisgICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFy
Z2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3By
b2JsZW0vNTE5MTQxOD4pCisgICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW1hZ2VEZWNv
ZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYg
KCFmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9u
YXRpdmVEZWNvZGVyKTsKKyAgICAKKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgbm8g
aW1hZ2UgdHlwZSBvciB0aGUgaW1hZ2UgdHlwZSBpcyBKUEVHLCBiZWNhdXNlCisgICAgLy8gSlBF
RyBkb2VzIG5vdCBzdXBwb3J0IGFscGhhIHRyYW5zcGFyZW5jeS4KKyAgICBpZiAoIWltYWdlVHlw
ZSB8fCBDRkVxdWFsKGltYWdlVHlwZSwgQ0ZTVFIoInB1YmxpYy5qcGVnIikpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IENvdWxkIHJldHVybiBmYWxzZSBmb3Ig
b3RoZXIgbm9uLXRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMuCisgICAgLy8gRklYTUU6IENvdWxk
IG1heWJlIHJldHVybiBmYWxzZSBmb3IgYSBHSUYgRnJhbWUgaWYgd2UgaGF2ZSBlbm91Z2ggaW5m
byBpbiB0aGUgR0lGIHByb3BlcnRpZXMgZGljdGlvbmFyeQorICAgIC8vIHRvIGRldGVybWluZSB3
aGV0aGVyIG9yIG5vdCBhIHRyYW5zcGFyZW50IGNvbG9yIHdhcyBkZWZpbmVkLgorICAgIHJldHVy
biB0cnVlOworfQorCit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAorewor
ICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxp
bmdMZXZlbCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhlaWdo
dCgpICogNDsKK30KKworUGFzc05hdGl2ZUltYWdlUHRyIEltYWdlRGVjb2Rlcjo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWwsIERlY29kZU1vZGUgZGVjb2RlTW9kZSkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgo
bV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2
ZWwsIGRlY29kZU1vZGUpLmdldCgpKSk7CisgICAgICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNzM3MTE5OD4gLSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUg
ZGVmYXVsdCBjYWNoaW5nIGJlaGF2aW91ciBpbiBpT1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1Ry
YW5zaWVudAorICAgIC8vIHdoaWNoIGNhdXNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9y
IHVzIHNpbmNlIHRoZSBpbWFnZXMgaGFkIHRvIGJlIHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkg
dGltZSB3ZSBjYWxsZWQKKyAgICAvLyBDR0NvbnRleHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENH
IHRvIGNhY2hlIHRoZSBkcmF3biBpbWFnZXMuIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2
Njc1NT4gLQorICAgIC8vIENvcmVHcmFwaGljcyBuZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1h
Z2VDYWNoaW5nVGVtcG9yYXJ5IHNpbmNlIGl0J3Mgc3RpbGwgbm90IHRoZSBkZWZhdWx0LgorI2lm
IENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorI2Vu
ZGlmCisgICAgICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdl
Q2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAgIAor
ICAgIENGU3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVE
ZWNvZGVyKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1
YmxpYy54Yml0bWFwLWltYWdlIik7CisKKyAgICBpZiAoIWltYWdlVVRJKQorICAgICAgICByZXR1
cm4gaW1hZ2U7CisKKyAgICBpZiAoIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVUSSkpCisgICAgICAg
IHJldHVybiBpbWFnZTsKKworICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFzayBvdXQg
YWxsIHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KKyAgICBjb25z
dCBDR0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwgMjU1LCAy
NTV9OworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5nQ29sb3JzKSk7
CisgICAgcmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2UgOiBpbWFnZTsKK30KKyAgICAK
K3ZvaWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8gT24gTWFjIHRoZSBO
U0RhdGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRv
IHdpdGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4KKyAgICAvLyBXZSB1c2UgU2hh
cmVkQnVmZmVyJ3MgYWJpbGl0eSB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBh
cm91bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzCisgICAgLy8gcmVhbGx5IGxvb2tp
bmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX25h
dGl2ZURlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQp
OworI2Vsc2UKKyAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFy
ZWRCdWZmZXIuCisgICAgZGF0YS0+cmVmKCk7CisgICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0
UG9zaXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNh
dXNlIFNoYXJlZEJ1ZmZlcgorICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBk
b3duIHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdo
aWNoCisgICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVy
IGNhbGxiYWNrLgorICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2Fs
bGJhY2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJl
ZEJ1ZmZlclJlbGVhc2UgfTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+
c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0
YVByb3ZpZGVyKG1fbmF0aXZlRGVjb2RlciwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVj
ZWl2ZWQpOworI2VuZGlmCit9CisKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTU2MWFiOWUxNzc5MTcyYmYzZWQyN2ZhMDQwYTBlNDE5MWJhMTY2ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5o
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIEltYWdlRGVjb2Rlcl9oCisK
KyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7CisKK2VudW0gY2xhc3MgRGVjb2RlTW9kZSB7IEltbWVk
aWF0ZSwgTGF6eSB9OworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2NsYXNzIEltYWdlRGVjb2Rl
ciB7CitwdWJsaWM6CisgICAgSW1hZ2VEZWNvZGVyKCk7CisgICAgdmlydHVhbCB+SW1hZ2VEZWNv
ZGVyKCkgeyB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJv
cGVydGllcygpOworICAgIHN0YXRpYyBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxG
b3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdM
ZXZlbCk7CisKKyAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKyAgICBib29s
IGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAg
IHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNv
bnN0OworICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3Q7CisKKyAg
ICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25z
dDsKKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OworCisgICAg
ZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGZyYW1l
SGFzQWxwaGFBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5n
T2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJ
bmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBjb25zdDsKKworICAgIFBhc3NOYXRp
dmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2
ZWwsIERlY29kZU1vZGUgPSBEZWNvZGVNb2RlOjpMYXp5KSBjb25zdDsKKworICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsKKyAgICBDR0ltYWdlU291cmNlUmVmIG1f
bmF0aXZlRGVjb2RlcjsKK307CisgICAgCit9CisKKyNlbmRpZiAvLyBJbWFnZURlY29kZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJj
ZUNHLmNwcAppbmRleCBkNGEwMTJiNmY1N2JmNTM5MzA2NDc3N2I2YzEwOTM2NmIyNGM0NDVjLi5k
Y2Y3OWE3MmExNWU5Zjc5NDBmYWRhNmQ2MTk1YjhjZDQzNTQzM2IzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkltYWdlU291cmNlQ0cuaCIKIAogI2luY2x1ZGUgIkNv
cmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIklt
YWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKQEAgLTQ0LDQ0ICs0NSw5IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2Vu
ZGlmCiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8SW1hZ2VJTy9DR0lt
YWdlU291cmNlUHJpdmF0ZS5oPgotI2Vsc2UKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291
cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9y
Iik7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBDRlN0cmluZ1JlZiBX
ZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNs
YW1wZWREZWxheVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVy
dHlBUE5HRGVsYXlUaW1lID0gQ0ZTVFIoIkRlbGF5VGltZSIpOwotY29uc3QgQ0ZTdHJpbmdSZWYg
V2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7
Ci0KLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBD
RlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiIpOwotY29uc3QgQ0ZTdHJpbmdS
ZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lw
TWV0YWRhdGEiKTsKLQotI2lmICFQTEFURk9STShDT0NPQSkKLXNpemVfdCBzaGFyZWRCdWZmZXJH
ZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlv
biwgc2l6ZV90IGNvdW50KQotewotICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3Rh
dGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7Ci0gICAgc2l6ZV90IHNvdXJjZVNpemUgPSBz
aGFyZWRCdWZmZXItPnNpemUoKTsKLSAgICBpZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBjaGFyKiBzb3VyY2UgPSBzaGFyZWRCdWZmZXIt
PmRhdGEoKSArIHBvc2l0aW9uOwotICAgIHNpemVfdCBhbW91bnQgPSBzdGQ6Om1pbjxzaXplX3Q+
KGNvdW50LCBzb3VyY2VTaXplIC0gcG9zaXRpb24pOwotICAgIG1lbWNweShidWZmZXIsIHNvdXJj
ZSwgYW1vdW50KTsKLSAgICByZXR1cm4gYW1vdW50OwotfQotCi12b2lkIHNoYXJlZEJ1ZmZlclJl
bGVhc2Uodm9pZCogaW5mbykKLXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0
YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAgIHNoYXJlZEJ1ZmZlci0+ZGVyZWYo
KTsKLX0KLSNlbmRpZgotCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFs
cGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0gICAg
OiBtX2RlY29kZXIoMCkKIHsKICAgICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uIGFyZSBpZ25vcmVkLgogfQpAQCAtMTAwLDM1NCArNjYsMTI5IEBA
IHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZGVj
b2RlcikgewotICAgICAgICBDRlJlbGVhc2UobV9kZWNvZGVyKTsKKyAgICAgICAgZGVsZXRlIG1f
ZGVjb2RlcjsKICAgICAgICAgbV9kZWNvZGVyID0gMDsKICAgICB9CisgICAgCiAgICAgaWYgKGRh
dGEpCiAgICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KLQotc3RhdGlj
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCisgICAgCit2b2lkIEltYWdlU291cmNlOjpl
bnN1cmVEZWNvZGVySXNDcmVhdGVkKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAoIXN1
YnNhbXBsaW5nTGV2ZWwpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgbnVtT3B0aW9ucyA9IDM7
Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbbnVtT3B0aW9uc10gPSB7IGtDR0ltYWdlU291cmNl
U2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291
cmNlU2tpcE1ldGFkYXRhIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tudW1PcHRpb25z
XSA9IHsga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSB9Owot
ICAgICAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIsIGtleXMsIHZhbHVlcywg
bnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgfQotCi0gICAgc2hvcnQgY29uc3RyYWluZWRTdWJz
YW1wbGluZ0xldmVsID0gc3RkOjptaW48c2hvcnQ+KDMsIHN0ZDo6bWF4PHNob3J0PigwLCBzdWJz
YW1wbGluZ0xldmVsKSk7Ci0gICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRT
dWJzYW1wbGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCi0KLSAgICBSZXRhaW5Q
dHI8Q0ZOdW1iZXJSZWY+IHN1YnNhbXBsZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
bnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmc3Vic2FtcGxlSW50KSk7Ci0gICAgY29uc3Qg
Q0ZJbmRleCBudW1PcHRpb25zID0gNDsKLSAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNd
ID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZl
clJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSwga0NHSW1hZ2VTb3VyY2VTdWJzYW1w
bGVGYWN0b3IgfTsKLSAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJv
b2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIHN1YnNhbXBsZU51bWJl
ci5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRy
LCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBVTlVTRURfUEFSQU0o
ZGF0YSk7CisgICAgCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG1fZGVjb2RlciA9IG5ldyBJbWFnZURlY29kZXIoKTsKIH0KLQotc3RhdGljIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWwgPSAwKQorICAgIAordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmIChzdWJzYW1w
bGluZ0xldmVsKQotICAgICAgICByZXR1cm4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNh
bXBsaW5nTGV2ZWwpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25zID0g
Y3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKDApOwotICAgIHJldHVybiBvcHRpb25zOwotfQorICAg
IGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoZGF0YSk7CisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLWJv
b2wgSW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNv
ZGVyOworICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQog
Ci12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3QKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAg
bV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIE9u
IE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBh
cHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuICBXZSB1c2Ug
U2hhcmVkQnVmZmVyJ3MgYWJpbGl0eQotICAgIC8vIHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRh
dGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0IEltYWdlSU8gaXMgcmVhbGx5IGxv
b2tpbmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YSht
X2RlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwot
I2Vsc2UKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNv
dXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVy
IHRvIHdyYXAgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBkYXRhLT5yZWYoKTsKLSAgICAvLyBXZSB1
c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0
ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVmZmVyCi0gICAgLy8gZG9lcyBub3QgcHJvdmlk
ZSBhIHdheSB0byBsb2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQg
aXQgd29uJ3QgbW92ZSwgd2hpY2gKLSAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0
aGUgR2V0Qnl0ZVBvaW50ZXIgY2FsbGJhY2suCi0gICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxs
YmFja3MgcHJvdmlkZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVz
QXRQb3NpdGlvbiwgc2hhcmVkQnVmZmVyUmVsZWFzZSB9OwotICAgIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURp
cmVjdChkYXRhLCBkYXRhLT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOwotICAgIENHSW1h
Z2VTb3VyY2VVcGRhdGVEYXRhUHJvdmlkZXIobV9kZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1f
ZGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IFN0cmluZygpOwogfQogCi1TdHJpbmcgSW1h
Z2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1h
Z2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxp
bmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVj
b2RlcikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIENGU3RyaW5nUmVmIGltYWdlU291
cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OnByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5
cGUpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShz
Y2FsZSwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwogfQorICAgIAogCi1TdWJzYW1wbGluZ0xl
dmVsIEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUpIGNv
bnN0CitzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGll
cygpIGNvbnN0CiB7Ci0gICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2ZWxzOiAw
ID0gMXgsIDEgPSAwLjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCi0gICAgZmxvYXQgY2xhbXBl
ZFNjYWxlID0gc3RkOjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwgc2NhbGUp
KTsKLSAgICBpbnQgcmVzdWx0ID0gY2VpbGYobG9nMmYoMSAvIGNsYW1wZWRTY2FsZSkpOwotICAg
IEFTU0VSVChyZXN1bHQgPj0wICYmIHJlc3VsdCA8PSAzKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGll
cygpOwogfQotCisgICAgCiBib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQogewot
ICAgIC8vIFJhZ25hcm9zIHllbGxzOiBUT08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9P
IFNPT04sIEV4ZWN1dHVzIQotICAgIGlmIChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fZGVjb2Rl
cikgPCBrQ0dJbWFnZVN0YXR1c0luY29tcGxldGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlMFByb3BlcnRpZXMgPSBhZG9wdENG
KENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNv
dXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghaW1hZ2UwUHJvcGVydGllcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGlt
YWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQotICAgICAg
ICAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJ
bWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOworICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNv
ZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKIH0KIAotc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3Jp
ZW50YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQor
Ym9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBDRk51bWJl
clJlZiBvcmllbnRhdGlvblByb3BlcnR5ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKGltYWdlUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eU9yaWVudGF0aW9uKTsKLSAgICBp
ZiAoIW9yaWVudGF0aW9uUHJvcGVydHkpCi0gICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmll
bnRhdGlvbjsKLQotICAgIGludCBleGlmVmFsdWU7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1ZShvcmll
bnRhdGlvblByb3BlcnR5LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZXhpZlZhbHVlKTsKLSAgICByZXR1
cm4gSW1hZ2VPcmllbnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOworICAgIHJldHVy
biBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdElu
ZGV4KGluZGV4KTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJh
bWVBdEluZGV4KHNpemVfdCkgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0
SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikg
Y29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRv
cHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1h
Z2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0
YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGll
cy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7Ci0gICAgaWYgKGpmaWZQ
cm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNf
Y2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBr
Q0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKLSAgICAgICAgaWYgKGlzUHJvZ0NG
Qm9vbCkgewotICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFs
dWUoaXNQcm9nQ0ZCb29sKTsKLSAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8v
cHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUg
SlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKLSAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBm
b3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0
IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCi0gICAgICAgICAgICAvLyB3aWxs
IGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3Qg
YmUgZGVjb2RlZC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5n
IGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCi0gICAgICAgICAgICBy
ZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0
SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2
ZWwpLmdldCgpKSk7Ci0KLSAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgaWYgKCFpbml0aWFsaXpl
ZCgpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgaW50IHdpZHRoID0gMDsKLSAg
ICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVs
V2lkdGgpOwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZO
dW1iZXJJbnRUeXBlLCAmd2lkdGgpOwotICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25h
cnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQp
OwotICAgIGlmIChudW0pCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmaGVpZ2h0KTsKLQotICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9t
UHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKS51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAg
ICByZXR1cm4gSW50U2l6ZShoZWlnaHQsIHdpZHRoKTsKKyAgICBJbnRTaXplIHNpemUgPSBtX2Rl
Y29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIElt
YWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBtX2RlY29kZXItPm9yaWVudGF0aW9uQXRJbmRl
eChpbmRleCk7CiAKLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1
cm4gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRp
b24gJiYgb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNp
emUoKSA6IHNpemU7CiB9CiAKIEltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0
aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVz
QXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwot
ICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0
aW9uOwotCi0gICAgcmV0dXJuIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5n
ZXQoKSk7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPm9yaWVudGF0aW9u
QXRJbmRleChpbmRleCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKIH0KIAotSW50U2l6ZSBJ
bWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24p
IGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZnJhbWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIGZyYW1lU2l6
ZUF0SW5kZXgoMCwgMCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9p
bnQmIGhvdFNwb3QpIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09y
aWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9w
ZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVj
b2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRp
ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCB4ID0gLTEsIHkgPSAtMTsKLSAg
ICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
cGVydGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RYIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51
bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJngpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
cGVydGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RZIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51
bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJnkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoeCA8IDAgfHwgeSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGhvdFNwb3QgPSBJbnRQb2ludCh4LCB5KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CiB9
CiAKLXNpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVz
KCkgY29uc3QKK2Jvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3Qp
IGNvbnN0CiB7Ci0gICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9jIGNhbGxz
IG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KLSAgICAvLyBBIG5vbi16ZXJvIHZhbHVlIGVuc3Vy
ZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVyCi0gICAg
Ly8gdGhlIGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVuIHRoZSBDR0ltYWdlU291cmNl
IGRlY29kZXMgaW1hZ2UKLSAgICAvLyBwcm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUgY2FjaGUgdG8g
cHJ1bmUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgotICAgIC8vIFRoaXMgdmFsdWUgaXMg
bGlrZWx5IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZvcm1zLCBidXQgdGhlIG92ZXJh
bGwKLSAgICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCi0gICAgcmV0dXJuIDEzMDg4OworICAg
IHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVyLT5nZXRIb3RTcG90KGhvdFNwb3QpOwogfQot
ICAgIAorCiBpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCiB7Ci0gICAgaWYgKCFp
bml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNv
dXJjZUNvcHlQcm9wZXJ0aWVzKG1fZGVjb2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkp
KTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9u
Y2U7Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0
eUdJRkRpY3Rpb25hcnkpOwotICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVt
YmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0
aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGTG9vcENvdW50KTsKLQotICAgICAgICAvLyBObyBwcm9w
ZXJ0eSBtZWFucyBsb29wIG9uY2UuCi0gICAgICAgIGlmICghbnVtKQotICAgICAgICAgICAgcmV0
dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQotICAgICAgICBpbnQgbG9vcENvdW50OwotICAgICAg
ICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0K
LSAgICAgICAgLy8gQSBwcm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVyLgot
ICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZp
bml0ZTsKLSAgICB9Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRp
Y3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1h
Z2VQcm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7Ci0gICAg
ICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
bmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCk7Ci0gICAg
ICAgIGlmICghbnVtKQotICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQot
ICAgICAgICBpbnQgbG9vcENvdW50OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NG
TnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0gICAgICAgIHJldHVybiBsb29wQ291bnQgPyBs
b29wQ291bnQgOiBjQW5pbWF0aW9uTG9vcEluZmluaXRlOwotICAgIH0KLQotICAgIC8vIFR1cm5z
IG91dCB3ZSdyZSBub3QgYW4gYW5pbWF0ZWQgaW1hZ2UgYWZ0ZXIgYWxsLCBzbyB3ZSBkb24ndCBh
bmltYXRlLgotICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6
ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTG9vcE9uY2U7
CiB9CiAKIHNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZGVjb2RlciA/IENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX2RlY29kZXIpIDogMDsKKyAg
ICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQogCi1D
R0ltYWdlUmVmIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCitQYXNzTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2Ug
PSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9kZWNvZGVyLCBpbmRl
eCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBo
aWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBr
Q0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5j
ZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQv
cmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdl
LiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRh
cjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4t
ZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0
aGUgZGVmYXVsdC4KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRl
Y2xhcmF0aW9ucyIKLSNlbmRpZgotICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0
KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLSNlbmRpZiAvLyBQTEFURk9STShJT1Mp
Ci0KLSAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVj
b2Rlcik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJs
aWMueGJpdG1hcC1pbWFnZSIpOwotCi0gICAgaWYgKCFpbWFnZVVUSSkKLSAgICAgICAgcmV0dXJu
IGltYWdlLmxlYWtSZWYoKTsKLQotICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkK
LSAgICAgICAgcmV0dXJuIGltYWdlLmxlYWtSZWYoKTsKLSAgICAKLSAgICAvLyBJZiBpdCBpcyBh
biB4Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJlYXMgdG8gcmVuZGVyIHRoZW0g
dHJhbnNwYXJlbnQuCi0gICAgY29uc3QgQ0dGbG9hdCBtYXNraW5nQ29sb3JzWzZdID0gezI1NSwg
MjU1LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbWFz
a2VkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9ycyhpbWFnZS5n
ZXQoKSwgbWFza2luZ0NvbG9ycykpOwotICAgIGlmICghbWFza2VkSW1hZ2UpCi0gICAgICAgIHJl
dHVybiBpbWFnZS5sZWFrUmVmKCk7Ci0KLSAgICByZXR1cm4gbWFza2VkSW1hZ2UubGVha1JlZigp
OworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdl
QXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOwogfQogCiBib29sIElt
YWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBB
U1NFUlQoZnJhbWVDb3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0
SW5kZXgobV9kZWNvZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKKyAgICBy
ZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgo
aW5kZXgpOwogfQogCiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6
ZV90IGluZGV4KQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRl
eChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlm
IChwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0g
KENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBr
Q0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVz
KSB7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1w
ZWREZWxheVRpbWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJh
bWUgZGVsYXkgaWYgaXQgZXhpc3RzLgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShn
aWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5j
bGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGll
cyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgICAgICBpZiAocG5nUHJvcGVy
dGllcykgewotICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5
QVBOR1VuY2xhbXBlZERlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
bmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAg
ICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1
cmF0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNw
ZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBw
b3NzaWJsZS4KLSAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBk
dXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBk
dXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0
dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+Ci0gICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0g
ICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQotICAgICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1
cm4gZHVyYXRpb247CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1l
RHVyYXRpb25BdEluZGV4KGluZGV4KSA6IDA7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1l
SGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBGSVhNRTogd2h5IGRvZXNuJ3QgdGhpcyByZXR1cm4gdHJ1
ZT8KLQotICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdl
dFR5cGUobV9kZWNvZGVyKTsKLQotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBp
bWFnZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKLSAgICAvLyBKUEVH
IGRvZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIGlmICghaW1hZ2VUeXBl
IHx8IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVy
IG5vbi10cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzLgotICAgIC8vIEZJWE1FOiBDb3VsZCBtYXli
ZSByZXR1cm4gZmFsc2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4g
dGhlIEdJRiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhl
ciBvciBub3QgYSB0cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFB
dEluZGV4KGluZGV4KTsKIH0KIAogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdElu
ZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25z
dAogewotICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKSk7Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhl
aWdodCgpICogNDsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZnJhbWVC
eXRlc0F0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogMDsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNERWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzREVmbC5jcHAKaW5kZXggYmE0MTU5N2FhMTEwMWRiNjI5MDIzZDI3M2IyMDBlNzgx
ZDMzYWFjOS4uNTljYzJjOWJlOGIzZmZlMTExODZhNjg1ZDJlOGNmNTk0YzFkMzkzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNERWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0yNjMsNyArMjYzLDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5m
cmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCk7Cisg
ICAgICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgw
KTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJEIHdp
dGggSFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBoYWQg
YmVlbiBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3IgZWFjaCBwaXhlbCwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KaW5k
ZXggMjE1OTE1ZjI4YTE5MjE3MjM5NmQ0NmYwODZkMjI0OWI4MWQ5ZDc2YS4uZTE4MzNkMTk4MzBi
MTA3NjYzNjY0YjYxMjg0NDU5N2Y4M2ZjMGE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIAotSWNvbjo6SWNvbihDR0ltYWdlUmVmIGltYWdlKQorSWNvbjo6
SWNvbihOYXRpdmVJbWFnZVB0ciBpbWFnZSkKICAgICA6IG1fY2dJbWFnZShpbWFnZSkKIHsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpp
bmRleCBmZjA3MTMxYTYxZmNlZDA0NTg2YjM3MmQ5YmEyMDc5YTk4NzNjMzhiLi5mYTAxMWFhODgx
NjMwMzAwMDk0NDk4ZWJjMGZmY2E5ZmI5YzMwMzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCkBAIC05NSw3ICs5NSw3IEBAIENGRGF0
YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKIAogICAgIFZlY3RvcjxD
R0ltYWdlUmVmPiBpbWFnZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1l
czsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUF0SW5kZXgoaSk7
CisgICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgp
OwogICAgICAgICBpZiAoY2dJbWFnZSkKICAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFn
ZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ0dXaW4uY3BwCmluZGV4IDgzNWVjZjNmNGZlZWViOGEwZGZhOGQzNjk3MzEyOGYzYjgw
N2I5MjYuLjQ3MDczYzBlZDY5MGUwNDRmZmIzYTk0ZTU4NmYyNjAyNzlkMWM0YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAK
QEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3Vy
Y2VTaXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXQKIHsKICAgICBzaXplX3Qg
ZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVz
OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleChpKTsKKyAg
ICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwogICAg
ICAgICBpZiAoaW1hZ2UgJiYgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8
c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09IHN0
YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS53aWR0aCgpKSkgewogICAgICAgICAgICAgc2l6ZV90
IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwogICAgICAgICAgICAgbV9jdXJyZW50RnJh
bWUgPSBpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDI5YTIwMjNkYjYzYTkxNDM0YzM5NDhlYWE1NTIzYmI2
MWZlODEwNzUuLjk3ZWQwOTc5MzVjNTFmYzIwYTg0NWM5NThlMTU2OThkMjAwMGRiODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWly
b1dpbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0
Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXQKIHsKICAg
ICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnJhbWVzOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFj
ZSA9IGZyYW1lQXRJbmRleChpKTsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3Vy
ZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOwogICAgICAgICBpZiAoIXN1cmZhY2UpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL0RyYWdJbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1h
Z2VNYWMubW0KaW5kZXggYmJhZTkxZmE4ZTNjMDY2NDQ3YzQ2NGQ2ZTMxMjAwZGUyNDhjZTgzZi4u
OTFjOTJlOTEyY2MyMTg5MmY2NTllNjdhOTU5NTcxZmJkZDAwMjdiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCkBAIC05MSw3ICs5MSw3IEBAIFJldGFp
blB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpCiAgICAgaWYgKGlzPEJpdG1hcEltYWdlPigqaW1hZ2UpKSB7CiAg
ICAgICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247CiAgICAgICAgIEJpdG1hcEltYWdl
JiBiaXRtYXBJbWFnZSA9IGRvd25jYXN0PEJpdG1hcEltYWdlPigqaW1hZ2UpOwotICAgICAgICBJ
bnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBiaXRtYXBJbWFnZS5zaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigp
OwogCiAgICAgICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09
IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQogICAgICAgICAgICAgb3JpZW50YXRpb24gPSBiaXRt
YXBJbWFnZS5vcmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273936</attachid>
            <date>2016-03-14 01:08:22 -0700</date>
            <delta_ts>2016-03-25 20:38:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160314010809.patch</filename>
            <type>text/plain</type>
            <size>92532</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjOThmYzYxZmI4ZmUx
ZTAxYTY5MWNjNzg0OTM0NmU1YTkwNzI1MC4uYjNlYTg3ODE2N2ZlZjgzYTMxNzkwNDNhZTNmNmNm
NmE1ZTdmNmU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MSBAQAorMjAxNi0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU0MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBpbWFnZSBkZWNvZGluZyBjb2RlIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAg
b3V0IHRvIGEgbmV3IGNsYXNzIG5hbWVkCisgICAgICAgIEltYWdlRGVjb2Rlci4gVGhlIHB1cnBv
c2Ugb2YgdGhpcyBzcGxpdCBpcyB0byBoYXZlIHRoZSBDRyBJbWFnZVNvdXJjZSBzaW1pbGFyCisg
ICAgICAgIHRvIHRoZSBub25lIENHIEltYWdlU291cmNlIHdoZXJlIHRoZXJlIGlzIGEgc2VwYXJh
dGUgY2xhc3MgZm9yIGRlY29kaW5nLiBUaGUKKyAgICAgICAgcGxhbiBpcyB0byBtZXJnZSB0aGUg
SW1hZ2VTb3VyY2UuY3BwIGFuZCBJbWFnZVNvdXJjZUNHLmNwcCBpbiBvbmUgZmlsZSBzbworICAg
ICAgICBkZWNpZGluZyB3aGV0aGVyIHRoZSBkZWNvZGluZyBzaG91bGQgaGFwcGVuIHN5bmNocm9u
b3VzbHkgb3IgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgY2FuIGhhcHBlbiBpbiBvbmUgcGxhY2Ug
YW5kIHRoZSBjYWNoaW5nIG9mIHRoZSBmcmFtZXMgY2FuIGJlIGhhbmRsZWQgYnkgdGhlCisgICAg
ICAgIEltYWdlU291cmNlIGFzIHdlbGwuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRl
cmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmR1bXApOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcElt
YWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjppbWFnZVNvdXJjZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVk
QnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTsKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZl
clJlbGVhc2UpOworICAgICAgICAoV2ViQ29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
OjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpnZXRI
b3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1l
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6fkltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmVuc3VyZURl
Y29kZXJJc0NyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFt
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpm
cmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlv
bkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkQnVmZmVyUmVsZWFzZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1hZ2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNlT3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9C
aXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXRl
cm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk6CisKKzIwMTYtMDMtMTMgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBDaGFuZ2UgTmF0aXZl
SW1hZ2VQdHIgZm9yIENHIHRvIGJlIFJldGFpblB0cjxDR0ltYWdlUmVmPgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2aW5nIE5hdGl2ZUltYWdlUHRy
IGFzIGEgcmF3IHBvaW50ZXIgbWFrZXMgbWFuYWdpbmcgdGhlIGxpZmUgY3ljbGUgb2YKKyAgICAg
ICAgdGhlIENHSW1hZ2VSZWYgaGFyZC4gQSBsb3Qgb2Ygd29ya3Mgd2FzIGRvbmUgdG8gbWFrZSBz
dXJlIHRoZSBDRyBwb2ludGVyCisgICAgICAgIGlzIG1haW50YWluZWQgY29ycmVjdGx5LiBJdCB3
YXMgYWxzbyBub3QgcG9zc2libGUgdG8gbW92ZSBhIEZyYW1lRGF0YSBzaW5jZQorICAgICAgICBj
YWxsaW5nIHRoZSBkZXN0cnVjdG9yIHdhcyByZWxlYXNpbmcgdGhlIENHSW1hZ2VSZWYuCisKKyAg
ICAgICAgSSBhbSBnb2luZyB0byBmb2xsb3cgdGhpcyBuYW1pbmcgY29udmVudGlvbjoKKyAgICAg
ICAgMS4gQW4gSW1hZ2Ugb2JqZWN0IGNhbiBoYXZlIG9uZSBvciBtb3JlIEZyYW1lRGF0YS4gQSBG
cmFtZURhdGEgY2FuIGJlIG5hbWVkCisgICAgICAgICAgIGZvciBzaG9ydG5lc3MgYXMgImZyYW1l
IiwgIm1fZnJhbWVzIiwgZXRjLgorICAgICAgICAyLiBBIEZyYW1lRGF0YSBjYW4gaGF2ZSB6ZXJv
IG9yIG9uZSBOYXRpdmVJbWFnZVB0ci4gQSBOYXRpdmVJbWFnZVB0ciBjYW4KKyAgICAgICAgICAg
YmUgbmFtZWQgYXMgImltYWdlIiwgIm1faW1hZ2UiLCBldGMuCisKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmFk
ZEltYWdlVG9DYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SWNvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNr
Rm9yU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFn
ZVJlZik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVm
T2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpl
eHRyYWN0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
VG9DYW52YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6
OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpJY29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1l
TWF0Y2hpbmdTb3VyY2VTaXplKToKKwogMjAxNi0wMy0xMiAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtGb3JtczogZm9jdXNdIGZvY3VzIHJpbmdzIGFyb3VuZCB0
ZXh0IGZpZWxkcyBkbyBub3QgZm9sbG93IGNvbnRvdXIgKGJvcmRlci1yYWRpdXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBlNTIwOWNiMjBjZjAzMzg3YTI1MjY0M2Rm
NGUwYjIxNTE0OTIwNGY3Li43YjM2N2E3M2FjOWUxNWJkOTVjODljOTdhMzZhMGYwMjVmNzI4MDc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTcxLDYgKzcxLDcgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZVNvdXJjZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dX
aW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKaW5kZXggODM1YjlhYTIyNGFhOWVhYWVlMDQ2MjMzOTdlOTkwMTZlOWY3
ZWViZi4uZGFjZGE1NjkxYTY1YzY2NTYwNjNhNGMwNzA2YzEwYTBlZmI2MjE0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKQEAgLTQwMCw2ICs0MDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDMwN2JhMzhmZjBmM2E0YzQ3MWI5ZDQy
OTE0NjE2MmE5NTllZTc2Ni4uNmI2MjkzMTMzN2EwYzcxOTU5OWM2MjU2OTE0YWMyMjJhMTVhOGE1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjI5MSw2ICsyMjkxLDggQEAKIAkJNTNFRjc2NkMxNjUzMTk5NDAwNENCRTQ5IC8q
IFNldHRpbmdzTWFjcm9zLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGlu
Z3NNYWNyb3MuaCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmll
ZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1
NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1NTlCQjg3OTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OUJCODc3
MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuY3BwICovOyB9OworCQk1NTlCQjg3QTFD
OTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTlCQjg3ODFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VE
ZWNvZGVyLmggKi87IH07CiAJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRD
bGljay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcy
QTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi87IH07CiAJCTU3MkE3
RjIzMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkg
LyogU2ltdWxhdGVkQ2xpY2suY3BwICovOyB9OwogCQk1ODAzNzE2MTFBNjZGMDBBMDBCQUY1MTkg
LyogQ2xpcFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTgwMzcxNUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCAqLzsgfTsKQEAg
LTk4NzUsNiArOTg3Nyw4IEBACiAJCTUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5n
c01hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR0aW5nc01hY3Jv
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUz
RDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYw
MzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTU1OUJCODc3MUM5NjQ2
NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTU5QkI4NzgxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZURlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNp
bXVsYXRlZENsaWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRl
ZENsaWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYw
MDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTaW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMTgzMyw2ICsyMTgzNyw4IEBACiAJCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8q
IEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKIAkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYg
LyogSW1hZ2VDRy5jcHAgKi8sCisJCQkJNTU5QkI4NzcxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdl
RGVjb2Rlci5jcHAgKi8sCisJCQkJNTU5QkI4NzgxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVj
b2Rlci5oICovLAogCQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNH
LmNwcCAqLywKIAkJCQk0QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5o
ICovLAogCQkJCTRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1t
ICovLApAQCAtMjY4MTIsNiArMjY4MTgsNyBAQAogCQkJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgz
QSAvKiBKU1NjcmlwdFByb2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGQTM3RUZC
MTE3MkZEQTYwMEM0Q0Q1NSAvKiBKU1NjcmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTlGQTM3RUZEMTE3MkZEQTYwMEM0Q0Q1NSAvKiBKU1NjcmlwdFByb2ZpbGVOb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTlCQjg3QTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRUQwNkFEMTFDNzc3NTQ4MDBGREZBRjEgLyogSlNTZWN1cml0
eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkRBNjREODFCOTc1
Q0YyMDA5QzQzODcgLyogSlNTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDlERTE3
QjE3QUFDNzVCMDBFQTM4NkQgLyogSlNTb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MjkyMDMsNiArMjkyMTAsNyBAQAogCQkJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNGMzMyNDBGMkI5NzE1MDA0QjY3OTUgLyogQ29s
b3JDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDOTExRDIwRTQ3MDA0QzIwMUMgLyog
Q29sb3JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTU1OUJCODc5MUM5NjQ2NTgwMDI0MTND
RCAvKiBJbWFnZURlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyOTkzNUQxN0ExREQ1
ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUz
NTc3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQz
RURENjdFMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
CmluZGV4IGYzNzg3NTIxZGRmZmY2ODJiZDg4ZTY0NzJjYWYwNjI1ZTNmMDQ1NDQuLjlhMTQ3NTc4
ODM3ZmNkZTEzMTBkMWFkMTA2MjJiN2JiNzA2ODRhZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcApAQCAtMjc4LDcgKzI3OCw3IEBAIExheW91dFNpemUg
Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGZsb2F0CiAgICAgaWYgKHJlbmRlcmVyICYmIGlzPEJpdG1hcEltYWdlPigqbV9pbWFn
ZSkpIHsKICAgICAgICAgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIG9yaWVudGF0aW9uRGVz
Y3JpcHRpb24ocmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCksIHJlbmRl
cmVyLT5zdHlsZSgpLmltYWdlT3JpZW50YXRpb24oKSk7CiAgICAgICAgIGlmIChvcmllbnRhdGlv
bkRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24pCi0gICAgICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25jYXN0PEJp
dG1hcEltYWdlPigqbV9pbWFnZSkuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihvcmllbnRhdGlv
bkRlc2NyaXB0aW9uKSk7CisgICAgICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25j
YXN0PEJpdG1hcEltYWdlPigqbV9pbWFnZSkuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpKTsK
ICAgICB9CiAjZWxzZQogICAgIGlmIChpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpICYmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmNwcAppbmRleCA5OTk0NjVlYTM5MDY5N2NiZTAwZmU2ZmE4ODM4YzEzOGU1NDQ3YTE3
Li44NDZjMGRjOTM4NGU3NWRiYTA4MjBjMjgwZmI2NDFjZThhMDhmMTYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKQEAgLTIyNSw4ICsyMjUsNiBAQCBi
b29sIE1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsIGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdAogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZEltYWdl
PiBjYWNoZWRJbWFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkSW1hZ2U+KHVybCwgYml0bWFw
SW1hZ2UuZ2V0KCksIENhY2hlZEltYWdlOjpNYW51YWxseUNhY2hlZCwgc2Vzc2lvbklEKTsKIAot
ICAgIC8vIEFjdHVhbCByZWxlYXNlIG9mIHRoZSBDR0ltYWdlUmVmIGlzIGRvbmUgaW4gQml0bWFw
SW1hZ2UuCi0gICAgQ0ZSZXRhaW4oaW1hZ2UpOwogICAgIGNhY2hlZEltYWdlLT5hZGRDbGllbnQo
JmR1bW15Q2FjaGVkSW1hZ2VDbGllbnQoKSk7CiAgICAgY2FjaGVkSW1hZ2UtPnNldERlY29kZWRT
aXplKGJpdG1hcEltYWdlLT5kZWNvZGVkU2l6ZSgpKTsKICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElU
SU9OSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCmluZGV4IGZhZjBmODY5NjJjM2ZiNjU3Nzc0NWJmYWY3NWI0Yzg0ZDgwY2MwNjAuLjk2
NDBlZTJiMzg0MmY3YzJjZDA2MDBiNDA2OWE4ZTE3NTMzYTA1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTQ3LDkgKzQ3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11
bVN1YnNhbXBsaW5nTGV2ZWwoMCkKLSAgICAsIG1faW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BM
ZWZ0KQotICAgICwgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAs
IG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9u
ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCkBAIC05Niw3ICs5Myw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoZG91YmxlIGRlbGF5KQogICAgIG1fZnJh
bWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsKIH0KIAotYm9vbCBCaXRtYXBJbWFnZTo6aGF2
ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCitib29sIEJpdG1hcEltYWdlOjpoYXZlRnJhbWVJ
bWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNCw3ICsxMDEsNyBAQCBib29sIEJpdG1h
cEltYWdlOjpoYXZlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9m
cmFtZXNbaW5kZXhdLm1fZnJhbWU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdl
OwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0
CkBAIC0xODQsOSArMTgxLDkgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3Qg
aW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW0KICAgICAgICAgbV9m
cmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCiAgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1l
dGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUgPSBtX3Nv
dXJjZS5jcmVhdGVGcmFtZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgICAg
ICBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSA9IG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKICAgICAgICAgbV9mcmFtZXNbaW5kZXhdLm1f
c3Vic2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7Ci0gICAgICAgIGlmIChudW1GcmFt
ZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICAgICAgaWYgKG51bUZyYW1l
cyA9PSAxICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQogICAgICAgICAgICAgY2hlY2tGb3JT
b2xpZENvbG9yKCk7CiAgICAgfQogCkBAIC0yMDQsNyArMjAxLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbCwgSW0KICAgICBpZiAoIXN1YnNhbXBsaW5nTGV2ZWwgJiYgZnJhbWVTaXplICE9IG1fc2l6
ZSkKICAgICAgICAgbV9oYXNVbmlmb3JtRnJhbWVTaXplID0gZmFsc2U7CiAKLSAgICBpZiAobV9m
cmFtZXNbaW5kZXhdLm1fZnJhbWUpIHsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faW1hZ2Up
IHsKICAgICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4
XS5tX2ZyYW1lQnl0ZXMpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAg
ICAgICAgIC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlh
bGx5IGRlY29kZWQgZGF0YSB1c2VkCkBAIC0yMzYsMTYgKzIzMywxMyBAQCB2b2lkIEJpdG1hcElt
YWdlOjpkaWREZWNvZGVQcm9wZXJ0aWVzKCkgY29uc3QKICAgICAgICAgaW1hZ2VPYnNlcnZlcigp
LT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgZGVsdGFCeXRlcyk7CiB9CiAKLXZvaWQgQml0bWFw
SW1hZ2U6OnVwZGF0ZVNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KSBjb25zdAordm9pZCBCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX3NpemVBdmFpbGFibGUgfHwgbV9oYXZlU2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9zaXplID0gbV9zb3VyY2Uuc2l6ZShkZXNjcmlwdGlvbik7Ci0gICAgbV9zaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uID0gbV9zb3VyY2Uuc2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24o
UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSkp
OwotCi0gICAgbV9pbWFnZU9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2Ny
aXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7Ci0gICAgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbigpKTsKKyAgICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKCk7CisgICAgbV9zaXpl
UmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zb3VyY2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bigpOwogCiAgICAgbV9oYXZlU2l6ZSA9IHRydWU7CiAKQEAgLTI1OSw5ICsyNTMsOSBAQCBGbG9h
dFNpemUgQml0bWFwSW1hZ2U6OnNpemUoKSBjb25zdAogICAgIHJldHVybiBtX3NpemU7CiB9CiAK
LUludFNpemUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBCaXRtYXBJbWFn
ZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgdXBkYXRlU2l6ZShk
ZXNjcmlwdGlvbik7CisgICAgdXBkYXRlU2l6ZSgpOwogICAgIHJldHVybiBtX3NpemVSZXNwZWN0
aW5nT3JpZW50YXRpb247CiB9CiAKQEAgLTM3OSwyMyArMzczLDIzIEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRleCA+PSBtX2Zy
YW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5k
RnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgICAgICB8fCAoZnJhbWVDYWNo
aW5nID09IENhY2hlTWV0YWRhdGFBbmRGcmFtZSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2Up
CiAgICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgJiYgIW1fZnJh
bWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIDAs
IGZyYW1lQ2FjaGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9hdCBwcmVzZW50
YXRpb25TY2FsZUhpbnQpCitQYXNzTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50KQogewog
ICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gc3RkOjptaW4obV9zb3Vy
Y2Uuc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKHByZXNlbnRhdGlvblNjYWxlSGludCksIG1fbWlu
aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbCA9IG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShwcmVzZW50YXRpb25TY2Fs
ZUhpbnQsIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwogCiAgICAgLy8gV2UgbWF5IGhhdmUg
Y2FjaGVkIGEgZnJhbWUgd2l0aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2gg
Y2FzZSB3ZSBuZWVkIHRvCiAgICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAg
ICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUg
JiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwp
IHsKKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1f
aW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5n
TGV2ZWwpIHsKICAgICAgICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQg
YXQgdG9vIHNtYWxsIGEgc2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCiAgICAgICAg
IGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7CiAgICAgICAg
IG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKTsKQEAgLTQwNiwxMCArNDAwLDEwIEBAIFBhc3NO
YXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2NhCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6
ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKICAgICAgICAgY2FjaGVGcmFtZShpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKIAotICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1f
aW1hZ2U7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQpAQCAtNDMwLDcgKzQyNCw3IEBAIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiAKIFBhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQogewotICAgIHJldHVybiBmcmFtZUF0
SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleChjdXJy
ZW50RnJhbWUoKSk7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCBpbmRleCkKQEAgLTcxNCw5ICs3MDgsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93LXN1
YnNhbXBsaW5nIiwgYWxsb3dTdWJzYW1wbGluZygpKTsKICAgICBpZiAobV9pc1NvbGlkQ29sb3Ip
CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic29saWQtY29sb3IiLCBtX2lzU29saWRDb2xvcik7
Ci0gICAgCi0gICAgaWYgKG1faW1hZ2VPcmllbnRhdGlvbiAhPSBPcmlnaW5Ub3BMZWZ0KQotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoIm9yaWVudGF0aW9uIiwgbV9pbWFnZU9yaWVudGF0aW9uKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmgKaW5kZXggNzQ5M2M2YTRiZmI4NjNkOTc2MzdjNDljNDY0Y2MzN2FlNzhlMGEwNC4uNzY5YWYx
YWYxMjJiMGU1ZTdkYmNiYmU5YmQwNzIwZjc0NjgxYWVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC00NywxNiArNDcsNiBAQCB0eXBl
ZGVmIHN0cnVjdCBIQklUTUFQX18gKkhCSVRNQVA7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIHN0cnVjdCBGcmFtZURhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXVEYgewotICAgIHRl
bXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpGcmFtZURhdGE+IDogcHVibGlj
IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2Fu
SW5pdGlhbGl6ZVdpdGhNZW1zZXQgPSBmYWxzZTsgLy8gTm90IGFsbCBGcmFtZURhdGEgbWVtYmVy
cyBpbml0aWFsaXplIHRvIDAuCi0gICAgfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBUaW1lcjsKIApAQCAtNjUsMTcgKzU1LDggQEAgY2xhc3MgVGltZXI7CiAvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogc3RydWN0IEZyYW1l
RGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJhbWVEYXRhKTsKIHB1YmxpYzoKICAg
ICBGcmFtZURhdGEoKQotICAgICAgICA6IG1fZnJhbWUoMCkKLSAgICAgICAgLCBtX29yaWVudGF0
aW9uKERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICAsIG1fc3Vic2FtcGxpbmdMZXZl
bCgwKQotICAgICAgICAsIG1fZHVyYXRpb24oMCkKLSAgICAgICAgLCBtX2hhdmVNZXRhZGF0YShm
YWxzZSkKLSAgICAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBo
YSh0cnVlKSAKLSAgICAgICAgLCBtX2ZyYW1lQnl0ZXMoMCkKICAgICB7CiAgICAgfQogCkBAIC04
NCwxOCArNjUsMjIgQEAgcHVibGljOgogICAgICAgICBjbGVhcih0cnVlKTsKICAgICB9CiAKLSAg
ICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRhdGEgb24gdGhlIGZyYW1lLCBhbmQgKG9wdGlv
bmFsbHkpIHRoZSBtZXRhZGF0YS4KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2FzIGNh
Y2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgogICAgIGJvb2wgY2xlYXIoYm9vbCBjbGVhck1ldGFk
YXRhKTsKLQotICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJhbWU7Ci0gICAgSW1hZ2VPcmllbnRhdGlv
biBtX29yaWVudGF0aW9uOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVs
OwotICAgIGZsb2F0IG1fZHVyYXRpb247Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0g
ICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAg
dW5zaWduZWQgbV9mcmFtZUJ5dGVzOworICAgIE9wdGlvbmFsPENvbG9yPiBzb2xpZENvbG9yKCkg
Y29uc3Q7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlv
biB7IDAgfTsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBib29s
IG1faGF2ZU1ldGFkYXRhIDogMTsKKyAgICAgICAgICAgIGJvb2wgbV9pc0NvbXBsZXRlIDogMTsK
KyAgICAgICAgICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7CisgICAgICAgIH07CisgICAgICAgIHVp
bnQ4X3QgbV9mbGFnc1tzaXplb2YoYm9vbCldIHsgMCB9OworICAgIH07CisgICAgdW5zaWduZWQg
bV9mcmFtZUJ5dGVzIHsgMCB9OwogfTsKIAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTI1LDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIEZsb2F0U2l6ZSBkdWUgdG8gb3ZlcnJpZGUuCiAgICAgRmxvYXRTaXplIHNpemUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNv
bnN0OworICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0OwogCiAg
ICAgYm9vbCBnZXRIb3RTcG90KEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTE4OSw3
ICsxNzQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgdXBkYXRlU2l6ZShJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkg
Y29uc3Q7CisgICAgdm9pZCB1cGRhdGVTaXplKCkgY29uc3Q7CiAgICAgdm9pZCBkZXRlcm1pbmVN
aW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0yMTQsMTAg
KzE5OSwxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogCi0gICAg
UGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlv
blNjYWxlSGludCA9IDEpOwotICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFt
ZUF0SW5kZXgoc2l6ZV90KTsKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBmbG9hdCBwcmVzZW50YXRpb25TY2FsZUhpbnQgPSAxKTsKKyAgICBQYXNzTmF0
aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAotICAg
IGJvb2wgaGF2ZUZyYW1lQXRJbmRleChzaXplX3QpOworICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VB
dEluZGV4KHNpemVfdCk7CiAKICAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
KTsKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwpAQCAtMjk3LDEwICsy
ODIsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXpl
IHRvIHVzZSBmb3IgdGhlIG92ZXJhbGwgaW1hZ2UgKHdpbGwganVzdCBiZSB0aGUgc2l6ZSBvZiB0
aGUgZmlyc3QgaW1hZ2UpLgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb247CiAKLSAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9taW5pbXVtU3Vic2Ft
cGxpbmdMZXZlbDsKLQotICAgIG11dGFibGUgdW5zaWduZWQgbV9pbWFnZU9yaWVudGF0aW9uIDog
NDsgLy8gSW1hZ2VPcmllbnRhdGlvbkVudW0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fc2hvdWxk
UmVzcGVjdEltYWdlT3JpZW50YXRpb24gOiAxOyAvLyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVu
dW0KKyAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZl
bCB7IDAgfTsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRo
ZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBt
X2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlv
bi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAppbmRleCBkOTVlN2RlYjgxMGZjMjRmN2Y2
MWIxYjIzYTRiOWFlZjNmM2MxN2I3Li4yOGMxMzdkMjliMTE4YTljZjFiNjE2MWVkZTRkZTQ5MWQw
NDg4MzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCkBAIC02OCw4
ICs2OCw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1MpCi0gICAgSWNv
bihDR0ltYWdlUmVmKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOworICAg
IEljb24oTmF0aXZlSW1hZ2VQdHIpOworICAgIE5hdGl2ZUltYWdlUHRyIG1fY2dJbWFnZTsKICNl
bGlmIFBMQVRGT1JNKE1BQykKICAgICBJY29uKE5TSW1hZ2UqKTsKICAgICBSZXRhaW5QdHI8TlNJ
bWFnZT4gbV9uc0ltYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCmluZGV4IDc0ZWYwNTNhMzMzZmY1ZmM1NzhlODE4MDBjYzZmYzk3NTVl
ZmJhYjguLjJmZmE0MGU0Mzg0ZTBiYjlhYWM1ZWE3NzkyZDNkZTZiMTIzYjI0YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTY4
LDExICs2OCw2IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6
ZV90IGNsZWFyQmVmb3JlRnJhbWUsIFNoYXJlZEJ1ZmZlcioKICAgICAgICAgc2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1ib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2RlcjsKLX0KLQogdm9pZCBJbWFnZVNvdXJjZTo6
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAg
IC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVzLgpAQCAtOTYsNyArOTEs
NyBAQCBTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogU3RyaW5n
KCk7CiB9CiAKLVN1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxG
b3JTY2FsZShmbG9hdCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKICAg
ICByZXR1cm4gMDsKIH0KQEAgLTExMSwyMSArMTA2LDI1IEBAIGJvb2wgSW1hZ2VTb3VyY2U6Omlz
U2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIG1fZGVjb2RlciAmJiBtX2RlY29kZXItPmlzU2l6
ZUF2YWlsYWJsZSgpOwogfQogCi1JbnRTaXplIEltYWdlU291cmNlOjpzaXplKEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6
OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDAsIGRlc2Ny
aXB0aW9uKTsKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKK30KKyAgICAKK0lu
dFNpemUgSW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KTsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbikgY29uc3QKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gc2hv
dWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29kZXIp
CisgICAgaWYgKCFpbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCiAg
ICAgSW50U2l6ZSBzaXplID0gbV9kZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4KTsKLSAg
ICBpZiAoKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pICYmIG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hl
aWdodCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZShzaXplLmhlaWdodCgpLCBzaXplLndpZHRo
KCkpOworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBtX2RlY29kZXItPm9yaWVu
dGF0aW9uKCk7CiAKLSAgICByZXR1cm4gc2l6ZTsKKyAgICByZXR1cm4gc2hvdWxkUmVzcGVjdElt
YWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gJiYgb3JpZW50YXRpb24u
dXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUoKSA6IHNpemU7CiB9CiAK
IGJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CkBA
IC0xNDgsNyArMTQ3LDcgQEAgc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QK
ICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQog
Ci1QYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwpCitQYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3Vy
Y2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCkKIHsKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCBhY2RkMWNlNGNl
MzAwZGU4MWM5ZTA2MmVlZTc2MDdiZjQ3MmE3MGFmLi45MGI0MjkzNjM2NjY3MmM1ZmI0MzM2N2I3
ZGFjZDM4Yjk5YTcxNWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKQEAgLTQ2LDE4ICs0Niw5IEBAIGNsYXNzIEludFBvaW50OwogY2xhc3Mg
SW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJ
bWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZWxzZQogY2xhc3MgSW1hZ2VE
ZWNvZGVyOwogdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKLSNl
bmRpZgotCi0jaWYgVVNFKENHKQotI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VEZWNv
ZGVyCi0jZWxzZQogdHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwotI2Vu
ZGlmCiAKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZv
cm1hdCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFu
ZCB0aGUgY29uc3RhbnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KQEAg
LTExMCw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGVjb2RlZCBmcmFtZXMuCiAgICAgLy8K
ICAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCBjbGVhcihmYWxzZSwgbikgYW5kIHN1YnNl
cXVlbnRseSBjYWxsCi0gICAgLy8gY3JlYXRlRnJhbWVBdEluZGV4KG0pIHdpdGggbSA8IG4sIHVu
bGVzcyB0aGV5IGZpcnN0IGNhbGwgY2xlYXIodHJ1ZSkuCisgICAgLy8gY3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgobSkgd2l0aCBtIDwgbiwgdW5sZXNzIHRoZXkgZmlyc3QgY2FsbCBjbGVhcih0cnVl
KS4KICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBzdGF0ZWZ1bCBJbWFnZVNvdXJjZXMvZGVjb2Rl
cnMgd2lsbCB3b3JrIHByb3Blcmx5LgogICAgIC8vCiAgICAgLy8gVGhlIHxkYXRhfCBhbmQgfGFs
bERhdGFSZWNlaXZlZHwgcGFyYW1ldGVycyBzaG91bGQgYmUgc3VwcGxpZWQgYnkgY2FsbGVycwpA
QCAtMTIyLDE5ICsxMTMsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgU2hhcmVkQnVmZmVy
KiBkYXRhID0gTlVMTCwKICAgICAgICAgICAgICAgIGJvb2wgYWxsRGF0YVJlY2VpdmVkID0gZmFs
c2UpOwogCi0gICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0OworICAgIGJvb2wgaW5pdGlhbGl6
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXI7IH0KIAogICAgIHZvaWQgc2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdDsKIAotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlKGZsb2F0KSBjb25zdDsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBs
aW5nTGV2ZWxGb3JTY2FsZShmbG9hdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAgICAgYm9v
bCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKIAogICAgIGJv
b2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAgLy8gQWx3YXlzIG9yaWdpbmFsIHNpemUsIHdpdGhv
dXQgc3Vic2FtcGxpbmcuCi0gICAgSW50U2l6ZSBzaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyAgICBJbnRTaXpl
IHNpemUoKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBj
b25zdDsKICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJ
bnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgSW1h
Z2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkp
IGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNv
bnN0OwogCkBAIC0xNDYsNyArMTM4LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ2FsbGVycyBzaG91
bGQgbm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIGNsZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRl
eDsKICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xlYXIoKSBhYm92ZS4KLSAgICBQYXNzTmF0aXZl
SW1hZ2VQdHIgY3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAp
OworICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qs
IFN1YnNhbXBsaW5nTGV2ZWwgPSAwKTsKIAogICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4
KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpOyAvLyBXaGV0
aGVyIG9yIG5vdCB0aGUgZnJhbWUgYWN0dWFsbHkgdXNlZCBhbnkgYWxwaGEuCkBAIC0xNjMsNyAr
MTU1LDkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTmF0aXZlSW1hZ2VEZWNv
ZGVyUHRyIG1fZGVjb2RlcjsKKyAgICB2b2lkIGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoU2hhcmVk
QnVmZmVyKik7CisgICAgCisgICAgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyIG1fZGVjb2RlciB7IG51
bGxwdHIgfTsKIAogI2lmICFVU0UoQ0cpCiAgICAgQWxwaGFPcHRpb24gbV9hbHBoYU9wdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
UHRyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5o
CmluZGV4IGRmOTQxYTU2NmE5ZTQ2OTI3NzI3YmExZWM2ODQ4ZjIxNjgwM2E0NWIuLmVjYTFiOTJj
NDFlZTE4MjhlMzEwZDViZWRiYjJiNWFjYTU5NWY1NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaApAQCAtMjksNiArMjksNyBAQAog
I2RlZmluZSBOYXRpdmVJbWFnZVB0cl9oCiAKICNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKICNlbGlmIFVT
RShDQUlSTykKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAtNDEsNyArNDIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAvLyBGSVhNRTogTmF0aXZlSW1hZ2VQdHIgYW5kIFBhc3NOYXRpdmVJ
bWFnZVB0ciBzaG91bGQgYmUgc21hcnQKIC8vIHBvaW50ZXJzIChzZWUgU1ZHSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpLgogI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJbWFnZVJl
ZiBOYXRpdmVJbWFnZVB0cjsKK3R5cGVkZWYgUmV0YWluUHRyPENHSW1hZ2VSZWY+IE5hdGl2ZUlt
YWdlUHRyOwogI2VsaWYgVVNFKENBSVJPKQogdHlwZWRlZiBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBOYXRpdmVJbWFnZVB0cjsKIHR5cGVkZWYgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IFBh
c3NOYXRpdmVJbWFnZVB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDYzZGNmMGEyNTNlMjM0MGY2N2Yx
YzgxZDg1ZmMyNzBkZDIzMGU4NmQuLmE0YzY1YmRmZjMyYTkyZjljMWRmMjZkNGJmNTMwODBmMDVh
Yjk2MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTAzNyw3ICsxMDM3LDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewog
ICAgIGlmIChpbWFnZSkgewotICAgICAgICBDR0ltYWdlUmVmIG5ld0ltYWdlID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIENHSW1hZ2VSZWYgbmV3SW1hZ2Ug
PSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS5nZXQoKTsKICAgICAgICAgaWYg
KCFuZXdJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApp
bmRleCBjZDU3ZWU0ODVlYTgwYzZjZjM0N2FiM2JkOTczN2Q1OTk5ZTEwMjgyLi4zNjAwMDY3MmJk
ZWM0ZDU1YmE3ZmI5YWIyZjFhMTY4OTM2NzczNmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApA
QCAtNDEsNyArNDEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBCaXRtYXBJbWFnZTo6Qml0bWFw
SW1hZ2UoUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5hdGl2ZUltYWdlLCBJbWFnZU9ic2Vy
dmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQogICAgICwgbV9zaXplKGNhaXJv
U3VyZmFjZVNpemUobmF0aXZlSW1hZ2UuZ2V0KCkpKQotICAgICwgbV9taW5pbXVtU3Vic2FtcGxp
bmdMZXZlbCgwKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNv
dW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93
bikKQEAgLTU4LDcgKzU3LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFBhc3NSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlcioKIHsKICAgICBtX2Zy
YW1lcy5ncm93KDEpOwogICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBjYWlyb19zdXJmYWNl
X2dldF9jb250ZW50KG5hdGl2ZUltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwot
ICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSBuYXRpdmVJbWFnZTsKKyAgICBtX2ZyYW1lc1swXS5t
X2ltYWdlID0gbmF0aXZlSW1hZ2U7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0
cnVlOwogCiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CkBAIC03Miw3ICs3MSw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdCwgY29uc3QgRmxvCiAKICAgICBzdGFydEFuaW1hdGlvbigpOwogCi0gICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7
CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lKTsKICAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5
IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKQEAgLTEyNCw3
ICsxMjMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsbwogCiB2b2lkIEJpdG1hcEltYWdlOjpk
ZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0CiB7Ci0gICAgbV9taW5pbXVt
U3Vic2FtcGxpbmdMZXZlbCA9IDA7CisgICAgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCA9IDA7
CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCkBAIC0xMzUsNyAr
MTM0LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICBpZiAo
ZnJhbWVDb3VudCgpID4gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVu
dEZyYW1lKTsKICAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKQEAgLTE1OCw4ICsxNTcsOCBA
QCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQogICAgIGlmIChjbGVh
ck1ldGFkYXRhKQogICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwogCi0gICAgaWYgKG1f
ZnJhbWUpIHsKLSAgICAgICAgbV9mcmFtZSA9IG51bGxwdHI7CisgICAgaWYgKG1faW1hZ2UpIHsK
KyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4
IGNjNzA0NjE0N2FlODFmMWZhZGFhNmQ4NDE2MjQ5ODBjNmZkZmNiZjEuLjhjNDE4NmQ3MWU1M2Ex
OTA3ZTkyZDczYTJiMDE2NDdmZmQ2NmIxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fp
cm8uY3BwCkBAIC0yMTUsNyArMjE1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VF
eHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wKICAgICAg
ICAgZGVjb2Rlci5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CiAgICAgICAgIGlmICgh
ZGVjb2Rlci5mcmFtZUNvdW50KCkgfHwgIWRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgw
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBk
ZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKTsKKyAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBk
ZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1faW1hZ2VTdXJmYWNlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
ICAgICAgICAgLy8gMS4gRm9yIHRleEltYWdlMkQgd2l0aCBIVE1MVmlkZW9FbG1lbnQgaW5wdXQs
IGFzc3VtZSBubyBQcmVtdWx0aXBseUFscGhhIGhhZCBiZWVuIGFwcGxpZWQgYW5kIHRoZSBhbHBo
YSB2YWx1ZSBpcyAweEZGIGZvciBlYWNoIHBpeGVsLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAppbmRleCAwMWI3ZDY5MmNk
YmQ3YWI0ZDIyYmJjMTM5OWMxMDMyOGY1N2U1ZTQ3Li5jYzdlY2Q4NjM1YWVjODc3MGQ3MDEzNDJk
MjBjZjA2ZDY2ZmRhZWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApAQCAtNTgsMjIgKzU4LDE4IEBAIGJvb2wgRnJh
bWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCiAgICAgbV9vcmllbnRhdGlvbiA9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uOwogICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7CiAKLSAg
ICBpZiAobV9mcmFtZSkgeworICAgIGlmIChtX2ltYWdlKSB7CiAjaWYgQ0FDSEVfU1VCSU1BR0VT
Ci0gICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1fZnJhbWUpOworICAgICAgICBz
dWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKICNlbmRpZgotICAgICAg
ICBDR0ltYWdlUmVsZWFzZShtX2ZyYW1lKTsKLSAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAg
IG1faW1hZ2UgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1CaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0lt
YWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKK0JpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShO
YXRpdmVJbWFnZVB0ciBpbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFn
ZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoMCkKLSAgICAsIG1f
aW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BMZWZ0KQotICAgICwgbV9zaG91bGRSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX3Jl
cGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3Rh
dHVzKFVua25vd24pCkBAIC04OSw4ICs4NSw4IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShD
R0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgICwgbV9zaXpl
QXZhaWxhYmxlKHRydWUpCiAgICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCiB7Ci0gICAgQ0dG
bG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKTsKLSAgICBDR0Zsb2F0IGhlaWdo
dCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7CisgICAgQ0dGbG9hdCB3aWR0aCA9IENHSW1h
Z2VHZXRXaWR0aChpbWFnZS5nZXQoKSk7CisgICAgQ0dGbG9hdCBoZWlnaHQgPSBDR0ltYWdlR2V0
SGVpZ2h0KGltYWdlLmdldCgpKTsKICAgICBtX2RlY29kZWRTaXplID0gd2lkdGggKiBoZWlnaHQg
KiA0OwogICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAKQEAgLTk5LDcgKzk1
LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9z
aXplOwogCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0g
Q0dJbWFnZVJldGFpbihjZ0ltYWdlKTsKKyAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gaW1hZ2U7
CiAgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IHRydWU7CiAgICAgbV9mcmFtZXNbMF0ubV9o
YXZlTWV0YWRhdGEgPSB0cnVlOwogCkBAIC0xMjUsNyArMTIxLDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdAogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCA9IGN1cnJlbnRM
ZXZlbDsKKyAgICBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsID0gY3VycmVudExldmVsOwogfQog
CiB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQpAQCAtMTM2LDcgKzEzMiw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgaWYgKGZyYW1l
Q291bnQoKSA+IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghaGF2ZUZyYW1lQXRJbmRl
eCgwKSkgeworICAgIGlmICghaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KDApKSB7CiAgICAgICAgIElu
dFNpemUgc2l6ZSA9IG1fc291cmNlLmZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7CiAgICAgICAgIGlm
IChzaXplLndpZHRoKCkgIT0gMSB8fCBzaXplLmhlaWdodCgpICE9IDEpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xNDcsNyArMTQzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xp
ZENvbG9yKCkKIAogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBudWxscHRyOwogICAgIGlmIChtX2Zy
YW1lcy5zaXplKCkpCi0gICAgICAgIGltYWdlID0gbV9mcmFtZXNbMF0ubV9mcmFtZTsKKyAgICAg
ICAgaW1hZ2UgPSBtX2ZyYW1lc1swXS5tX2ltYWdlLmdldCgpOwogCiAgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTczLDE2ICsxNjksMTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKCkKIAogQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFn
ZVJlZigpCiB7Ci0gICAgcmV0dXJuIGZyYW1lQXRJbmRleCgwKTsKKyAgICByZXR1cm4gZnJhbWVJ
bWFnZUF0SW5kZXgoMCkuZ2V0KCk7CiB9CiAKIENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZp
cnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIHNpemVfdCBj
b3VudCA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVBdEluZGV4KGkpOwotICAg
ICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJ
bWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBjZ0lt
YWdlOworICAgICAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRl
eChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdl
LmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpID09IHNpemUpCisgICAgICAg
ICAgICByZXR1cm4gaW1hZ2UuZ2V0KCk7CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gdGhl
IGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBzaXplCkBAIC0x
OTcsOCArMTkzLDggQEAgUmV0YWluUHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlQXJyYXkoKQogICAgIAogICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNy
ZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoQ0dJbWFnZVJl
ZiBjdXJyRnJhbWUgPSBmcmFtZUF0SW5kZXgoaSkpCi0gICAgICAgICAgICBDRkFycmF5QXBwZW5k
VmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7CisgICAgICAgIGlmIChOYXRpdmVJbWFnZVB0ciBjdXJy
RnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKSkKKyAgICAgICAgICAgIENGQXJyYXlBcHBlbmRW
YWx1ZShhcnJheSwgY3VyckZyYW1lLmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGFkb3B0Q0Yo
YXJyYXkpOwogfQpAQCAtMjExLDE1ICsyMDcsMTUgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEYK
ICAgICBzdGFydEFuaW1hdGlvbigpOwogI2VuZGlmCiAKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CiAgICAgLy8gTmV2ZXIgdXNlIHN1
YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgogICAgIGlmICh3
a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSkKLSAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKGNvcHlVbnNjYWxlZEZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSkp
OworICAgICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVu
dEZyYW1lKTsKICAgICBlbHNlIHsKICAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRp
b25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdl
dENUTShjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CiAgICAgICAgIGZsb2F0IHN1YnNhbXBsaW5n
U2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlv
blJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlv
blJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7CiAKLSAgICAgICAgaW1hZ2Ug
PSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nU2NhbGUpOworICAgICAg
ICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1Nj
YWxlKTsKICAgICB9CiAKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3
b24ndCBoYXZlIGFuIGltYWdlIHlldC4KQEAgLTI1MSwxOCArMjQ3LDE4IEBAIHZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0K
IAotUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQorUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpjb3B5VW5z
Y2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49
IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoaW5kZXgg
Pj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICBpZiAo
aW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKICAg
ICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCk7CiAKICAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5t
X3N1YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJldHVybiBDR0ltYWdlUmV0YWluKG1fZnJhbWVz
W2luZGV4XS5tX2ZyYW1lKTsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdl
OwogCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7CisgICAg
cmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0M0RDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcAppbmRleCA2YzAzYTJjZWY4NDYwNjU2MWVhMDdlYjkyOGYxY2Yy
OTVmOWY1ZTM2Li43YTEzYmI1ODQ2NzA4ZDM3ZTAyYmQzZGQ2NzIzYzI3YTQ5NTE3NmMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHQzRENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcApAQCAtMzMzLDEwICszMzMsMTAgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2RlY29kZWRJbWFnZSA9IGFkb3B0Q0YoZGVjb2Rl
ci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOworICAgICAgICBtX2RlY29kZWRJbWFnZSA9IGRlY29k
ZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7CiAgICAgICAgIG1fY2dJbWFnZSA9IG1fZGVj
b2RlZEltYWdlLmdldCgpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBtX2NnSW1hZ2UgPSBtX2lt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLmdldCgpOwogICAgIGlmICghbV9jZ0lt
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdl
UGl4ZWxzLCBpbnQgaW1hZwogICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAg
ICAgY29udGV4dC50cmFuc2xhdGUoMCwgLWltYWdlSGVpZ2h0KTsKICAgICBjb250ZXh0LnNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOwotICAgIGNvbnRleHQu
ZHJhd05hdGl2ZUltYWdlKGNnSW1hZ2UuZ2V0KCksIGltYWdlU2l6ZSwgY2FudmFzUmVjdCwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKSwgQ29tcG9zaXRlQ29weSk7CisgICAgY29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoY2dJbWFnZSwgaW1hZ2VTaXplLCBjYW52YXNSZWN0LCBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZVNpemUpLCBDb21wb3NpdGVDb3B5KTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGE0NDk2NTQwNDZhZThm
MTBhYmFkMTY0MTVlNjQ2MGFkYmJiYjhlODguLjE2MjA5YWY1MzQ0ODFkYjRjZGRkOGI0MjNjZTdi
ZjJhNDBiMGRiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTMxMSw4ICszMTEsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdAogICAgIGZsb2F0IGFkanVzdGVkWCA9IHBoYXNlLngoKSAtIGRl
c3RSZWN0LngoKSArIHRpbGVSZWN0LngoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVy
blRyYW5zZm9ybS5hKCkpOyAvLyBXZSB0cmFuc2xhdGVkIHRoZSBjb250ZXh0IHNvIHRoYXQgZGVz
dFJlY3QueCgpIGlzIHRoZSBvcmlnaW4sIHNvIHN1YnRyYWN0IGl0IG91dC4KICAgICBmbG9hdCBh
ZGp1c3RlZFkgPSBkZXN0UmVjdC5oZWlnaHQoKSAtIChwaGFzZS55KCkgLSBkZXN0UmVjdC55KCkg
KyB0aWxlUmVjdC55KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0u
ZCgpKSArIHNjYWxlZFRpbGVIZWlnaHQpOwogCi0gICAgQ0dJbWFnZVJlZiB0aWxlSW1hZ2UgPSBp
bWFnZS5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGZsb2F0IGggPSBDR0ltYWdl
R2V0SGVpZ2h0KHRpbGVJbWFnZSk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHRpbGVJbWFn
ZSA9IGltYWdlLm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgZmxvYXQgaCA9IENH
SW1hZ2VHZXRIZWlnaHQodGlsZUltYWdlLmdldCgpKTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBzdWJJbWFnZTsKICNpZiBQTEFURk9STShJT1MpCkBAIC0zMjYsMTMgKzMyNiwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdAogICAgICAgICAvLyBDb3B5aW5nIGEgc3ViLWltYWdlIG91
dCBvZiBhIHBhcnRpYWxseS1kZWNvZGVkIGltYWdlIHN0b3BzIHRoZSBkZWNvZGluZyBvZiB0aGUg
b3JpZ2luYWwgaW1hZ2UuIEl0IHNob3VsZCBuZXZlciBoYXBwZW4KICAgICAgICAgLy8gYmVjYXVz
ZSBzdWItaW1hZ2VzIGFyZSBvbmx5IHVzZWQgZm9yIGJvcmRlci1pbWFnZSwgd2hpY2ggb25seSBy
ZW5kZXJzIHdoZW4gdGhlIGltYWdlIGlzIGZ1bGx5IGRlY29kZWQuCiAgICAgICAgIEFTU0VSVCho
ID09IGltYWdlLmhlaWdodCgpKTsKLSAgICAgICAgc3ViSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QodGlsZUltYWdlLCB0aWxlUmVjdCkpOworICAgICAgICBzdWJJ
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdCh0aWxlSW1hZ2UuZ2V0
KCksIHRpbGVSZWN0KSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgbmVlZCB0byBwYWludCBnYXBz
IGJldHdlZW4gdGlsZXMgYmVjYXVzZSB3ZSBoYXZlIGEgcGFydGlhbGx5IGxvYWRlZCBpbWFnZSBv
ciBub24temVybyBzcGFjaW5nLAogICAgIC8vIGZhbGwgYmFjayB0byB0aGUgbGVzcyBlZmZpY2ll
bnQgQ0dQYXR0ZXJuLWJhc2VkIG1lY2hhbmlzbS4KICAgICBmbG9hdCBzY2FsZWRUaWxlV2lkdGgg
PSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNm
b3JtLmEoKSk7Ci0gICAgZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2UpOworICAg
IGZsb2F0IHcgPSBDR0ltYWdlR2V0V2lkdGgodGlsZUltYWdlLmdldCgpKTsKICAgICBpZiAodyA9
PSBpbWFnZS5zaXplKCkud2lkdGgoKSAmJiBoID09IGltYWdlLnNpemUoKS5oZWlnaHQoKSAmJiAh
c3BhY2luZy53aWR0aCgpICYmICFzcGFjaW5nLmhlaWdodCgpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBDRyBzZWVtcyB0byBzbmFwIHRoZSBpbWFnZXMgdG8gaW50ZWdyYWwgc2l6ZXMuIFdoZW4gd2Ug
Y2FyZSAoZS5nLiB3aXRoIGJvcmRlci1pbWFnZS1yZXBlYXQ6IHJvdW5kKSwKICAgICAgICAgLy8g
d2Ugc2hvdWxkIHRpbGUgYWxsIGJ1dCB0aGUgbGFzdCwgYW5kIHN0ZXRjaCB0aGUgbGFzdCBpbWFn
ZSB0byBmaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjVhYzRhZjEzMDFlNGI1YjFjNzIyNmE1NTlm
MmYzOTNlZDhiNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNv
cmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisKKyNpZiAhUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxJbWFnZUlP
L0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKworI2lmIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspCisjaW1wb3J0IDxJbWFnZUlPL0NHSW1hZ2VTb3VyY2VQcml2
YXRlLmg+CisjZWxzZQorY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVG
YWN0b3IgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IiKTsKK2NvbnN0IENG
U3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGVJbW1lZGlhdGVseSA9IENGU1RSKCJr
Q0dJbWFnZVNvdXJjZVNob3VsZENhY2hlSW1tZWRpYXRlbHkiKTsKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCitjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3Bl
cnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsK
K2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lID0g
Q0ZTVFIoIkRlbGF5VGltZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9w
ZXJ0eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7CisKK2NvbnN0IENGU3RyaW5n
UmVmIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3Vy
Y2VTaG91bGRQcmVmZXJSR0IzMiIpOworY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VT
a2lwTWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEiKTsKKworc3Rh
dGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIERlY29kZU1vZGUgZGVjb2RlTW9kZSkK
K3sKKyAgICBjb25zdCBDRkluZGV4IGJhc2ljT3B0aW9ucyA9IDM7CisgICAgY29uc3Qgdm9pZCog
a2V5c1tiYXNpY09wdGlvbnMgKyAyXSA9IHsga0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NH
SW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEg
fTsKKyAgICBjb25zdCB2b2lkKiB2YWx1ZXNbYmFzaWNPcHRpb25zICsgMl0gPSB7IGtDRkJvb2xl
YW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUgfTsKKyAgICBDRkluZGV4IG51
bU9wdGlvbnMgPSBiYXNpY09wdGlvbnM7CisgICAgCisgICAgaWYgKHN1YnNhbXBsaW5nTGV2ZWwg
PiAwKSB7CisgICAgICAgIHNob3J0IGNvbnN0cmFpbmVkU3Vic2FtcGxpbmdMZXZlbCA9IHN0ZDo6
bWluPHNob3J0PigzLCBzdGQ6Om1heDxzaG9ydD4oMCwgc3Vic2FtcGxpbmdMZXZlbCkpOworICAg
ICAgICBpbnQgc3Vic2FtcGxlSW50ID0gMSA8PCBjb25zdHJhaW5lZFN1YnNhbXBsaW5nTGV2ZWw7
IC8vIFswLi4zXSA9PiBbMSwgMiwgNCwgOF0KKyAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVm
PiBzdWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZO
dW1iZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOworICAgICAgICAKKyAgICAgICAga2V5c1tu
dW1PcHRpb25zXSA9IGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yOworICAgICAgICB2YWx1
ZXNbbnVtT3B0aW9ucysrXSA9IGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yOworICAgIH0K
KyAgICAKKyAgICBpZiAoZGVjb2RlTW9kZSA9PSBEZWNvZGVNb2RlOjpJbW1lZGlhdGUpIHsKKyAg
ICAgICAga2V5c1tudW1PcHRpb25zXSA9IGtDR0ltYWdlU291cmNlU2hvdWxkQ2FjaGVJbW1lZGlh
dGVseTsKKyAgICAgICAgdmFsdWVzW251bU9wdGlvbnMrK10gPSBrQ0ZCb29sZWFuVHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKG51bGxwdHIs
IGtleXMsIHZhbHVlcywgbnVtT3B0aW9ucywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VTb3VyY2VPcHRpb25zKFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbCA9IDAsIERlY29kZU1vZGUgZGVjb2RlTW9kZSA9IERlY29kZU1vZGU6
OkxhenkpCit7CisgICAgaWYgKHN1YnNhbXBsaW5nTGV2ZWwgfHwgZGVjb2RlTW9kZSA9PSBEZWNv
ZGVNb2RlOjpJbW1lZGlhdGUpCisgICAgICAgIHJldHVybiBjcmVhdGVJbWFnZVNvdXJjZU9wdGlv
bnMoc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RlTW9kZSk7CisgICAgCisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBvcHRpb25zID0gY3JlYXRlSW1h
Z2VTb3VyY2VPcHRpb25zKDAsIERlY29kZU1vZGU6OkxhenkpOworICAgIHJldHVybiBvcHRpb25z
OworfQorCitzdGF0aWMgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVz
KENGRGljdGlvbmFyeVJlZiBpbWFnZVByb3BlcnRpZXMpCit7CisgICAgQVNTRVJUKGltYWdlUHJv
cGVydGllcyk7CisgICAgQ0ZOdW1iZXJSZWYgb3JpZW50YXRpb25Qcm9wZXJ0eSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVy
dHlPcmllbnRhdGlvbik7CisgICAgaWYgKCFvcmllbnRhdGlvblByb3BlcnR5KQorICAgICAgICBy
ZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247CisgICAgCisgICAgaW50IGV4aWZWYWx1ZTsK
KyAgICBDRk51bWJlckdldFZhbHVlKG9yaWVudGF0aW9uUHJvcGVydHksIGtDRk51bWJlckludFR5
cGUsICZleGlmVmFsdWUpOworICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZh
bHVlKGV4aWZWYWx1ZSk7Cit9CisgICAgCisjaWYgIVBMQVRGT1JNKENPQ09BKQorc2l6ZV90IHNo
YXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBidWZmZXIsIG9m
Zl90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpCit7CisgICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRC
dWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKKyAgICBzaXplX3Qgc291
cmNlU2l6ZSA9IHNoYXJlZEJ1ZmZlci0+c2l6ZSgpOworICAgIGlmIChwb3NpdGlvbiA+PSBzb3Vy
Y2VTaXplKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBjb25zdCBjaGFyKiBzb3VyY2Ug
PSBzaGFyZWRCdWZmZXItPmRhdGEoKSArIHBvc2l0aW9uOworICAgIHNpemVfdCBhbW91bnQgPSBz
dGQ6Om1pbjxzaXplX3Q+KGNvdW50LCBzb3VyY2VTaXplIC0gcG9zaXRpb24pOworICAgIG1lbWNw
eShidWZmZXIsIHNvdXJjZSwgYW1vdW50KTsKKyAgICByZXR1cm4gYW1vdW50OworfQorCit2b2lk
IHNoYXJlZEJ1ZmZlclJlbGVhc2Uodm9pZCogaW5mbykKK3sKKyAgICBTaGFyZWRCdWZmZXIqIHNo
YXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNoYXJl
ZEJ1ZmZlci0+ZGVyZWYoKTsKK30KKyNlbmRpZgorCitJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rl
cigpCit7CisgICAgbV9uYXRpdmVEZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVu
dGFsKDApOworfQorCitTdWJzYW1wbGluZ0xldmVsIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlLCBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1w
bGluZ0xldmVsKQoreworICAgIC8vIFRoZXJlIGFyZSBmb3VyIHN1YnNhbXBsaW5nIGxldmVsczog
MCA9IDF4LCAxID0gMC41eCwgMiA9IDAuMjV4LCAzID0gMC4xMjV4LgorICAgIGZsb2F0IGNsYW1w
ZWRTY2FsZSA9IHN0ZDo6bWF4PGZsb2F0PigwLjEyNSwgc3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxl
KSk7CisgICAgU3Vic2FtcGxpbmdMZXZlbCByZXN1bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBl
ZFNjYWxlKSk7CisgICAgQVNTRVJUKHJlc3VsdCA+PTAgJiYgcmVzdWx0IDw9IDMpOworICAgIHJl
dHVybiBzdGQ6Om1pbihyZXN1bHQsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKTsKK30KKworc2l6
ZV90IEltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkKK3sK
KyAgICAvLyBNZWFzdXJlZCBieSB0cmFjaW5nIG1hbGxvYy9jYWxsb2MgY2FsbHMgb24gTWFjIE9T
IDEwLjYuNiwgeDg2XzY0LgorICAgIC8vIEEgbm9uLXplcm8gdmFsdWUgZW5zdXJlcyBjYWNoZWQg
aW1hZ2VzIHdpdGggbm8gZGVjb2RlZCBmcmFtZXMgc3RpbGwgZW50ZXIKKyAgICAvLyB0aGUgbGl2
ZSBkZWNvZGVkIHJlc291cmNlcyBsaXN0IHdoZW4gdGhlIENHSW1hZ2VTb3VyY2UgZGVjb2RlcyBp
bWFnZQorICAgIC8vIHByb3BlcnRpZXMsIGFsbG93aW5nIHRoZSBjYWNoZSB0byBwcnVuZSB0aGUg
cGFydGlhbGx5IGRlY29kZWQgaW1hZ2UuCisgICAgLy8gVGhpcyB2YWx1ZSBpcyBsaWtlbHkgdG8g
YmUgaW5hY2N1cmF0ZSBvbiBvdGhlciBwbGF0Zm9ybXMsIGJ1dCB0aGUgb3ZlcmFsbAorICAgIC8v
IGJlaGF2aW9yIGlzIHVuY2hhbmdlZC4KKyAgICByZXR1cm4gMTMwODg7Cit9CisKK1N0cmluZyBJ
bWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBDRlN0cmluZ1Jl
ZiBpbWFnZVNvdXJjZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIp
OworICAgIHJldHVybiBXZWJDb3JlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JJbWFnZVNvdXJjZVR5
cGUoaW1hZ2VTb3VyY2VUeXBlKTsKK30KKworYm9vbCBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpIGNvbnN0Cit7CisgICAgLy8gUmFnbmFyb3MgeWVsbHM6IFRPTyBTT09OISBZb3UgaGF2
ZSBhd2FrZW5lZCBtZSBUT08gU09PTiwgRXhlY3V0dXMhCisgICAgaWYgKENHSW1hZ2VTb3VyY2VH
ZXRTdGF0dXMobV9uYXRpdmVEZWNvZGVyKSA8IGtDR0ltYWdlU3RhdHVzSW5jb21wbGV0ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGltYWdlMFByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0
SW5kZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwor
ICAgIGlmICghaW1hZ2UwUHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgp
LCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxXaWR0aCkKKyAgICAmJiBDRkRpY3Rpb25hcnlDb250YWlu
c0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQp
OworfQorCitJbnRTaXplIEltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
c2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fc2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7
CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IEltYWdlRGVjb2Rlcjo6ZnJhbWVDb3Vu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX25hdGl2ZURl
Y29kZXIpOworfQorCitpbnQgSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAor
eworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENH
SW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllcyhtX25hdGl2ZURlY29kZXIsIGltYWdlU291cmNlT3B0
aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gY0Fu
aW1hdGlvbkxvb3BPbmNlOworICAgIAorICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVz
ID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgp
LCBrQ0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7CisgICAgaWYgKGdpZlByb3BlcnRpZXMp
IHsKKyAgICAgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZMb29wQ291bnQpOworICAg
ICAgICAKKyAgICAgICAgLy8gTm8gcHJvcGVydHkgbWVhbnMgbG9vcCBvbmNlLgorICAgICAgICBp
ZiAoIW51bSkKKyAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CisgICAgICAg
IAorICAgICAgICBpbnQgbG9vcENvdW50OworICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwg
a0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7CisgICAgICAgIAorICAgICAgICAvLyBBIHBy
b3BlcnR5IHdpdGggdmFsdWUgMCBtZWFucyBsb29wIGZvcmV2ZXIuCisgICAgICAgIHJldHVybiBs
b29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9uTG9vcEluZmluaXRlOworICAgIH0KKyAg
ICAKKyAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBO
R0RpY3Rpb25hcnkpOworICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVz
LCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCk7CisgICAgICAgIGlmICghbnVt
KQorICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAgICAgICAgCisgICAg
ICAgIGludCBsb29wQ291bnQ7CisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmbG9vcENvdW50KTsKKyAgICAgICAgcmV0dXJuIGxvb3BDb3VudCA/IGxvb3BD
b3VudCA6IGNBbmltYXRpb25Mb29wSW5maW5pdGU7CisgICAgfQorICAgIAorICAgIC8vIFR1cm5z
IG91dCB3ZSdyZSBub3QgYW4gYW5pbWF0ZWQgaW1hZ2UgYWZ0ZXIgYWxsLCBzbyB3ZSBkb24ndCBh
bmltYXRlLgorICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKK30KKworYm9vbCBJbWFnZURlY29k
ZXI6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0Cit7CisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQ
cm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygp
LmdldCgpKSk7CisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgaW50IHggPSAtMSwgeSA9IC0xOworICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51
bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBDRlNUUigiaG90
c3BvdFgiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmeCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBudW0gPSAo
Q0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIo
ImhvdHNwb3RZIikpOworICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NG
TnVtYmVySW50VHlwZSwgJnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KHggPCAwIHx8IHkgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaG90U3Bv
dCA9IEludFBvaW50KHgsIHkpOworICAgIHJldHVybiB0cnVlOworfQorCitJbnRTaXplIEltYWdl
RGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4
KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xl
dmVsKS5nZXQoKSkpOworICAgIAorICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAKKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQgPSAwOworICAg
IENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9w
ZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxXaWR0aCk7CisgICAgaWYgKG51bSkK
KyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7
CisgICAgCisgICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3Bl
cnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7CisgICAgaWYgKG51bSkK
KyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZoZWlnaHQp
OworICAgIAorICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIElt
YWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGZyYW1lQ291bnQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRT
dGF0dXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgpID09IGtDR0ltYWdlU3RhdHVzQ29t
cGxldGU7Cit9CisKK0ltYWdlT3JpZW50YXRpb24gSW1hZ2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5k
ZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsK
KyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRh
dGlvbjsKKyAgICAKKyAgICByZXR1cm4gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0
aWVzLmdldCgpKTsKK30KKworZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgZmxvYXQgZHVyYXRpb24gPSAwOworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3Vy
Y2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAocHJvcGVydGllcykgeworICAgICAgICBDRkRp
Y3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkp
OworICAgICAgICBpZiAoZ2lmUHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVz
LCBrQ0dJbWFnZVByb3BlcnR5R0lGVW5jbGFtcGVkRGVsYXlUaW1lKSkgeworICAgICAgICAgICAg
ICAgIC8vIFVzZSB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGlmIGl0IGV4aXN0cy4KKyAgICAg
ICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVy
YXRpb24pOworICAgICAgICAgICAgfSBlbHNlIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1i
ZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0
eUdJRkRlbGF5VGltZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGNs
YW1wZWQgZnJhbWUgZGVsYXkgaWYgdGhlIHVuY2xhbXBlZCBmcmFtZSBkZWxheSBkb2VzIG5vdCBl
eGlzdC4KKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxv
YXRUeXBlLCAmZHVyYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBO
R0RpY3Rpb25hcnkpOworICAgICAgICBpZiAocG5nUHJvcGVydGllcykgeworICAgICAgICAgICAg
aWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShw
bmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGlt
ZSkpCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0
VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9
IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3Jl
Q0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJH
ZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlv
biB0byBtYWtlIGFuIGltYWdlIGZsYXNoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCisgICAgLy8g
V2UgZm9sbG93IEZpcmVmb3gncyBiZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRpb24gb2YgMTAwIG1z
IGZvciBhbnkgZnJhbWVzIHRoYXQgc3BlY2lmeQorICAgIC8vIGEgZHVyYXRpb24gb2YgPD0gMTAg
bXMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzY4OTMwMD4gYW5kIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzM2MDgyPgorICAgIC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIGlmIChkdXJhdGlvbiA8
IDAuMDExZikKKyAgICAgICAgcmV0dXJuIDAuMWY7CisgICAgcmV0dXJuIGR1cmF0aW9uOworfQor
Citib29sIEltYWdlRGVjb2Rlcjo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVf
dCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rl
ciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBDRkRpY3Rpb25hcnlSZWYgamZpZlBy
b3BlcnRpZXMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZh
bHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlKRklGRGljdGlvbmFyeSkpOwor
ICAgIGlmIChqZmlmUHJvcGVydGllcykgeworICAgICAgICBDRkJvb2xlYW5SZWYgaXNQcm9nQ0ZC
b29sID0gc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShqZmlm
UHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUpGSUZJc1Byb2dyZXNzaXZlKSk7CisgICAgICAg
IGlmIChpc1Byb2dDRkJvb2wpIHsKKyAgICAgICAgICAgIGJvb2wgaXNQcm9ncmVzc2l2ZSA9IENG
Qm9vbGVhbkdldFZhbHVlKGlzUHJvZ0NGQm9vbCk7CisgICAgICAgICAgICAvLyBXb3JrYXJvdW5k
IGZvciA8cmRhcjovL3Byb2JsZW0vNTE4NDY1NT4gLSBIYW5nIHJlbmRlcmluZyB2ZXJ5IGxhcmdl
IHByb2dyZXNzaXZlIEpQRUcuIERlY29kaW5nIHByb2dyZXNzaXZlCisgICAgICAgICAgICAvLyBp
bWFnZXMgaGFuZ3MgZm9yIGEgdmVyeSBsb25nIHRpbWUgcmlnaHQgbm93LiBVbnRpbCB0aGlzIGlz
IGZpeGVkLCBkb24ndCBzdWItc2FtcGxlIHByb2dyZXNzaXZlIGltYWdlcy4gVGhpcworICAgICAg
ICAgICAgLy8gd2lsbCBjYXVzZSB0aGVtIHRvIGZhaWwgb3VyIGxhcmdlIGltYWdlIGNoZWNrIGFu
ZCB0aGV5IHdvbid0IGJlIGRlY29kZWQuCisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIG9u
Y2UgdW5kZXJseWluZyBpc3N1ZSBpcyBmaXhlZCAoPHJkYXI6Ly9wcm9ibGVtLzUxOTE0MTg+KQor
ICAgICAgICAgICAgcmV0dXJuICFpc1Byb2dyZXNzaXZlOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGlmICghZnJhbWVJc0NvbXBsZXRl
QXRJbmRleChpbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIENGU3RyaW5n
UmVmIGltYWdlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlcik7Cisg
ICAgCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGlzIG5vIGltYWdlIHR5cGUgb3IgdGhl
IGltYWdlIHR5cGUgaXMgSlBFRywgYmVjYXVzZQorICAgIC8vIEpQRUcgZG9lcyBub3Qgc3VwcG9y
dCBhbHBoYSB0cmFuc3BhcmVuY3kuCisgICAgaWYgKCFpbWFnZVR5cGUgfHwgQ0ZFcXVhbChpbWFn
ZVR5cGUsIENGU1RSKCJwdWJsaWMuanBlZyIpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5vbi10cmFuc3Bh
cmVudCBpbWFnZSBmb3JtYXRzLgorICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSByZXR1cm4gZmFs
c2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhlIEdJRiBwcm9w
ZXJ0aWVzIGRpY3Rpb25hcnkKKyAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0
cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5z
aWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNh
bXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGZyYW1l
U2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIHJl
dHVybiBmcmFtZVNpemUud2lkdGgoKSAqIGZyYW1lU2l6ZS5oZWlnaHQoKSAqIDQ7Cit9CisKK1Bh
c3NOYXRpdmVJbWFnZVB0ciBJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBEZWNvZGVNb2Rl
IGRlY29kZU1vZGUpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KG1fbmF0aXZlRGVjb2Rlciwg
aW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGVNb2RlKS5n
ZXQoKSkpOworICAgICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBi
ZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3
aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1h
Z2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisg
ICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJh
d24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBD
b3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFy
eSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorICAgICAgICBDR0lt
YWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3Jhcnkp
OworI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2Vu
ZGlmCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICAKKyAgICBDRlN0cmluZ1JlZiBp
bWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlcik7CisgICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFn
ZSIpOworCisgICAgaWYgKCFpbWFnZVVUSSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAg
aWYgKCFDRkVxdWFsKGltYWdlVVRJLCB4Ym1VVEkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisK
KyAgICAvLyBJZiBpdCBpcyBhbiB4Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJl
YXMgdG8gcmVuZGVyIHRoZW0gdHJhbnNwYXJlbnQuCisgICAgY29uc3QgQ0dGbG9hdCBtYXNraW5n
Q29sb3JzWzZdID0gezI1NSwgMjU1LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gbWFza2VkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFz
a2luZ0NvbG9ycyhpbWFnZS5nZXQoKSwgbWFza2luZ0NvbG9ycykpOworICAgIHJldHVybiBtYXNr
ZWRJbWFnZSA/IG1hc2tlZEltYWdlIDogaW1hZ2U7Cit9CisgICAgCit2b2lkIEltYWdlRGVjb2Rl
cjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUg
U2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFy
ZWRCdWZmZXIncyBrbm93bGVkZ2UuCisgICAgLy8gV2UgdXNlIFNoYXJlZEJ1ZmZlcidzIGFiaWxp
dHkgdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJvdW5kIHRoaXMsIGVuc3Vy
aW5nIHRoYXQgSW1hZ2VJTyBpcworICAgIC8vIHJlYWxseSBsb29raW5nIGF0IHRoZSBTaGFyZWRC
dWZmZXIuCisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9uYXRpdmVEZWNvZGVyLCBkYXRh
LT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKKyNlbHNlCisgICAgLy8g
Q3JlYXRlIGEgQ0dEYXRhUHJvdmlkZXIgdG8gd3JhcCB0aGUgU2hhcmVkQnVmZmVyLgorICAgIGRh
dGEtPnJlZigpOworICAgIC8vIFdlIHVzZSB0aGUgR2V0Qnl0ZXNBdFBvc2l0aW9uIGNhbGxiYWNr
IHJhdGhlciB0aGFuIHRoZSBHZXRCeXRlUG9pbnRlciBvbmUgYmVjYXVzZSBTaGFyZWRCdWZmZXIK
KyAgICAvLyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2lu
dGVyIGFuZCBndWFyYW50ZWUgdGhhdCBpdCB3b24ndCBtb3ZlLCB3aGljaAorICAgIC8vIGlzIGEg
cmVxdWlyZW1lbnQgZm9yIHVzaW5nIHRoZSBHZXRCeXRlUG9pbnRlciBjYWxsYmFjay4KKyAgICBD
R0RhdGFQcm92aWRlckRpcmVjdENhbGxiYWNrcyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwg
MCwgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uLCBzaGFyZWRCdWZmZXJSZWxlYXNlIH07
CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlRGlyZWN0KGRhdGEsIGRhdGEtPnNpemUoKSwgJnByb3ZpZGVy
Q2FsbGJhY2tzKSk7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGFQcm92aWRlcihtX25hdGl2
ZURlY29kZXIsIGRhdGFQcm92aWRlci5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKKyNlbmRpZgor
fQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NjFhYjllMTc3OTE3
MmJmM2VkMjdmYTA0MGEwZTQxOTFiYTE2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
bWFnZURlY29kZXJfaAorI2RlZmluZSBJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VT
b3VyY2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
U3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNlVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUpOworCitlbnVtIGNsYXNzIERlY29kZU1vZGUgeyBJbW1lZGlhdGUsIExhenkgfTsKKwor
Y2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAg
IEltYWdlRGVjb2RlcigpOworICAgIHZpcnR1YWwgfkltYWdlRGVjb2RlcigpIHsgfQorCisgICAg
c3RhdGljIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKTsKKyAgICBz
dGF0aWMgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2Nh
bGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOworCisgICAgU3Ry
aW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1NpemVBdmFpbGFibGUo
KSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBzaXplX3QgZnJhbWVDb3Vu
dCgpIGNvbnN0OworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAgICBib29sIGdl
dEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0OworCisgICAgSW50U2l6ZSBmcmFtZVNp
emVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CisgICAgYm9vbCBmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKworICAgIGZsb2F0IGZyYW1lRHVyYXRp
b25BdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QpIGNvbnN0OworICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNp
emVfdCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgY3JlYXRl
RnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBEZWNvZGVNb2RlID0g
RGVjb2RlTW9kZTo6TGF6eSkgY29uc3Q7CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVy
KiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIAorcHJvdGVjdGVkOgorICAgIG11dGFibGUg
SW50U2l6ZSBtX3NpemU7CisgICAgQ0dJbWFnZVNvdXJjZVJlZiBtX25hdGl2ZURlY29kZXI7Cit9
OworICAgIAorfQorCisjZW5kaWYgLy8gSW1hZ2VEZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKaW5kZXggZDRh
MDEyYjZmNTdiZjUzOTMwNjQ3NzdiNmMxMDkzNjZiMjRjNDQ1Yy4uZGNmNzlhNzJhMTVlOWY3OTQw
ZmFkYTZkNjE5NWI4Y2Q0MzU0MzNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCiAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIK
KyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00NCw0NCAr
NDUsOSBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCi0jaWYgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUu
aD4KLSNlbHNlCi1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3Rv
ciA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciIpOwotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9w
ZXJ0eUFQTkdVbmNsYW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7
Ci1jb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSA9
IENGU1RSKCJEZWxheVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJv
cGVydHlBUE5HTG9vcENvdW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOwotCi1jb25zdCBDRlN0cmlu
Z1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyID0gQ0ZTVFIoImtDR0ltYWdlU291
cmNlU2hvdWxkUHJlZmVyUkdCMzIiKTsKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNl
U2tpcE1ldGFkYXRhID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIik7Ci0KLSNp
ZiAhUExBVEZPUk0oQ09DT0EpCi1zaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9u
KHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkK
LXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1
ZmZlcio+KGluZm8pOwotICAgIHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXpl
KCk7Ci0gICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgY29uc3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlv
bjsKLSAgICBzaXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6
ZSAtIHBvc2l0aW9uKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7Ci0gICAg
cmV0dXJuIGFtb3VudDsKLX0KLQotdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8p
Ci17Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRC
dWZmZXIqPihpbmZvKTsKLSAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci19Ci0jZW5kaWYKLQog
SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIDogbV9kZWNvZGVyKDApCiB7
CiAgICAgLy8gRklYTUU6IEFscGhhT3B0aW9uIGFuZCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
biBhcmUgaWdub3JlZC4KIH0KQEAgLTEwMCwzNTQgKzY2LDEyOSBAQCB2b2lkIEltYWdlU291cmNl
OjpjbGVhcihib29sIGRlc3Ryb3lBbGxGcmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2RlY29kZXIpIHsKLSAgICAgICAg
Q0ZSZWxlYXNlKG1fZGVjb2Rlcik7CisgICAgICAgIGRlbGV0ZSBtX2RlY29kZXI7CiAgICAgICAg
IG1fZGVjb2RlciA9IDA7CiAgICAgfQorICAgIAogICAgIGlmIChkYXRhKQogICAgICAgICBzZXRE
YXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKQorICAgIAordm9pZCBJbWFnZVNvdXJjZTo6ZW5zdXJlRGVjb2RlcklzQ3Jl
YXRlZChTaGFyZWRCdWZmZXIqIGRhdGEpCiB7Ci0gICAgaWYgKCFzdWJzYW1wbGluZ0xldmVsKSB7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOwotICAgICAgICBjb25zdCB2
b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBrQ0dJ
bWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSB9
OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xlYW5U
cnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUgfTsKLSAgICAgICAgcmV0dXJuIENG
RGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpOwotICAgIH0KLQotICAgIHNob3J0IGNvbnN0cmFpbmVkU3Vic2FtcGxpbmdMZXZlbCA9IHN0
ZDo6bWluPHNob3J0PigzLCBzdGQ6Om1heDxzaG9ydD4oMCwgc3Vic2FtcGxpbmdMZXZlbCkpOwot
ICAgIGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IGNvbnN0cmFpbmVkU3Vic2FtcGxpbmdMZXZlbDsg
Ly8gWzAuLjNdID0+IFsxLCAyLCA0LCA4XQotCi0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBz
dWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1i
ZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOwotICAgIGNvbnN0IENGSW5kZXggbnVtT3B0aW9u
cyA9IDQ7Ci0gICAgY29uc3Qgdm9pZCoga2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VTb3Vy
Y2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1hZ2VT
b3VyY2VTa2lwTWV0YWRhdGEsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIH07Ci0gICAg
Y29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9v
bGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBzdWJzYW1wbGVOdW1iZXIuZ2V0KCkgfTsKLSAgICBy
ZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUobnVsbHB0ciwga2V5cywgdmFsdWVzLCBu
dW1PcHRpb25zLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIAorICAg
IGlmIChtX2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2RlY29kZXIgPSBu
ZXcgSW1hZ2VEZWNvZGVyKCk7CiB9Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0g
MCkKKyAgICAKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBpZiAoc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKTsKKyAg
ICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4gb3B0aW9ucyA9IGNyZWF0ZUltYWdlU291cmNl
T3B0aW9ucygwKTsKLSAgICByZXR1cm4gb3B0aW9uczsKLX0KKyAgICBlbnN1cmVEZWNvZGVySXND
cmVhdGVkKGRhdGEpOworICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi1ib29sIEltYWdlU291cmNlOjpp
bml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2RlcjsKKyAgICBtX2RlY29k
ZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotdm9pZCBJbWFnZVNvdXJj
ZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorU3Ry
aW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiB7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIG1fZGVjb2RlciA9IENHSW1h
Z2VTb3VyY2VDcmVhdGVJbmNyZW1lbnRhbCgwKTsKLSAgICAvLyBPbiBNYWMgdGhlIE5TRGF0YSBp
bnNpZGUgdGhlIFNoYXJlZEJ1ZmZlciBjYW4gYmUgc2VjcmV0bHkgYXBwZW5kZWQgdG8gd2l0aG91
dCB0aGUgU2hhcmVkQnVmZmVyJ3Mga25vd2xlZGdlLiAgV2UgdXNlIFNoYXJlZEJ1ZmZlcidzIGFi
aWxpdHkKLSAgICAvLyB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBhcm91bmQg
dGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzIHJlYWxseSBsb29raW5nIGF0IHRoZSBTaGFy
ZWRCdWZmZXIuCi0gICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9kZWNvZGVyLCBkYXRhLT5j
cmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbHNlCi0gICAgaWYgKCFt
X2RlY29kZXIpCi0gICAgICAgIG1fZGVjb2RlciA9IENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1l
bnRhbCgwKTsKLSAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFy
ZWRCdWZmZXIuCi0gICAgZGF0YS0+cmVmKCk7Ci0gICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0
UG9zaXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNh
dXNlIFNoYXJlZEJ1ZmZlcgotICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBk
b3duIHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdo
aWNoCi0gICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVy
IGNhbGxiYWNrLgotICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2Fs
bGJhY2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJl
ZEJ1ZmZlclJlbGVhc2UgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+
c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKLSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0
YVByb3ZpZGVyKG1fZGVjb2RlciwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQp
OwotI2VuZGlmCisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZpbGVuYW1l
RXh0ZW5zaW9uKCkgOiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0CitTdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpzdWJzYW1w
bGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLSAgICBDRlN0cmluZ1JlZiBpbWFnZVNvdXJjZVR5cGUgPSBDR0ltYWdl
U291cmNlR2V0VHlwZShtX2RlY29kZXIpOwotICAgIHJldHVybiBXZWJDb3JlOjpwcmVmZXJyZWRF
eHRlbnNpb25Gb3JJbWFnZVNvdXJjZVR5cGUoaW1hZ2VTb3VyY2VUeXBlKTsKKyAgICByZXR1cm4g
SW1hZ2VEZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoc2NhbGUsIG1heGltdW1TdWJz
YW1wbGluZ0xldmVsKTsKIH0KKyAgICAKIAotU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6
c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlKSBjb25zdAorc2l6ZV90IEltYWdl
U291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAogewotICAg
IC8vIFRoZXJlIGFyZSBmb3VyIHN1YnNhbXBsaW5nIGxldmVsczogMCA9IDF4LCAxID0gMC41eCwg
MiA9IDAuMjV4LCAzID0gMC4xMjV4LgotICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IHN0ZDo6bWF4
PGZsb2F0PigwLjEyNSwgc3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxlKSk7Ci0gICAgaW50IHJlc3Vs
dCA9IGNlaWxmKGxvZzJmKDEgLyBjbGFtcGVkU2NhbGUpKTsKLSAgICBBU1NFUlQocmVzdWx0ID49
MCAmJiByZXN1bHQgPD0gMyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gSW1hZ2VE
ZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKTsKIH0KLQorICAgIAog
Ym9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKIHsKLSAgICAvLyBSYWduYXJvcyB5
ZWxsczogVE9PIFNPT04hIFlvdSBoYXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEK
LSAgICBpZiAoQ0dJbWFnZVNvdXJjZUdldFN0YXR1cyhtX2RlY29kZXIpIDwga0NHSW1hZ2VTdGF0
dXNJbmNvbXBsZXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29w
eVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0
KCkpKTsKLSAgICBpZiAoIWltYWdlMFByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdl
dCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxXaWR0aCkKLSAgICAgICAgJiYgQ0ZEaWN0aW9uYXJ5
Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVs
SGVpZ2h0KTsKKyAgICByZXR1cm4gbV9kZWNvZGVyICYmIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxh
YmxlKCk7CiB9CiAKLXN0YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRnJvbVByb3Bl
cnRpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllcykKK2Jvb2wgSW1hZ2VTb3VyY2U6
OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKGltYWdlUHJvcGVydGllcyk7Ci0gICAgQ0ZOdW1iZXJSZWYgb3JpZW50YXRpb25Q
cm9wZXJ0eSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVByb3BlcnRp
ZXMsIGtDR0ltYWdlUHJvcGVydHlPcmllbnRhdGlvbik7Ci0gICAgaWYgKCFvcmllbnRhdGlvblBy
b3BlcnR5KQotICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0KLSAgICBp
bnQgZXhpZlZhbHVlOwotICAgIENGTnVtYmVyR2V0VmFsdWUob3JpZW50YXRpb25Qcm9wZXJ0eSwg
a0NGTnVtYmVySW50VHlwZSwgJmV4aWZWYWx1ZSk7Ci0gICAgcmV0dXJuIEltYWdlT3JpZW50YXRp
b246OmZyb21FWElGVmFsdWUoZXhpZlZhbHVlKTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAm
JiBtX2RlY29kZXItPmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChpbmRleCk7CiB9CiAK
LWJvb2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3Qp
IGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJj
ZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygp
LmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBDRkRpY3Rpb25hcnlSZWYgamZpZlByb3BlcnRpZXMgPSBzdGF0aWNfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdl
UHJvcGVydHlKRklGRGljdGlvbmFyeSkpOwotICAgIGlmIChqZmlmUHJvcGVydGllcykgewotICAg
ICAgICBDRkJvb2xlYW5SZWYgaXNQcm9nQ0ZCb29sID0gc3RhdGljX2Nhc3Q8Q0ZCb29sZWFuUmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShqZmlmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUpG
SUZJc1Byb2dyZXNzaXZlKSk7Ci0gICAgICAgIGlmIChpc1Byb2dDRkJvb2wpIHsKLSAgICAgICAg
ICAgIGJvb2wgaXNQcm9ncmVzc2l2ZSA9IENGQm9vbGVhbkdldFZhbHVlKGlzUHJvZ0NGQm9vbCk7
Ci0gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNTE4NDY1NT4g
LSBIYW5nIHJlbmRlcmluZyB2ZXJ5IGxhcmdlIHByb2dyZXNzaXZlIEpQRUcuIERlY29kaW5nIHBy
b2dyZXNzaXZlCi0gICAgICAgICAgICAvLyBpbWFnZXMgaGFuZ3MgZm9yIGEgdmVyeSBsb25nIHRp
bWUgcmlnaHQgbm93LiBVbnRpbCB0aGlzIGlzIGZpeGVkLCBkb24ndCBzdWItc2FtcGxlIHByb2dy
ZXNzaXZlIGltYWdlcy4gVGhpcwotICAgICAgICAgICAgLy8gd2lsbCBjYXVzZSB0aGVtIHRvIGZh
aWwgb3VyIGxhcmdlIGltYWdlIGNoZWNrIGFuZCB0aGV5IHdvbid0IGJlIGRlY29kZWQuCi0gICAg
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2UgdW5kZXJseWluZyBpc3N1ZSBpcyBmaXhlZCAo
PHJkYXI6Ly9wcm9ibGVtLzUxOTE0MTg+KQotICAgICAgICAgICAgcmV0dXJuICFpc1Byb2dyZXNz
aXZlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUludFNpemUg
SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVz
ID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2Rlciwg
aW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwotCi0g
ICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKIAotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGhlaWdodCA9IDA7
Ci0gICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKLSAgICBpZiAo
bnVtKQotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndp
ZHRoKTsKLSAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVy
dGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKLSAgICBpZiAobnVtKQot
ICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7
Ci0KLSAgICBpZiAoKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVz
cGVjdEltYWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVy
dGllcy5nZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUo
aGVpZ2h0LCB3aWR0aCk7CisgICAgSW50U2l6ZSBzaXplID0gbV9kZWNvZGVyLT5mcmFtZVNpemVB
dEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uID0gbV9kZWNvZGVyLT5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogCi0gICAg
cmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIHNob3VsZFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uICYmIG9yaWVudGF0aW9u
LnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBzaXplLnRyYW5zcG9zZWRTaXplKCkgOiBzaXplOwogfQog
CiBJbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdAogewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRp
ZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVy
LCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRp
ZXMpCi0gICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLQotICAgIHJldHVy
biBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVy
biBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpIDog
RGVmYXVsdEltYWdlT3JpZW50YXRpb247CiB9CiAKLUludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUo
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBJ
bWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgo
MCwgMCwgZGVzY3JpcHRpb24pOworICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDApOwog
fQogCi1ib29sIEltYWdlU291cmNlOjpnZXRIb3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25z
dAorSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0
CiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0Yo
Q0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIDAsIGltYWdlU291
cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpbnQgeCA9IC0xLCB5ID0gLTE7Ci0gICAgQ0ZOdW1iZXJSZWYgbnVt
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENG
U1RSKCJob3RzcG90WCIpKTsKLSAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckludFR5cGUsICZ4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbnVt
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENG
U1RSKCJob3RzcG90WSIpKTsKLSAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckludFR5cGUsICZ5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KHggPCAwIHx8IHkgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBob3RTcG90ID0g
SW50UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0
SW5kZXgoMCwgMCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb24pOwogfQogCi1zaXplX3QgSW1hZ2VT
b3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0Citib29sIElt
YWdlU291cmNlOjpnZXRIb3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAogewotICAgIC8v
IE1lYXN1cmVkIGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxvYyBjYWxscyBvbiBNYWMgT1MgMTAuNi42
LCB4ODZfNjQuCi0gICAgLy8gQSBub24temVybyB2YWx1ZSBlbnN1cmVzIGNhY2hlZCBpbWFnZXMg
d2l0aCBubyBkZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRlcgotICAgIC8vIHRoZSBsaXZlIGRlY29k
ZWQgcmVzb3VyY2VzIGxpc3Qgd2hlbiB0aGUgQ0dJbWFnZVNvdXJjZSBkZWNvZGVzIGltYWdlCi0g
ICAgLy8gcHJvcGVydGllcywgYWxsb3dpbmcgdGhlIGNhY2hlIHRvIHBydW5lIHRoZSBwYXJ0aWFs
bHkgZGVjb2RlZCBpbWFnZS4KLSAgICAvLyBUaGlzIHZhbHVlIGlzIGxpa2VseSB0byBiZSBpbmFj
Y3VyYXRlIG9uIG90aGVyIHBsYXRmb3JtcywgYnV0IHRoZSBvdmVyYWxsCi0gICAgLy8gYmVoYXZp
b3IgaXMgdW5jaGFuZ2VkLgotICAgIHJldHVybiAxMzA4ODsKKyAgICByZXR1cm4gbV9kZWNvZGVy
ICYmIG1fZGVjb2Rlci0+Z2V0SG90U3BvdChob3RTcG90KTsKIH0KLSAgICAKKwogaW50IEltYWdl
U291cmNlOjpyZXBldGl0aW9uQ291bnQoKQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGll
cyhtX2RlY29kZXIsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9w
ZXJ0aWVzKQotICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgQ0ZEaWN0
aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlHSUZEaWN0aW9uYXJ5KTsK
LSAgICBpZiAoZ2lmUHJvcGVydGllcykgewotICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9w
ZXJ0eUdJRkxvb3BDb3VudCk7Ci0KLSAgICAgICAgLy8gTm8gcHJvcGVydHkgbWVhbnMgbG9vcCBv
bmNlLgotICAgICAgICBpZiAoIW51bSkKLSAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9v
cE9uY2U7Ci0KLSAgICAgICAgaW50IGxvb3BDb3VudDsKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOwotCi0gICAgICAgIC8vIEEgcHJv
cGVydHkgd2l0aCB2YWx1ZSAwIG1lYW5zIGxvb3AgZm9yZXZlci4KLSAgICAgICAgcmV0dXJuIGxv
b3BDb3VudCA/IGxvb3BDb3VudCA6IGNBbmltYXRpb25Mb29wSW5maW5pdGU7Ci0gICAgfQotCi0g
ICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQTkdEaWN0
aW9uYXJ5KTsKLSAgICBpZiAocG5nUHJvcGVydGllcykgewotICAgICAgICBDRk51bWJlclJlZiBu
dW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2Vi
Q29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQpOwotICAgICAgICBpZiAoIW51bSkKLSAg
ICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICAgICAgaW50IGxvb3BD
b3VudDsKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZs
b29wQ291bnQpOwotICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1h
dGlvbkxvb3BJbmZpbml0ZTsKLSAgICB9Ci0KLSAgICAvLyBUdXJucyBvdXQgd2UncmUgbm90IGFu
IGFuaW1hdGVkIGltYWdlIGFmdGVyIGFsbCwgc28gd2UgZG9uJ3QgYW5pbWF0ZS4KLSAgICByZXR1
cm4gY0FuaW1hdGlvbk5vbmU7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXIt
PnJlcGV0aXRpb25Db3VudCgpIDogY0FuaW1hdGlvbkxvb3BPbmNlOwogfQogCiBzaXplX3QgSW1h
Z2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBtX2RlY29kZXIgPyBD
R0ltYWdlU291cmNlR2V0Q291bnQobV9kZWNvZGVyKSA6IDA7CisgICAgcmV0dXJuIG1fZGVjb2Rl
ciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKIH0KIAotQ0dJbWFnZVJlZiBJbWFnZVNv
dXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBz
dWJzYW1wbGluZ0xldmVsKQorUGFzc05hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVG
cmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxp
bmdMZXZlbCkKIHsKLSAgICBpZiAoIWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0ltYWdl
U291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0
aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2VkIHRoZSBk
ZWZhdWx0IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNoaW5nVHJh
bnNpZW50Ci0gICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBmb3Ig
dXMgc2luY2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBldmVyeSB0
aW1lIHdlIGNhbGxlZAotICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRlbGwgQ0cg
dG8gY2FjaGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzE0MzY2
NzU1PiAtCi0gICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBrQ0dJbWFn
ZUNhY2hpbmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQuCi0jaWYg
Q09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0jZW5k
aWYKLSAgICBDR0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hp
bmdUZW1wb3JhcnkpOwotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAotI2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQotCi0gICAgQ0ZTdHJpbmdS
ZWYgaW1hZ2VVVEkgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX2RlY29kZXIpOwotICAgIHN0YXRp
YyBjb25zdCBDRlN0cmluZ1JlZiB4Ym1VVEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1hZ2Ui
KTsKLQotICAgIGlmICghaW1hZ2VVVEkpCi0gICAgICAgIHJldHVybiBpbWFnZS5sZWFrUmVmKCk7
Ci0KLSAgICBpZiAoIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVUSSkpCi0gICAgICAgIHJldHVybiBp
bWFnZS5sZWFrUmVmKCk7Ci0gICAgCi0gICAgLy8gSWYgaXQgaXMgYW4geGJtIGltYWdlLCBtYXNr
IG91dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVtIHRyYW5zcGFyZW50LgotICAg
IGNvbnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUsIDI1NSwgIDI1NSwgMjU1LCAy
NTUsIDI1NX07Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1hc2tlZEltYWdlID0gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2UuZ2V0KCksIG1hc2tpbmdDb2xv
cnMpKTsKLSAgICBpZiAoIW1hc2tlZEltYWdlKQotICAgICAgICByZXR1cm4gaW1hZ2UubGVha1Jl
ZigpOwotCi0gICAgcmV0dXJuIG1hc2tlZEltYWdlLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gaW5p
dGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGZyYW1lQ291bnQo
KSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRTdGF0dXNBdEluZGV4KG1fZGVjb2Rlciwg
aW5kZXgpID09IGtDR0ltYWdlU3RhdHVzQ29tcGxldGU7CisgICAgcmV0dXJuIGluaXRpYWxpemVk
KCkgJiYgbV9kZWNvZGVyLT5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KTsKIH0KIAogZmxv
YXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAg
ICBpZiAoIWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgZHVy
YXRpb24gPSAwOwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCBpbmRl
eCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAocHJvcGVydGllcykgewot
ICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJ
RkRpY3Rpb25hcnkpOwotICAgICAgICBpZiAoZ2lmUHJvcGVydGllcykgewotICAgICAgICAgICAg
aWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShn
aWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lGVW5jbGFtcGVkRGVsYXlUaW1lKSkgewot
ICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGlmIGl0IGV4
aXN0cy4KLSAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVyRmxv
YXRUeXBlLCAmZHVyYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChDRk51bWJlclJlZiBu
dW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZ2lmUHJvcGVydGllcywga0NH
SW1hZ2VQcm9wZXJ0eUdJRkRlbGF5VGltZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGYWxsIGJh
Y2sgdG8gdGhlIGNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgdGhlIHVuY2xhbXBlZCBmcmFtZSBkZWxh
eSBkb2VzIG5vdCBleGlzdC4KLSAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwg
a0NGTnVtYmVyRmxvYXRUeXBlLCAmZHVyYXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5
UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVy
dHlQTkdEaWN0aW9uYXJ5KTsKLSAgICAgICAgaWYgKHBuZ1Byb3BlcnRpZXMpIHsKLSAgICAgICAg
ICAgIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNsYW1wZWREZWxh
eVRpbWUpKQotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJG
bG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICBlbHNlIGlmIChDRk51bWJlclJlZiBu
dW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2Vi
Q29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUpKQotICAgICAgICAgICAgICAgIENGTnVt
YmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlv
biB0byBtYWtlIGFuIGltYWdlIGZsYXNoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCi0gICAgLy8g
V2UgZm9sbG93IEZpcmVmb3gncyBiZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRpb24gb2YgMTAwIG1z
IGZvciBhbnkgZnJhbWVzIHRoYXQgc3BlY2lmeQotICAgIC8vIGEgZHVyYXRpb24gb2YgPD0gMTAg
bXMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzY4OTMwMD4gYW5kIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzM2MDgyPgotICAgIC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgIGlmIChkdXJhdGlvbiA8
IDAuMDExZikKLSAgICAgICAgcmV0dXJuIDAuMWY7Ci0gICAgcmV0dXJuIGR1cmF0aW9uOworICAg
IHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5mcmFtZUR1cmF0aW9uQXRJbmRleChp
bmRleCkgOiAwOwogfQogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gRklYTUU6IHdoeSBkb2Vzbid0IHRoaXMgcmV0dXJuIHRydWU/Ci0KLSAgICBpZiAoIWZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IENGU3RyaW5nUmVmIGltYWdlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7
Ci0KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMgbm8gaW1hZ2UgdHlwZSBvciB0aGUg
aW1hZ2UgdHlwZSBpcyBKUEVHLCBiZWNhdXNlCi0gICAgLy8gSlBFRyBkb2VzIG5vdCBzdXBwb3J0
IGFscGhhIHRyYW5zcGFyZW5jeS4KLSAgICBpZiAoIWltYWdlVHlwZSB8fCBDRkVxdWFsKGltYWdl
VHlwZSwgQ0ZTVFIoInB1YmxpYy5qcGVnIikpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBGSVhNRTogQ291bGQgcmV0dXJuIGZhbHNlIGZvciBvdGhlciBub24tdHJhbnNwYXJlbnQg
aW1hZ2UgZm9ybWF0cy4KLSAgICAvLyBGSVhNRTogQ291bGQgbWF5YmUgcmV0dXJuIGZhbHNlIGZv
ciBhIEdJRiBGcmFtZSBpZiB3ZSBoYXZlIGVub3VnaCBpbmZvIGluIHRoZSBHSUYgcHJvcGVydGll
cyBkaWN0aW9uYXJ5Ci0gICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgdHJhbnNw
YXJlbnQgY29sb3Igd2FzIGRlZmluZWQuCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGlu
aXRpYWxpemVkKCkgJiYgbV9kZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9
CiAKIHVuc2lnbmVkIEltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBJbnRTaXpl
IGZyYW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikpOwotICAg
IHJldHVybiBmcmFtZVNpemUud2lkdGgoKSAqIGZyYW1lU2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAg
cmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1lQnl0ZXNBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsKSA6IDA7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3Bw
CmluZGV4IGJhNDE1OTdhYTExMDFkYjYyOTAyM2QyNzNiMjAwZTc4MWQzM2FhYzkuLjU5Y2MyYzli
ZThiM2ZmZTExMTg2YTY4NWQyZThjZjU5NGMxZDM5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZs
LmNwcApAQCAtMjYzLDcgKzI2Myw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0
cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sCiAgICAgICAg
IGlmICghZGVjb2Rlci5mcmFtZUNvdW50KCkgfHwgIWRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJ
bmRleCgwKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2ltYWdlU3Vy
ZmFjZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApOworICAgICAgICBtX2ltYWdlU3Vy
ZmFjZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwogICAgICAgICAvLyAxLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVu
dCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQg
dGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVhY2ggcGl4ZWwsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCmluZGV4IDIxNTkxNWYyOGExOTIx
NzIzOTZkNDZmMDg2ZDIyNDliODFkOWQ3NmEuLmUxODMzZDE5ODMwYjEwNzY2MzY2NGI2MTI4NDQ1
OTdmODNmYzBhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2lvcy9JY29uSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9JY29uSU9TLm1tCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKLUljb246Okljb24oQ0dJbWFnZVJlZiBpbWFnZSkKK0ljb246Okljb24oTmF0aXZlSW1hZ2VQ
dHIgaW1hZ2UpCiAgICAgOiBtX2NnSW1hZ2UoaW1hZ2UpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggZmYwNzEzMWE2MWZj
ZWQwNDU4NmIzNzJkOWJhMjA3OWE5ODczYzM4Yi4uZmEwMTFhYTg4MTYzMDMwMDA5NDQ5OGViYzBm
ZmNhOWZiOWMzMDM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9JbWFnZU1hYy5tbQpAQCAtOTUsNyArOTUsNyBAQCBDRkRhdGFSZWYgQml0bWFwSW1hZ2U6
OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCiAKICAgICBWZWN0b3I8Q0dJbWFnZVJlZj4gaW1hZ2Vz
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GcmFtZXM7ICsraSApIHsKLSAgICAg
ICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVBdEluZGV4KGkpOworICAgICAgICBDR0ltYWdl
UmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKICAgICAgICAgaWYgKGNn
SW1hZ2UpCiAgICAgICAgICAgICBpbWFnZXMuYXBwZW5kKGNnSW1hZ2UpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcApp
bmRleCA4MzVlY2YzZjRmZWVlYjhhMGRmYThkMzY5NzMxMjhmM2I4MDdiOTI2Li40NzA3M2MwZWQ2
OTBlMDQ0ZmZiM2E5NGU1ODZmMjYwMjc5ZDFjNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCkBAIC05MCw3ICs5MCw3IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0Nv
bnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0CiB7CiAgICAgc2l6ZV90IGZyYW1lcyA9IGZyYW1lQ291
bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7Ci0gICAgICAg
IENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgoaSk7CisgICAgICAgIENHSW1hZ2VSZWYg
aW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKICAgICAgICAgaWYgKGltYWdlICYm
IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS5o
ZWlnaHQoKSkgJiYgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHNyY1NpemUud2lkdGgoKSkpIHsKICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBt
X2N1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gaTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNw
cAppbmRleCAyOWEyMDIzZGI2M2E5MTQzNGMzOTQ4ZWFhNTUyM2JiNjFmZTgxMDc1Li45N2VkMDk3
OTM1YzUxZmMyMGE4NDVjOTU4ZTE1Njk4ZDIwMDBkYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCkBAIC05Myw3
ICs5Myw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShH
cmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0CiB7CiAgICAgc2l6ZV90IGZyYW1lcyA9
IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7
Ci0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBmcmFtZUF0SW5kZXgo
aSk7CisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBmcmFtZUltYWdl
QXRJbmRleChpKTsKICAgICAgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICAgICAgY29udGludWU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCmluZGV4IGJi
YWU5MWZhOGUzYzA2NjQ0N2M0NjRkNmUzMTIwMGRlMjQ4Y2U4M2YuLjkxYzkyZTkxMmNjMjE4OTJm
NjU5ZTY3YTk1OTU3MWZiZGQwMDI3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0RyYWdJbWFnZU1hYy5tbQpAQCAtOTEsNyArOTEsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gY3Jl
YXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aQogICAgIGlmIChpczxCaXRtYXBJbWFnZT4oKmltYWdlKSkgewogICAgICAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uOwogICAgICAgICBCaXRtYXBJbWFnZSYgYml0bWFwSW1hZ2UgPSBk
b3duY2FzdDxCaXRtYXBJbWFnZT4oKmltYWdlKTsKLSAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihk
ZXNjcmlwdGlvbik7CisgICAgICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9
IGJpdG1hcEltYWdlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsKIAogICAgICAgICBpZiAo
ZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbikKICAgICAgICAgICAgIG9yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uub3JpZW50YXRp
b25Gb3JDdXJyZW50RnJhbWUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273940</attachid>
            <date>2016-03-14 01:44:45 -0700</date>
            <delta_ts>2016-03-25 20:38:25 -0700</delta_ts>
            <desc>patch for review</desc>
            <filename>image-2.patch</filename>
            <type>text/plain</type>
            <size>63888</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzN2E2ZjNkLi5iM2VhODc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsOTkg
QEAKIDIwMTYtMDMtMTMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNv
bT4KIAorICAgICAgICBDcmVhdGUgYSBDRyBJbWFnZURlY29kZXIgY2xhc3MgaW5zdGVhZCBvZiBk
ZWZpbmluZyBpdCBhcyBDR0ltYWdlU291cmNlUmVmIAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgaW1hZ2UgZGVjb2RpbmcgY29kZSBmcm9t
IEltYWdlU291cmNlQ0cuY3BwIG91dCB0byBhIG5ldyBjbGFzcyBuYW1lZAorICAgICAgICBJbWFn
ZURlY29kZXIuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc3BsaXQgaXMgdG8gaGF2ZSB0aGUgQ0cgSW1h
Z2VTb3VyY2Ugc2ltaWxhcgorICAgICAgICB0byB0aGUgbm9uZSBDRyBJbWFnZVNvdXJjZSB3aGVy
ZSB0aGVyZSBpcyBhIHNlcGFyYXRlIGNsYXNzIGZvciBkZWNvZGluZy4gVGhlCisgICAgICAgIHBs
YW4gaXMgdG8gbWVyZ2UgdGhlIEltYWdlU291cmNlLmNwcCBhbmQgSW1hZ2VTb3VyY2VDRy5jcHAg
aW4gb25lIGZpbGUgc28KKyAgICAgICAgZGVjaWRpbmcgd2hldGhlciB0aGUgZGVjb2Rpbmcgc2hv
dWxkIGhhcHBlbiBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5CisgICAgICAgIGNhbiBo
YXBwZW4gaW4gb25lIHBsYWNlIGFuZCB0aGUgY2FjaGluZyBvZiB0aGUgZnJhbWVzIGNhbiBiZSBo
YW5kbGVkIGJ5IHRoZQorICAgICAgICBJbWFnZVNvdXJjZSBhcyB3ZWxsLgorCisgICAgICAgICog
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdl
OjppbWFnZVNpemVGb3JSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnVwZGF0ZVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VE
ZWNvZGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDRy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbWFnZVNvdXJj
ZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VTb3VyY2VPcHRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbik7CisgICAgICAgIChX
ZWJDb3JlOjpzaGFyZWRCdWZmZXJSZWxlYXNlKTsKKyAgICAgICAgKFdlYkNvcmU6Om9yaWVudGF0
aW9uRnJvbVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFn
ZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdWJzYW1wbGluZ0xl
dmVsRm9yU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpieXRlc0RlY29k
ZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
OjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6Z2V0SG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpm
cmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
b3JpZW50YXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJh
bWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjphbGxv
d1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
OjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6On5JbWFnZURlY29kZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmaWxl
bmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c3Vic2FtcGxp
bmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpieXRlc0Rl
Y29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6YWxs
b3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpv
cmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkQnVmZmVyR2V0
Qnl0ZXNBdFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZl
clJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdl
U291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlU291cmNlT3B0
aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9wdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwpOgorCisyMDE2
LTAzLTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKICAg
ICAgICAgQ2hhbmdlIE5hdGl2ZUltYWdlUHRyIGZvciBDRyB0byBiZSBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NTQxMgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBlNTIwOWNiLi43
YjM2N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTcxLDYgKzcx
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0dXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggODM1YjlhYS4uZGFjZGE1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKQEAgLTQwMCw2ICs0MDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNv
ZGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDMwN2JhMy4uNmI2MjkzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI5
MSw2ICsyMjkxLDggQEAKIAkJNTNFRjc2NkMxNjUzMTk5NDAwNENCRTQ5IC8qIFNldHRpbmdzTWFj
cm9zLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0VGNzY2QTE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCAq
LzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4NUY2
MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmll
ZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk1NTlCQjg3OTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OUJCODc3MUM5NjQ2NTgwMDI0
MTNDRCAvKiBJbWFnZURlY29kZXIuY3BwICovOyB9OworCQk1NTlCQjg3QTFDOTY0NjU4MDAyNDEz
Q0QgLyogSW1hZ2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTlCQjg3ODFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggKi87
IH07CiAJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjAxQzZFNTcx
OTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggKi87IH07CiAJCTU3MkE3RjIzMUM2RTVBNjYw
MDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVk
Q2xpY2suY3BwICovOyB9OwogCQk1ODAzNzE2MTFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgwMzcx
NUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCAqLzsgfTsKQEAgLTk4NzUsNiArOTg3
Nyw4IEBACiAJCTUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR0aW5nc01hY3Jvcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBRdWFsaWZpZWROYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAv
KiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTU1OUJCODc3MUM5NjQ2NTgwMDI0MTNDRCAv
KiBJbWFnZURlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5QkI4Nzgx
Qzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZURlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTgzMyw2
ICsyMTgzNyw4IEBACiAJCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmNwcCAqLywKIAkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCAqLywKIAkJCQlCMjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5j
cHAgKi8sCisJCQkJNTU5QkI4NzcxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5jcHAg
Ki8sCisJCQkJNTU5QkI4NzgxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rlci5oICovLAog
CQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKIAkJ
CQk0QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLAogCQkJCTRC
MzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1tICovLApAQCAtMjY4
MTIsNiArMjY4MTgsNyBAQAogCQkJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU1Njcmlw
dFByb2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGQTM3RUZCMTE3MkZEQTYwMEM0
Q0Q1NSAvKiBKU1NjcmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGQTM3RUZEMTE3
MkZEQTYwMEM0Q0Q1NSAvKiBKU1NjcmlwdFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1NTlCQjg3QTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRUQwNkFEMTFDNzc3NTQ4MDBGREZBRjEgLyogSlNTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkRBNjREODFCOTc1Q0YyMDA5QzQzODcg
LyogSlNTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDlERTE3QjE3QUFDNzVCMDBF
QTM4NkQgLyogSlNTb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjkyMDMsNiArMjky
MTAsNyBAQAogCQkJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkNGMzMyNDBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQUJBNzZDOTExRDIwRTQ3MDA0QzIwMUMgLyogQ29sb3JEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTU1OUJCODc5MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURl
Y29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyOTkzNUQxN0ExREQ1ODAwQkNFODgwIC8q
IENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTc3MEIwNTM4MTQw
MDJDRTY0RiAvKiBDb2xvck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQzRURENjdFMUI0ODVE
QkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IGYzNzg3
NTIuLjlhMTQ3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcApAQCAtMjc4LDcgKzI3OCw3IEBAIExheW91dFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6
ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGZsb2F0CiAgICAgaWYg
KHJlbmRlcmVyICYmIGlzPEJpdG1hcEltYWdlPigqbV9pbWFnZSkpIHsKICAgICAgICAgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIG9yaWVudGF0aW9uRGVzY3JpcHRpb24ocmVuZGVyZXItPnNo
b3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCksIHJlbmRlcmVyLT5zdHlsZSgpLmltYWdlT3Jp
ZW50YXRpb24oKSk7CiAgICAgICAgIGlmIChvcmllbnRhdGlvbkRlc2NyaXB0aW9uLnJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgICAg
ICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25jYXN0PEJpdG1hcEltYWdlPigqbV9pbWFnZSku
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihvcmllbnRhdGlvbkRlc2NyaXB0aW9uKSk7CisgICAg
ICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKGRvd25jYXN0PEJpdG1hcEltYWdlPigqbV9p
bWFnZSkuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpKTsKICAgICB9CiAjZWxzZQogICAgIGlm
IChpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpICYmIChyZW5kZXJlciAmJiByZW5kZXJlci0+c2hv
dWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAK
aW5kZXggZGM5OWM1Yi4uOTY0MGVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNDcsOSArNDcsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZl
cikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZl
bCgwKQotICAgICwgbV9pbWFnZU9yaWVudGF0aW9uKE9yaWdpblRvcExlZnQpCi0gICAgLCBtX3No
b3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKGZhbHNlKQogICAgICwgbV9jdXJyZW50RnJhbWUo
MCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBl
dGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikKQEAgLTIzNiwxNiArMjMzLDEzIEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogICAgICAgICBpbWFnZU9ic2Vy
dmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKIH0KIAotdm9pZCBC
aXRtYXBJbWFnZTo6dXBkYXRlU2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3Jp
cHRpb24pIGNvbnN0Cit2b2lkIEJpdG1hcEltYWdlOjp1cGRhdGVTaXplKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSB8fCBtX2hhdmVTaXplKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKGRlc2NyaXB0aW9uKTsKLSAgICBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlv
bigpKSk7Ci0KLSAgICBtX2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBtX3Nob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uKCkpOworICAgIG1fc2l6ZSA9IG1fc291cmNlLnNpemUoKTsKKyAgICBt
X3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uKCk7CiAKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsKIApAQCAtMjU5LDkgKzI1Myw5IEBA
IEZsb2F0U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2l6ZTsK
IH0KIAotSW50U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEJpdG1h
cEltYWdlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICB1cGRhdGVT
aXplKGRlc2NyaXB0aW9uKTsKKyAgICB1cGRhdGVTaXplKCk7CiAgICAgcmV0dXJuIG1fc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbjsKIH0KIApAQCAtMzkxLDcgKzM4NSw3IEBAIFBhc3NOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9h
dCBwcmVzZW50YXRpCiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBz
dGQ6Om1pbihtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUocHJlc2VudGF0aW9uU2Nh
bGVIaW50KSwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk7CisgICAgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsID0gbV9zb3VyY2Uuc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKHBy
ZXNlbnRhdGlvblNjYWxlSGludCwgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7CiAKICAgICAv
LyBXZSBtYXkgaGF2ZSBjYWNoZWQgYSBmcmFtZSB3aXRoIGEgaGlnaGVyIHN1YnNhbXBsaW5nIGxl
dmVsLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8KICAgICAvLyByZS1kZWNvZGUgd2l0aCBhIGxv
d2VyIGxldmVsLgpAQCAtNzE0LDkgKzcwOCw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4
dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3ctc3Vic2Ft
cGxpbmciLCBhbGxvd1N1YnNhbXBsaW5nKCkpOwogICAgIGlmIChtX2lzU29saWRDb2xvcikKICAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzb2xpZC1jb2xvciIsIG1faXNTb2xpZENvbG9yKTsKLSAg
ICAKLSAgICBpZiAobV9pbWFnZU9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBtX2ltYWdlT3JpZW50YXRpb24pOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApp
bmRleCA0ZWQ3MjhhLi43NjlhZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBGbG9hdFNpemUgZHVlIHRvIG92ZXJyaWRlLgogICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25z
dDsKKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsKIAogICAg
IGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xNzQsNyAr
MTc0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHVwZGF0ZVNpemUoSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNv
bnN0OworICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgZGV0ZXJtaW5lTWlu
aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMjgyLDEwICsy
ODIsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXpl
IHRvIHVzZSBmb3IgdGhlIG92ZXJhbGwgaW1hZ2UgKHdpbGwganVzdCBiZSB0aGUgc2l6ZSBvZiB0
aGUgZmlyc3QgaW1hZ2UpLgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb247CiAKLSAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9taW5pbXVtU3Vic2Ft
cGxpbmdMZXZlbDsKLQotICAgIG11dGFibGUgdW5zaWduZWQgbV9pbWFnZU9yaWVudGF0aW9uIDog
NDsgLy8gSW1hZ2VPcmllbnRhdGlvbkVudW0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fc2hvdWxk
UmVzcGVjdEltYWdlT3JpZW50YXRpb24gOiAxOyAvLyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVu
dW0KKyAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZl
bCB7IDAgfTsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRo
ZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBt
X2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlv
bi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBl
MzgyMWQ0Li4yZmZhNDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC02OCwxMSArNjgsNiBAQCB2b2lkIEltYWdlU291cmNlOjpj
bGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZm
ZXIqCiAgICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotYm9vbCBJ
bWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlY29kZXI7
Ci19Ci0KIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKIHsKICAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5n
IHRoZSBieXRlcy4KQEAgLTk2LDcgKzkxLDcgQEAgU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+Zmls
ZW5hbWVFeHRlbnNpb24oKSA6IFN0cmluZygpOwogfQogCi1TdWJzYW1wbGluZ0xldmVsIEltYWdl
U291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQpIGNvbnN0CitTdWJzYW1wbGlu
Z0xldmVsIEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQsIFN1YnNh
bXBsaW5nTGV2ZWwpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMTEsMjEgKzEwNiwy
NSBAQCBib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBtX2Rl
Y29kZXIgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKIH0KIAotSW50U2l6ZSBJbWFn
ZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNv
bnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZnJh
bWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0
SW5kZXgoMCwgMCk7Cit9CisgICAgCitJbnRTaXplIEltYWdlU291cmNlOjpzaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAw
LCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CiB9CiAKLUludFNpemUgSW1hZ2VTb3VyY2U6OmZy
YW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNl
OjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgUmVzcGVj
dEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25z
dAogewotICAgIGlmICghbV9kZWNvZGVyKQorICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKICAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKIAogICAgIEludFNpemUgc2l6ZSA9IG1fZGVjb2Rlci0+ZnJh
bWVTaXplQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSAmJiBtX2RlY29kZXItPm9y
aWVudGF0aW9uKCkudXNlc1dpZHRoQXNIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUo
c2l6ZS5oZWlnaHQoKSwgc2l6ZS53aWR0aCgpKTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uID0gbV9kZWNvZGVyLT5vcmllbnRhdGlvbigpOwogCi0gICAgcmV0dXJuIHNpemU7Cisg
ICAgcmV0dXJuIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uICYmIG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBzaXplLnRyYW5z
cG9zZWRTaXplKCkgOiBzaXplOwogfQogCiBib29sIEltYWdlU291cmNlOjpnZXRIb3RTcG90KElu
dFBvaW50JiBob3RTcG90KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgKaW5kZXggNGQ0NTNkMi4uOTBiNDI5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC00NiwxOCArNDYsOSBA
QCBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAK
LSNpZiBVU0UoQ0cpCi10eXBlZGVmIENHSW1hZ2VTb3VyY2VSZWYgTmF0aXZlSW1hZ2VEZWNvZGVy
UHRyOwotI2Vsc2UKIGNsYXNzIEltYWdlRGVjb2RlcjsKIHR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBO
YXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZW5kaWYKLQotI2lmIFVTRShDRykKLSNkZWZpbmUgTmF0
aXZlSW1hZ2VEZWNvZGVyIEltYWdlRGVjb2RlcgotI2Vsc2UKIHR5cGVkZWYgSW1hZ2VEZWNvZGVy
IE5hdGl2ZUltYWdlRGVjb2RlcjsKLSNlbmRpZgogCiAvLyBSaWdodCBub3cgR0lGcyBhcmUgdGhl
IG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhhdCBzdXBwb3J0cyBhbmltYXRpb24uCiAv
LyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVzaWdu
ZWQgd2l0aCB0aGlzIGluIG1pbmQuCkBAIC0xMjIsMTkgKzExMywyMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSBOVUxMLAogICAgICAgICAgICAgICAgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZSk7CiAKLSAgICBib29sIGluaXRpYWxpemVkKCkgY29u
c3Q7CisgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlcjsgfQog
CiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOwogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwogCi0gICAgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQpIGNvbnN0OworICAgIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0LCBTdWJzYW1wbGlu
Z0xldmVsKSBjb25zdDsKICAgICBib29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChz
aXplX3QpIGNvbnN0OwogCiAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKICAgICAvLyBBbHdh
eXMgb3JpZ2luYWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1wbGluZy4KLSAgICBJbnRTaXplIHNpemUo
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
KCkpIGNvbnN0OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0OwogICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBz
dWJzYW1wbGVkIGZyYW1lLgotICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1
YnNhbXBsaW5nTGV2ZWwgPSAwLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24oKSkgY29uc3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdElu
ZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
RW51bSA9IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OwogCiAgICAgYm9vbCBn
ZXRIb3RTcG90KEludFBvaW50JikgY29uc3Q7CiAKQEAgLTE2Myw3ICsxNTUsOSBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVy
OworICAgIHZvaWQgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChTaGFyZWRCdWZmZXIqKTsKKyAgICAK
KyAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyIHsgbnVsbHB0ciB9OwogCiAjaWYg
IVVTRShDRykKICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAppbmRleCBhM2Y1YzdkLi4zNjAwMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApAQCAt
NDEsNyArNDEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1h
Z2UoUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5hdGl2ZUltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQogICAgICwgbV9zaXplKGNhaXJvU3Vy
ZmFjZVNpemUobmF0aXZlSW1hZ2UuZ2V0KCkpKQotICAgICwgbV9taW5pbXVtU3Vic2FtcGxpbmdM
ZXZlbCgwKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50
KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikK
QEAgLTEyNCw3ICsxMjMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsbwogCiB2b2lkIEJpdG1h
cEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0CiB7Ci0gICAg
bV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCA9IDA7CisgICAgbV9tYXhpbXVtU3Vic2FtcGxpbmdM
ZXZlbCA9IDA7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFn
ZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdl
Q0cuY3BwCmluZGV4IGJlMTM2MmQuLmNjN2VjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCkBAIC03MCw5ICs3MCw2
IEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCiAKIEJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwgSW1hZ2VPYnNlcnZlciogb2Jz
ZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11bVN1YnNhbXBsaW5n
TGV2ZWwoMCkKLSAgICAsIG1faW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BMZWZ0KQotICAgICwg
bV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAsIG1fY3VycmVudEZy
YW1lKDApCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1f
cmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCkBAIC0xMjQsNyArMTIxLDcgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdAogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCA9
IGN1cnJlbnRMZXZlbDsKKyAgICBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsID0gY3VycmVudExl
dmVsOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAK
aW5kZXggYTJmZWZlNi4uNTI1YWM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuY3BwCkBAIC0xLDkgKzEsNDEzIEBACi0vLwot
Ly8gIEltYWdlRGVjb2Rlci5jcHAKLS8vICBXZWJDb3JlCi0vLwotLy8gIENyZWF0ZWQgYnkgU2Fp
ZCBBYm91LUhhbGxhd2Egb24gMy8xMy8xNi4KLS8vCi0vLwotCi0jaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmhwcCIKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpZiBVU0Uo
Q0cpCisKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVu
dGF0aW9uLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjaWYgIVBMQVRGT1JNKElPUykKKyNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNl
CisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2VuZGlmCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2ltcG9ydCA8SW1hZ2VJ
Ty9DR0ltYWdlU291cmNlUHJpdmF0ZS5oPgorI2Vsc2UKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0lt
YWdlU291cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxl
RmFjdG9yIik7Citjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlSW1t
ZWRpYXRlbHkgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZUltbWVkaWF0ZWx5Iik7
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY29uc3QgQ0ZTdHJpbmdSZWYg
V2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNsYW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5j
bGFtcGVkRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3Bl
cnR5QVBOR0RlbGF5VGltZSA9IENGU1RSKCJEZWxheVRpbWUiKTsKK2NvbnN0IENGU3RyaW5nUmVm
IFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIp
OworCitjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyID0g
Q0ZTVFIoImtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIiKTsKK2NvbnN0IENGU3RyaW5n
UmVmIGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2tp
cE1ldGFkYXRhIik7CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVJ
bWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBEZWNv
ZGVNb2RlIGRlY29kZU1vZGUpCit7CisgICAgY29uc3QgQ0ZJbmRleCBiYXNpY09wdGlvbnMgPSAz
OworICAgIGNvbnN0IHZvaWQqIGtleXNbYmFzaWNPcHRpb25zICsgMl0gPSB7IGtDR0ltYWdlU291
cmNlU2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdl
U291cmNlU2tpcE1ldGFkYXRhIH07CisgICAgY29uc3Qgdm9pZCogdmFsdWVzW2Jhc2ljT3B0aW9u
cyArIDJdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVl
IH07CisgICAgQ0ZJbmRleCBudW1PcHRpb25zID0gYmFzaWNPcHRpb25zOworICAgIAorICAgIGlm
IChzdWJzYW1wbGluZ0xldmVsID4gMCkgeworICAgICAgICBzaG9ydCBjb25zdHJhaW5lZFN1YnNh
bXBsaW5nTGV2ZWwgPSBzdGQ6Om1pbjxzaG9ydD4oMywgc3RkOjptYXg8c2hvcnQ+KDAsIHN1YnNh
bXBsaW5nTGV2ZWwpKTsKKyAgICAgICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWlu
ZWRTdWJzYW1wbGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCisgICAgICAgIFJl
dGFpblB0cjxDRk51bWJlclJlZj4gc3Vic2FtcGxlTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZzdWJzYW1wbGVJbnQpKTsKKyAgICAg
ICAgCisgICAgICAgIGtleXNbbnVtT3B0aW9uc10gPSBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZh
Y3RvcjsKKyAgICAgICAgdmFsdWVzW251bU9wdGlvbnMrK10gPSBrQ0dJbWFnZVNvdXJjZVN1YnNh
bXBsZUZhY3RvcjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlY29kZU1vZGUgPT0gRGVjb2RlTW9k
ZTo6SW1tZWRpYXRlKSB7CisgICAgICAgIGtleXNbbnVtT3B0aW9uc10gPSBrQ0dJbWFnZVNvdXJj
ZVNob3VsZENhY2hlSW1tZWRpYXRlbHk7CisgICAgICAgIHZhbHVlc1tudW1PcHRpb25zKytdID0g
a0NGQm9vbGVhblRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
K30KKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9u
cyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSAwLCBEZWNvZGVNb2RlIGRlY29k
ZU1vZGUgPSBEZWNvZGVNb2RlOjpMYXp5KQoreworICAgIGlmIChzdWJzYW1wbGluZ0xldmVsIHx8
IGRlY29kZU1vZGUgPT0gRGVjb2RlTW9kZTo6SW1tZWRpYXRlKQorICAgICAgICByZXR1cm4gY3Jl
YXRlSW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwsIGRlY29kZU1vZGUpOworICAg
IAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4g
b3B0aW9ucyA9IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucygwLCBEZWNvZGVNb2RlOjpMYXp5KTsK
KyAgICByZXR1cm4gb3B0aW9uczsKK30KKworc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50
YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQorewor
ICAgIEFTU0VSVChpbWFnZVByb3BlcnRpZXMpOworICAgIENGTnVtYmVyUmVmIG9yaWVudGF0aW9u
UHJvcGVydHkgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaW1hZ2VQcm9wZXJ0
aWVzLCBrQ0dJbWFnZVByb3BlcnR5T3JpZW50YXRpb24pOworICAgIGlmICghb3JpZW50YXRpb25Q
cm9wZXJ0eSkKKyAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworICAgIAor
ICAgIGludCBleGlmVmFsdWU7CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShvcmllbnRhdGlvblByb3Bl
cnR5LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZXhpZlZhbHVlKTsKKyAgICByZXR1cm4gSW1hZ2VPcmll
bnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOworfQorICAgIAorI2lmICFQTEFURk9S
TShDT0NPQSkKK3NpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5m
bywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQoreworICAgIFNo
YXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5m
byk7CisgICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICBp
ZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
Y29uc3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKKyAg
ICBzaXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBv
c2l0aW9uKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJu
IGFtb3VudDsKK30KKwordm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCit7Cisg
ICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIq
PihpbmZvKTsKKyAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Cit9CisjZW5kaWYKKworSW1hZ2VE
ZWNvZGVyOjpJbWFnZURlY29kZXIoKQoreworICAgIG1fbmF0aXZlRGVjb2RlciA9IENHSW1hZ2VT
b3VyY2VDcmVhdGVJbmNyZW1lbnRhbCgwKTsKK30KKworU3Vic2FtcGxpbmdMZXZlbCBJbWFnZURl
Y29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdM
ZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgZm91ciBz
dWJzYW1wbGluZyBsZXZlbHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1
eC4KKyAgICBmbG9hdCBjbGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6
bWluPGZsb2F0PigxLCBzY2FsZSkpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgcmVzdWx0ID0gY2Vp
bGYobG9nMmYoMSAvIGNsYW1wZWRTY2FsZSkpOworICAgIEFTU0VSVChyZXN1bHQgPj0wICYmIHJl
c3VsdCA8PSAzKTsKKyAgICByZXR1cm4gc3RkOjptaW4ocmVzdWx0LCBtYXhpbXVtU3Vic2FtcGxp
bmdMZXZlbCk7Cit9CisKK3NpemVfdCBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJt
aW5lUHJvcGVydGllcygpCit7CisgICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2Fs
bG9jIGNhbGxzIG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KKyAgICAvLyBBIG5vbi16ZXJvIHZh
bHVlIGVuc3VyZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVu
dGVyCisgICAgLy8gdGhlIGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVuIHRoZSBDR0lt
YWdlU291cmNlIGRlY29kZXMgaW1hZ2UKKyAgICAvLyBwcm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUg
Y2FjaGUgdG8gcHJ1bmUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgorICAgIC8vIFRoaXMg
dmFsdWUgaXMgbGlrZWx5IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZvcm1zLCBidXQg
dGhlIG92ZXJhbGwKKyAgICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCisgICAgcmV0dXJuIDEz
MDg4OworfQorCitTdHJpbmcgSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
Cit7CisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5
cGUobV9uYXRpdmVEZWNvZGVyKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVkRXh0ZW5z
aW9uRm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Cit9CisKK2Jvb2wgSW1hZ2VE
ZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAoreworICAgIC8vIFJhZ25hcm9zIHllbGxz
OiBUT08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1dHVzIQorICAg
IGlmIChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fbmF0aXZlRGVjb2RlcikgPCBrQ0dJbWFnZVN0
YXR1c0luY29tcGxldGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291
cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VP
cHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWltYWdlMFByb3BlcnRpZXMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1h
Z2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCisgICAgJiYg
Q0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBpeGVsSGVpZ2h0KTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kZXI6OnNpemUoKSBj
b25zdAoreworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQorICAgICAgICBtX3NpemUgPSBmcmFt
ZVNpemVBdEluZGV4KDAsIDApOworICAgIHJldHVybiBtX3NpemU7Cit9CisKK3NpemVfdCBJbWFn
ZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBDR0ltYWdlU291cmNl
R2V0Q291bnQobV9uYXRpdmVEZWNvZGVyKTsKK30KKworaW50IEltYWdlRGVjb2Rlcjo6cmVwZXRp
dGlvbkNvdW50KCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9w
ZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXMobV9uYXRpdmVEZWNv
ZGVyLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykK
KyAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAgICAKKyAgICBDRkRpY3Rpb25h
cnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOworICAg
IGlmIChnaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5
R0lGTG9vcENvdW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vIHByb3BlcnR5IG1lYW5zIGxv
b3Agb25jZS4KKyAgICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlv
bkxvb3BPbmNlOworICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAgICAgICAgQ0ZO
dW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOworICAgICAg
ICAKKyAgICAgICAgLy8gQSBwcm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVy
LgorICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJ
bmZpbml0ZTsKKyAgICB9CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMg
PSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCks
IGtDR0ltYWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsKKyAgICBpZiAocG5nUHJvcGVydGllcykg
eworICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQp
OworICAgICAgICBpZiAoIW51bSkKKyAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9u
Y2U7CisgICAgICAgIAorICAgICAgICBpbnQgbG9vcENvdW50OworICAgICAgICBDRk51bWJlckdl
dFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7CisgICAgICAgIHJldHVy
biBsb29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9uTG9vcEluZmluaXRlOworICAgIH0K
KyAgICAKKyAgICAvLyBUdXJucyBvdXQgd2UncmUgbm90IGFuIGFuaW1hdGVkIGltYWdlIGFmdGVy
IGFsbCwgc28gd2UgZG9uJ3QgYW5pbWF0ZS4KKyAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Cit9
CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpnZXRIb3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25z
dAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENG
KENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBp
bWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGludCB4ID0gLTEsIHkgPSAtMTsKKyAgICBDRk51
bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGll
cy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RYIikpOworICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdl
dFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJngpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3Bl
cnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WSIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1i
ZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ5KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGhvdFNwb3QgPSBJbnRQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworSW50U2l6ZSBJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7CisgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNv
cHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9w
dGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKKyAgICAKKyAgICBpZiAoIXByb3BlcnRp
ZXMpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgaW50IHdpZHRoID0gMDsKKyAgICBp
bnQgaGVpZ2h0ID0gMDsKKyAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lk
dGgpOworICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmd2lkdGgpOworICAgIAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWln
aHQpOworICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKyAgICAKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKK30KKworYm9vbCBJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChmcmFtZUNvdW50KCkpOworICAgIHJldHVy
biBDR0ltYWdlU291cmNlR2V0U3RhdHVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4KSA9
PSBrQ0dJbWFnZVN0YXR1c0NvbXBsZXRlOworfQorCitJbWFnZU9yaWVudGF0aW9uIEltYWdlRGVj
b2Rlcjo6b3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNl
T3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4g
RGVmYXVsdEltYWdlT3JpZW50YXRpb247CisgICAgCisgICAgcmV0dXJuIG9yaWVudGF0aW9uRnJv
bVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSk7Cit9CisKK2Zsb2F0IEltYWdlRGVjb2Rlcjo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGZsb2F0IGR1
cmF0aW9uID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rl
ciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKHByb3BlcnRp
ZXMpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9u
YXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJv
cGVydHlHSUZEaWN0aW9uYXJ5KTsKKyAgICAgICAgaWYgKGdpZlByb3BlcnRpZXMpIHsKKyAgICAg
ICAgICAgIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZ2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRlVuY2xhbXBlZERlbGF5VGlt
ZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHVuY2xhbXBlZCBmcmFtZSBkZWxheSBp
ZiBpdCBleGlzdHMuCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51
bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ0ZOdW1i
ZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRp
ZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZEZWxheVRpbWUpKSB7CisgICAgICAgICAgICAgICAgLy8g
RmFsbCBiYWNrIHRvIHRoZSBjbGFtcGVkIGZyYW1lIGRlbGF5IGlmIHRoZSB1bmNsYW1wZWQgZnJh
bWUgZGVsYXkgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMg
PSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCks
IGtDR0ltYWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsKKyAgICAgICAgaWYgKHBuZ1Byb3BlcnRp
ZXMpIHsKKyAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQ
TkdVbmNsYW1wZWREZWxheVRpbWUpKQorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICBlbHNlIGlm
IChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5n
UHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUpKQorICAgICAg
ICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJh
dGlvbik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gTWFueSBhbm5veWluZyBhZHMg
c3BlY2lmeSBhIDAgZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBmbGFzaCBhcyBxdWlja2x5IGFz
IHBvc3NpYmxlLgorICAgIC8vIFdlIGZvbGxvdyBGaXJlZm94J3MgYmVoYXZpb3IgYW5kIHVzZSBh
IGR1cmF0aW9uIG9mIDEwMCBtcyBmb3IgYW55IGZyYW1lcyB0aGF0IHNwZWNpZnkKKyAgICAvLyBh
IGR1cmF0aW9uIG9mIDw9IDEwIG1zLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzc2ODkzMDA+IGFuZCA8
aHR0cDovL3dlYmtpdC5vcmcvYi8zNjA4Mj4KKyAgICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4K
KyAgICBpZiAoZHVyYXRpb24gPCAwLjAxMWYpCisgICAgICAgIHJldHVybiAwLjFmOworICAgIHJl
dHVybiBkdXJhdGlvbjsKK30KKworYm9vbCBJbWFnZURlY29kZXI6OmFsbG93U3Vic2FtcGxpbmdP
ZkZyYW1lQXRJbmRleChzaXplX3QpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJ
bmRleChtX25hdGl2ZURlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Cisg
ICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQ0ZE
aWN0aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5
SkZJRkRpY3Rpb25hcnkpKTsKKyAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZC
b29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9n
cmVzc2l2ZSkpOworICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7CisgICAgICAgICAgICBib29s
IGlzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOworICAgICAg
ICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyBy
ZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2
ZQorICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0
IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBp
bWFnZXMuIFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBs
YXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgorICAgICAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8v
cHJvYmxlbS81MTkxNDE4PikKKyAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbWFnZURl
Y29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBp
ZiAoIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICBDRlN0cmluZ1JlZiBpbWFnZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZSht
X25hdGl2ZURlY29kZXIpOworICAgIAorICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBu
byBpbWFnZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKKyAgICAvLyBK
UEVHIGRvZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgorICAgIGlmICghaW1hZ2VU
eXBlIHx8IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBGSVhNRTogQ291bGQgcmV0dXJuIGZhbHNlIGZv
ciBvdGhlciBub24tdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cy4KKyAgICAvLyBGSVhNRTogQ291
bGQgbWF5YmUgcmV0dXJuIGZhbHNlIGZvciBhIEdJRiBGcmFtZSBpZiB3ZSBoYXZlIGVub3VnaCBp
bmZvIGluIHRoZSBHSUYgcHJvcGVydGllcyBkaWN0aW9uYXJ5CisgICAgLy8gdG8gZGV0ZXJtaW5l
IHdoZXRoZXIgb3Igbm90IGEgdHJhbnNwYXJlbnQgY29sb3Igd2FzIGRlZmluZWQuCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgo
c2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7
CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBmcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1w
bGluZ0xldmVsKTsKKyAgICByZXR1cm4gZnJhbWVTaXplLndpZHRoKCkgKiBmcmFtZVNpemUuaGVp
Z2h0KCkgKiA0OworfQorCitQYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VEZWNvZGVyOjpjcmVhdGVG
cmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxp
bmdMZXZlbCwgRGVjb2RlTW9kZSBkZWNvZGVNb2RlKSBjb25zdAoreworICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRl
eChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdM
ZXZlbCwgZGVjb2RlTW9kZSkuZ2V0KCkpKTsKKyAgICAgICAgCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2VkIHRo
ZSBkZWZhdWx0IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNoaW5n
VHJhbnNpZW50CisgICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBm
b3IgdXMgc2luY2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBldmVy
eSB0aW1lIHdlIGNhbGxlZAorICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRlbGwg
Q0cgdG8gY2FjaGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzE0
MzY2NzU1PiAtCisgICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBrQ0dJ
bWFnZUNhY2hpbmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQuCisj
aWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisj
ZW5kaWYKKyAgICAgICAgQ0dJbWFnZVNldENhY2hpbmdGbGFncyhpbWFnZS5nZXQoKSwga0NHSW1h
Z2VDYWNoaW5nVGVtcG9yYXJ5KTsKKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyAgICAgICAg
CisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VVVEkgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2
ZURlY29kZXIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiB4Ym1VVEkgPSBDRlNUUigi
cHVibGljLnhiaXRtYXAtaW1hZ2UiKTsKKworICAgIGlmICghaW1hZ2VVVEkpCisgICAgICAgIHJl
dHVybiBpbWFnZTsKKworICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKKyAgICAg
ICAgcmV0dXJuIGltYWdlOworCisgICAgLy8gSWYgaXQgaXMgYW4geGJtIGltYWdlLCBtYXNrIG91
dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVtIHRyYW5zcGFyZW50LgorICAgIGNv
bnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUsIDI1NSwgIDI1NSwgMjU1LCAyNTUs
IDI1NX07CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1hc2tlZEltYWdlID0gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2UuZ2V0KCksIG1hc2tpbmdDb2xvcnMp
KTsKKyAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBtYXNrZWRJbWFnZSA6IGltYWdlOworfQorICAg
IAordm9pZCBJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBPbiBNYWMgdGhl
IE5TRGF0YSBpbnNpZGUgdGhlIFNoYXJlZEJ1ZmZlciBjYW4gYmUgc2VjcmV0bHkgYXBwZW5kZWQg
dG8gd2l0aG91dCB0aGUgU2hhcmVkQnVmZmVyJ3Mga25vd2xlZGdlLgorICAgIC8vIFdlIHVzZSBT
aGFyZWRCdWZmZXIncyBhYmlsaXR5IHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0
IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0IEltYWdlSU8gaXMKKyAgICAvLyByZWFsbHkgbG9v
a2luZyBhdCB0aGUgU2hhcmVkQnVmZmVyLgorICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1f
bmF0aXZlRGVjb2RlciwgZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFSZWNlaXZl
ZCk7CisjZWxzZQorICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhlIFNo
YXJlZEJ1ZmZlci4KKyAgICBkYXRhLT5yZWYoKTsKKyAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVz
QXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJl
Y2F1c2UgU2hhcmVkQnVmZmVyCisgICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2Nr
IGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwg
d2hpY2gKKyAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBvaW50
ZXIgY2FsbGJhY2suCisgICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJD
YWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgc2hh
cmVkQnVmZmVyUmVsZWFzZSB9OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBkYXRh
LT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVE
YXRhUHJvdmlkZXIobV9uYXRpdmVEZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFS
ZWNlaXZlZCk7CisjZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXIuaAppbmRleCA1
ODNmZmJiLi4xNTYxYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXIuaApAQCAtMSwxNCArMSw3NSBAQAotLy8KLS8vICBJbWFnZURl
Y29kZXIuaHBwCi0vLyAgV2ViQ29yZQotLy8KLS8vICBDcmVhdGVkIGJ5IFNhaWQgQWJvdS1IYWxs
YXdhIG9uIDMvMTMvMTYuCi0vLwotLy8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLwogCi0jaWZuZGVmIEltYWdlRGVjb2Rlcl9ocHAKLSNkZWZpbmUgSW1hZ2VEZWNv
ZGVyX2hwcAorI2lmbmRlZiBJbWFnZURlY29kZXJfaAorI2RlZmluZSBJbWFnZURlY29kZXJfaAog
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKIAotI2VuZGlmIC8qIEltYWdlRGVjb2Rlcl9ocHAgKi8KK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdlU291cmNlVHlwZShj
b25zdCBTdHJpbmcmIHR5cGUpOworCitlbnVtIGNsYXNzIERlY29kZU1vZGUgeyBJbW1lZGlhdGUs
IExhenkgfTsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29kZXIgewor
cHVibGljOgorICAgIEltYWdlRGVjb2RlcigpOworICAgIHZpcnR1YWwgfkltYWdlRGVjb2Rlcigp
IHsgfQorCisgICAgc3RhdGljIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRp
ZXMoKTsKKyAgICBzdGF0aWMgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2Nh
bGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwp
OworCisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1Np
emVBdmFpbGFibGUoKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBzaXpl
X3QgZnJhbWVDb3VudCgpIGNvbnN0OworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsK
KyAgICBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0OworCisgICAgSW50
U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7Cisg
ICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKworICAgIGZsb2F0
IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUhhc0Fs
cGhhQXRJbmRleChzaXplX3QpIGNvbnN0OworICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJh
bWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgo
c2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisKKyAgICBQYXNzTmF0aXZlSW1h
Z2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBE
ZWNvZGVNb2RlID0gRGVjb2RlTW9kZTo6TGF6eSkgY29uc3Q7CisKKyAgICB2b2lkIHNldERhdGEo
U2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIAorcHJvdGVjdGVkOgor
ICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7CisgICAgQ0dJbWFnZVNvdXJjZVJlZiBtX25hdGl2
ZURlY29kZXI7Cit9OworICAgIAorfQorCisjZW5kaWYgLy8gSW1hZ2VEZWNvZGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5j
cHAKaW5kZXggMGQ4ZTJhNC4uZGNmNzlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCiAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEku
aCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9u
LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00NCw0
NCArNDUsOSBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCi0jaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZh
dGUuaD4KLSNlbHNlCi1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZh
Y3RvciA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciIpOwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQ
cm9wZXJ0eUFQTkdVbmNsYW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1l
Iik7Ci1jb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGlt
ZSA9IENGU1RSKCJEZWxheVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdl
UHJvcGVydHlBUE5HTG9vcENvdW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOwotCi1jb25zdCBDRlN0
cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyID0gQ0ZTVFIoImtDR0ltYWdl
U291cmNlU2hvdWxkUHJlZmVyUkdCMzIiKTsKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291
cmNlU2tpcE1ldGFkYXRhID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIik7Ci0K
LSNpZiAhUExBVEZPUk0oQ09DT0EpCi1zaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0
aW9uKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3Vu
dCkKLXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJl
ZEJ1ZmZlcio+KGluZm8pOwotICAgIHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5z
aXplKCk7Ci0gICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgY29uc3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3Np
dGlvbjsKLSAgICBzaXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNl
U2l6ZSAtIHBvc2l0aW9uKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7Ci0g
ICAgcmV0dXJuIGFtb3VudDsKLX0KLQotdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGlu
Zm8pCi17Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFy
ZWRCdWZmZXIqPihpbmZvKTsKLSAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci19Ci0jZW5kaWYK
LQogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1h
Z2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIDogbV9kZWNvZGVyKDAp
CiB7CiAgICAgLy8gRklYTUU6IEFscGhhT3B0aW9uIGFuZCBHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBhcmUgaWdub3JlZC4KIH0KQEAgLTEwMCwzNTEgKzY2LDEyOSBAQCB2b2lkIEltYWdlU291
cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGxGcmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2RlY29kZXIpIHsKLSAgICAg
ICAgQ0ZSZWxlYXNlKG1fZGVjb2Rlcik7CisgICAgICAgIGRlbGV0ZSBtX2RlY29kZXI7CiAgICAg
ICAgIG1fZGVjb2RlciA9IDA7CiAgICAgfQorICAgIAogICAgIGlmIChkYXRhKQogICAgICAgICBz
ZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBz
dWJzYW1wbGluZ0xldmVsKQorICAgIAordm9pZCBJbWFnZVNvdXJjZTo6ZW5zdXJlRGVjb2Rlcklz
Q3JlYXRlZChTaGFyZWRCdWZmZXIqIGRhdGEpCiB7Ci0gICAgaWYgKCFzdWJzYW1wbGluZ0xldmVs
KSB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOwotICAgICAgICBjb25z
dCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlLCBr
Q0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0
YSB9OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7IGtDRkJvb2xl
YW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUgfTsKLSAgICAgICAgcmV0dXJu
IENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpOwotICAgIH0KLQotICAgIHNob3J0IGNvbnN0cmFpbmVkU3Vic2FtcGxpbmdMZXZlbCA9
IHN0ZDo6bWluPHNob3J0PigzLCBzdGQ6Om1heDxzaG9ydD4oMCwgc3Vic2FtcGxpbmdMZXZlbCkp
OwotICAgIGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IGNvbnN0cmFpbmVkU3Vic2FtcGxpbmdMZXZl
bDsgLy8gWzAuLjNdID0+IFsxLCAyLCA0LCA4XQotCi0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVm
PiBzdWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZO
dW1iZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOwotICAgIGNvbnN0IENGSW5kZXggbnVtT3B0
aW9ucyA9IDQ7Ci0gICAgY29uc3Qgdm9pZCoga2V5c1tudW1PcHRpb25zXSA9IHsga0NHSW1hZ2VT
b3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiwga0NHSW1h
Z2VTb3VyY2VTa2lwTWV0YWRhdGEsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yIH07Ci0g
ICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NG
Qm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBzdWJzYW1wbGVOdW1iZXIuZ2V0KCkgfTsKLSAg
ICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUobnVsbHB0ciwga2V5cywgdmFsdWVz
LCBudW1PcHRpb25zLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIAor
ICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2RlY29kZXIg
PSBuZXcgSW1hZ2VEZWNvZGVyKCk7CiB9Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
ID0gMCkKKyAgICAKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBpZiAoc3Vic2FtcGxpbmdMZXZlbCkKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKTsK
LQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4g
b3B0aW9ucyA9IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucygwKTsKLSAgICByZXR1cm4gb3B0aW9u
czsKLX0KKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKIAotYm9vbCBJbWFnZVNvdXJj
ZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlY29kZXI7Ci19CisgICAg
ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChkYXRhKTsKKyAgICBpZiAoIW1fZGVjb2RlcikgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotdm9p
ZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghbV9kZWNvZGVyKQotICAg
ICAgICBtX2RlY29kZXIgPSBDR0ltYWdlU291cmNlQ3JlYXRlSW5jcmVtZW50YWwoMCk7Ci0gICAg
Ly8gT24gTWFjIHRoZSBOU0RhdGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3Jl
dGx5IGFwcGVuZGVkIHRvIHdpdGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4gIFdl
IHVzZSBTaGFyZWRCdWZmZXIncyBhYmlsaXR5Ci0gICAgLy8gdG8gd3JhcCBpdHNlbGYgaW5zaWRl
IENGRGF0YSB0byBnZXQgYXJvdW5kIHRoaXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcyByZWFs
bHkgbG9va2luZyBhdCB0aGUgU2hhcmVkQnVmZmVyLgotICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVE
YXRhKG1fZGVjb2RlciwgZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFSZWNlaXZl
ZCk7Ci0jZWxzZQotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBtX2RlY29kZXIgPSBDR0lt
YWdlU291cmNlQ3JlYXRlSW5jcmVtZW50YWwoMCk7Ci0gICAgLy8gQ3JlYXRlIGEgQ0dEYXRhUHJv
dmlkZXIgdG8gd3JhcCB0aGUgU2hhcmVkQnVmZmVyLgotICAgIGRhdGEtPnJlZigpOwotICAgIC8v
IFdlIHVzZSB0aGUgR2V0Qnl0ZXNBdFBvc2l0aW9uIGNhbGxiYWNrIHJhdGhlciB0aGFuIHRoZSBH
ZXRCeXRlUG9pbnRlciBvbmUgYmVjYXVzZSBTaGFyZWRCdWZmZXIKLSAgICAvLyBkb2VzIG5vdCBw
cm92aWRlIGEgd2F5IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2ludGVyIGFuZCBndWFyYW50ZWUg
dGhhdCBpdCB3b24ndCBtb3ZlLCB3aGljaAotICAgIC8vIGlzIGEgcmVxdWlyZW1lbnQgZm9yIHVz
aW5nIHRoZSBHZXRCeXRlUG9pbnRlciBjYWxsYmFjay4KLSAgICBDR0RhdGFQcm92aWRlckRpcmVj
dENhbGxiYWNrcyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwgMCwgc2hhcmVkQnVmZmVyR2V0
Qnl0ZXNBdFBvc2l0aW9uLCBzaGFyZWRCdWZmZXJSZWxlYXNlIH07Ci0gICAgUmV0YWluUHRyPENH
RGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3Jl
YXRlRGlyZWN0KGRhdGEsIGRhdGEtPnNpemUoKSwgJnByb3ZpZGVyQ2FsbGJhY2tzKSk7Ci0gICAg
Q0dJbWFnZVNvdXJjZVVwZGF0ZURhdGFQcm92aWRlcihtX2RlY29kZXIsIGRhdGFQcm92aWRlci5n
ZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbmRpZgorICAgIG1fZGVjb2Rlci0+c2V0RGF0YShk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCiBTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1l
RXh0ZW5zaW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIENGU3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3Vy
Y2VHZXRUeXBlKG1fZGVjb2Rlcik7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVu
c2lvbkZvckltYWdlU291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOworICAgIHJldHVybiBpbml0
aWFsaXplZCgpID8gbV9kZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogU3RyaW5nKCk7CiB9
CiAKLVN1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2Fs
ZShmbG9hdCBzY2FsZSkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVt
U3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICAvLyBUaGVyZSBhcmUgZm91ciBzdWJzYW1w
bGluZyBsZXZlbHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1eC4KLSAg
ICBmbG9hdCBjbGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6bWluPGZs
b2F0PigxLCBzY2FsZSkpOwotICAgIGludCByZXN1bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBl
ZFNjYWxlKSk7Ci0gICAgQVNTRVJUKHJlc3VsdCA+PTAgJiYgcmVzdWx0IDw9IDMpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdMZXZlbEZv
clNjYWxlKHNjYWxlLCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7CiB9CisgICAgCiAKLWJvb2wg
SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCitzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVz
RGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CiB7Ci0gICAgLy8gUmFnbmFyb3Mg
eWVsbHM6IFRPTyBTT09OISBZb3UgaGF2ZSBhd2FrZW5lZCBtZSBUT08gU09PTiwgRXhlY3V0dXMh
Ci0gICAgaWYgKENHSW1hZ2VTb3VyY2VHZXRTdGF0dXMobV9kZWNvZGVyKSA8IGtDR0ltYWdlU3Rh
dHVzSW5jb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNv
cHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdl
dCgpKSk7Ci0gICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5n
ZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCi0gICAgICAgICYmIENGRGljdGlvbmFy
eUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhl
bEhlaWdodCk7CisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1p
bmVQcm9wZXJ0aWVzKCk7CiB9Ci0KLXN0YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
RnJvbVByb3BlcnRpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllcykKKyAgICAKK2Jv
b2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgQVNTRVJUKGltYWdlUHJv
cGVydGllcyk7Ci0gICAgQ0ZOdW1iZXJSZWYgb3JpZW50YXRpb25Qcm9wZXJ0eSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShpbWFnZVByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVy
dHlPcmllbnRhdGlvbik7Ci0gICAgaWYgKCFvcmllbnRhdGlvblByb3BlcnR5KQotICAgICAgICBy
ZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0KLSAgICBpbnQgZXhpZlZhbHVlOwotICAg
IENGTnVtYmVyR2V0VmFsdWUob3JpZW50YXRpb25Qcm9wZXJ0eSwga0NGTnVtYmVySW50VHlwZSwg
JmV4aWZWYWx1ZSk7Ci0gICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246OmZyb21FWElGVmFsdWUo
ZXhpZlZhbHVlKTsKKyAgICByZXR1cm4gbV9kZWNvZGVyICYmIG1fZGVjb2Rlci0+aXNTaXplQXZh
aWxhYmxlKCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1l
QXRJbmRleChzaXplX3QpIGNvbnN0Citib29sIEltYWdlU291cmNlOjphbGxvd1N1YnNhbXBsaW5n
T2ZGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogewotICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVy
dGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwot
ICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0ZEaWN0
aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJ
RkRpY3Rpb25hcnkpKTsKLSAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKLSAgICAgICAgQ0ZCb29s
ZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVz
c2l2ZSkpOwotICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7Ci0gICAgICAgICAgICBib29sIGlz
UHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOwotICAgICAgICAg
ICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5k
ZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQot
ICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5v
dy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFn
ZXMuIFRoaXMKLSAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJn
ZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgotICAgICAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJv
YmxlbS81MTkxNDE4PikKLSAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBpbml0aWFsaXplZCgp
ICYmIG1fZGVjb2Rlci0+YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KGluZGV4KTsKIH0K
IAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0
aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJ
bmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgUmVz
cGVjdEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBj
b25zdAogewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9w
dENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwg
aW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSAgICBpZiAo
IXByb3BlcnRpZXMpCisgICAgaWYgKCFpbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gSW50
U2l6ZSgpOwogCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBD
Rk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVy
dGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOwotICAgIGlmIChudW0pCi0g
ICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwot
ICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwotICAgIGlmIChudW0pCi0gICAgICAg
IENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKLQotICAg
IGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdl
dCgpKS51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZShoZWlnaHQs
IHdpZHRoKTsKKyAgICBJbnRTaXplIHNpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgo
aW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24gPSBtX2RlY29kZXItPm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7CiAKLSAgICByZXR1cm4g
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gc2hvdWxkUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gJiYgb3JpZW50YXRpb24udXNlc1dp
ZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUoKSA6IHNpemU7CiB9CiAKIEltYWdl
T3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0CiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFk
b3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4
LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAg
ICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwotCi0gICAgcmV0dXJuIG9yaWVu
dGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIGluaXRp
YWxpemVkKCkgPyBtX2RlY29kZXItPm9yaWVudGF0aW9uQXRJbmRleChpbmRleCkgOiBEZWZhdWx0
SW1hZ2VPcmllbnRhdGlvbjsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEltYWdlU291
cmNlOjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBk
ZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7CiB9CiAKLWJv
b2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CitJbnRT
aXplIEltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdl
U291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRp
b25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGludCB4ID0gLTEsIHkgPSAtMTsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhv
dHNwb3RYIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVt
YmVySW50VHlwZSwgJngpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBudW0gPSAoQ0ZO
dW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhv
dHNwb3RZIikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVt
YmVySW50VHlwZSwgJnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoeCA8IDAg
fHwgeSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGhvdFNwb3QgPSBJbnRQb2lu
dCh4LCB5KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgw
LCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZVNvdXJjZTo6
Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKK2Jvb2wgSW1hZ2VTb3Vy
Y2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiB7Ci0gICAgLy8gTWVhc3Vy
ZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9jIGNhbGxzIG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82
NC4KLSAgICAvLyBBIG5vbi16ZXJvIHZhbHVlIGVuc3VyZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5v
IGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVyCi0gICAgLy8gdGhlIGxpdmUgZGVjb2RlZCByZXNv
dXJjZXMgbGlzdCB3aGVuIHRoZSBDR0ltYWdlU291cmNlIGRlY29kZXMgaW1hZ2UKLSAgICAvLyBw
cm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUgY2FjaGUgdG8gcHJ1bmUgdGhlIHBhcnRpYWxseSBkZWNv
ZGVkIGltYWdlLgotICAgIC8vIFRoaXMgdmFsdWUgaXMgbGlrZWx5IHRvIGJlIGluYWNjdXJhdGUg
b24gb3RoZXIgcGxhdGZvcm1zLCBidXQgdGhlIG92ZXJhbGwKLSAgICAvLyBiZWhhdmlvciBpcyB1
bmNoYW5nZWQuCi0gICAgcmV0dXJuIDEzMDg4OworICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9k
ZWNvZGVyLT5nZXRIb3RTcG90KGhvdFNwb3QpOwogfQotICAgIAorCiBpbnQgSW1hZ2VTb3VyY2U6
OnJlcGV0aXRpb25Db3VudCgpCiB7Ci0gICAgaWYgKCFpbml0aWFsaXplZCgpKQotICAgICAgICBy
ZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1fZGVj
b2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMp
Ci0gICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICBDRkRpY3Rpb25hcnlS
ZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOwotICAgIGlm
IChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lG
TG9vcENvdW50KTsKLQotICAgICAgICAvLyBObyBwcm9wZXJ0eSBtZWFucyBsb29wIG9uY2UuCi0g
ICAgICAgIGlmICghbnVtKQotICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsK
LQotICAgICAgICBpbnQgbG9vcENvdW50OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwg
a0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0KLSAgICAgICAgLy8gQSBwcm9wZXJ0eSB3
aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVyLgotICAgICAgICByZXR1cm4gbG9vcENvdW50
ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKLSAgICB9Ci0KLSAgICBDRkRp
Y3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25hcnkp
OwotICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChD
Rk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJ
bWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCk7Ci0gICAgICAgIGlmICghbnVtKQotICAgICAgICAg
ICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQotICAgICAgICBpbnQgbG9vcENvdW50Owot
ICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3Vu
dCk7Ci0gICAgICAgIHJldHVybiBsb29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9uTG9v
cEluZmluaXRlOwotICAgIH0KLQotICAgIC8vIFR1cm5zIG91dCB3ZSdyZSBub3QgYW4gYW5pbWF0
ZWQgaW1hZ2UgYWZ0ZXIgYWxsLCBzbyB3ZSBkb24ndCBhbmltYXRlLgotICAgIHJldHVybiBjQW5p
bWF0aW9uTm9uZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRp
dGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTG9vcE9uY2U7CiB9CiAKIHNpemVfdCBJbWFnZVNvdXJj
ZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGVjb2RlciA/IENHSW1hZ2VT
b3VyY2VHZXRDb3VudChtX2RlY29kZXIpIDogMDsKKyAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9k
ZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQogCiBQYXNzTmF0aXZlSW1hZ2VQdHIgSW1hZ2VT
b3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsKQogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwg
aW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNz
IGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJ
bWFnZUNhY2hpbmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVj
cmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBX
ZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjov
L3Byb2JsZW0vMTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVw
cmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUg
ZGVmYXVsdC4KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSNlbmRpZgotICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCks
IGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCi0K
LSAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rl
cik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMu
eGJpdG1hcC1pbWFnZSIpOwotCi0gICAgaWYgKCFpbWFnZVVUSSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlOwotCi0gICAgaWYgKCFDRkVxdWFsKGltYWdlVVRJLCB4Ym1VVEkpKQotICAgICAgICByZXR1
cm4gaW1hZ2U7Ci0gICAgCi0gICAgLy8gSWYgaXQgaXMgYW4geGJtIGltYWdlLCBtYXNrIG91dCBh
bGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVtIHRyYW5zcGFyZW50LgotICAgIGNvbnN0
IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUsIDI1NSwgIDI1NSwgMjU1LCAyNTUsIDI1
NX07Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1hc2tlZEltYWdlID0gYWRvcHRDRihDR0lt
YWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2UuZ2V0KCksIG1hc2tpbmdDb2xvcnMpKTsK
LSAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBtYXNrZWRJbWFnZSA6IGltYWdlOworICAgIHJldHVy
biBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOwogfQogCiBib29sIEltYWdlU291cmNlOjpm
cmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoZnJhbWVD
b3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9kZWNv
ZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOwogfQog
CiBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9h
dCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGll
cyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIs
IGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmIChwcm9wZXJ0aWVz
KSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFy
eVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3Bl
cnR5R0lGRGljdGlvbmFyeSk7Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAg
ICAgICBpZiAoQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKGdpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYg
aXQgZXhpc3RzLgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1i
ZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVz
LCBrQ0dJbWFnZVByb3BlcnR5R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAgICAgICAgIC8vIEZh
bGwgYmFjayB0byB0aGUgY2xhbXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1l
IGRlbGF5IGRvZXMgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rp
b25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQ
cm9wZXJ0eVBOR0RpY3Rpb25hcnkpOwotICAgICAgICBpZiAocG5nUHJvcGVydGllcykgewotICAg
ICAgICAgICAgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBl
ZERlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51
bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVz
LCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAg
Q0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1
cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KLSAg
ICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAx
MDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBkdXJhdGlvbiBvZiA8
PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMzYwODI+Ci0gICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgaWYgKGR1cmF0
aW9uIDwgMC4wMTFmKQotICAgICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1cm4gZHVyYXRpb247
CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1lRHVyYXRpb25BdElu
ZGV4KGluZGV4KSA6IDA7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBGSVhNRTogd2h5IGRvZXNuJ3QgdGhpcyByZXR1cm4gdHJ1ZT8KLQotICAgIGlm
ICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNv
ZGVyKTsKLQotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFnZSB0eXBlIG9y
IHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKLSAgICAvLyBKUEVHIGRvZXMgbm90IHN1
cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIGlmICghaW1hZ2VUeXBlIHx8IENGRXF1YWwo
aW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIG5vbi10cmFuc3Bh
cmVudCBpbWFnZSBmb3JtYXRzLgotICAgIC8vIEZJWE1FOiBDb3VsZCBtYXliZSByZXR1cm4gZmFs
c2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5vdWdoIGluZm8gaW4gdGhlIEdJRiBwcm9w
ZXJ0aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSB0
cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4
KTsKIH0KIAogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAogewotICAgIElu
dFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSk7
Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhlaWdodCgpICogNDsK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgo
aW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogMDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KaW5kZXggYmJhZTkxZi4uOTFjOTJlOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQpAQCAtOTEsNyArOTEs
NyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBp
bWFnZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaQogICAgIGlmIChpczxCaXRtYXBJbWFnZT4oKmlt
YWdlKSkgewogICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwogICAgICAgICBC
aXRtYXBJbWFnZSYgYml0bWFwSW1hZ2UgPSBkb3duY2FzdDxCaXRtYXBJbWFnZT4oKmltYWdlKTsK
LSAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uu
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihkZXNjcmlwdGlvbik7CisgICAgICAgIEludFNpemUg
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLnNpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb24oKTsKIAogICAgICAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50
YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAgICAgICAgIG9yaWVudGF0
aW9uID0gYml0bWFwSW1hZ2Uub3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274969</attachid>
            <date>2016-03-25 20:38:28 -0700</date>
            <delta_ts>2016-03-25 21:03:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160325203830.patch</filename>
            <type>text/plain</type>
            <size>57048</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiYjdjMTYwZDYxYjgx
MDk3OWNkZTU4OWVkMGNlODY2M2RiNDQ3ZC4uMjY4ZmM4MGU0NmRkMDI4NmFiY2UxZGQyYTE3NmM0
ZTVmYzgyY2U1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxNi0wMy0yNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIGltYWdlIENHIGRlY29kaW5nIGNvZGUgZnJvbSBvdXQgdG8gYSBuZXcgY2xh
c3MgbmFtZWQgSW1hZ2VEZWNvZGVyLgorICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHNwbGl0
IGlzIHRvIGhhdmUgdGhlIENHIEltYWdlU291cmNlIHNpbWlsYXIgdG8gdGhlIG5vbmUKKyAgICAg
ICAgQ0cgSW1hZ2VTb3VyY2Ugd2hlcmUgdGhlcmUgaXMgYSBzZXBhcmF0ZSBjbGFzcyBmb3IgZGVj
b2RpbmcgYW5kIGl0IGlzIG5hbWVkCisgICAgICAgIEltYWdlRGVjb2RlciBhbHNvLgorIAorICAg
ICAgICBUaGUgcGxhbiBpcyBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgLS0gTW92ZSB0
aGUgbmV3IGNsYXNzIHRvIGEgc2VwYXJhdGUgZmlsZXMKKyAgICAgICAgICAgIC0tIE1lcmdlIHRo
ZSBJbWFnZVNvdXJjZS5jcHAgYW5kIEltYWdlU291cmNlQ0cuY3BwLiBpbiBvbmUgZmlsZQorICAg
ICAgICAgICAgLS0gTW92ZSBjYWNoaW5nIHRoZSBGcmFtZURhdGEgZnJvbSBCaXRtYXBJbWFnZSB0
byBJbWFnZVNvdXJjZS4KKyAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkdW1wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oOgorICAgICAgICBBbiBpbWFnZSBjYW4gaGF2ZSB0d28gc2l6ZXM6IHNpemUoKSBhbmQg
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpLiBUaGUKKyAgICAgICAgc2l6ZVJlc3BlY3RpbmdP
cmllbnRhdGlvbigpIGlzIHRoZSB0cmFuc3Bvc2Ugb2Ygc2l6ZSgpIGlmZiB0aGUgaW1hZ2UKKyAg
ICAgICAgb3JpZW50YXRpb24gaGFzIHVzZXNXaWR0aEFzSGVpZ2h0KCkgZXF1YWxzIHRvIHRydWUu
IFNvIHRoZXJlIGlzIG5vIG5lZWQKKyAgICAgICAgZm9yIHRoZSBJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24gYXJndW1lbnQuIEFsc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IKKyAgICAgICAgdGhl
IG1lbWJlcnMgbV9pbWFnZU9yaWVudGF0aW9uIG9yIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50
YXRpb24uIEFsc28KKyAgICAgICAgbW92ZSBtX2FsbG93U3Vic2FtcGxpbmcgYW5kIG1fbWluaW11
bVN1YnNhbXBsaW5nTGV2ZWwgKHdoaWNoIHNob3VsZCBiZQorICAgICAgICBtX21heGltdW1TdWJz
YW1wbGluZ0xldmVsKSB0byBJbWFnZVNvdXJjZUNHIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFy
KToKKyAgICAgICAgbV9kZWNvZGVyIGlzIG5vdyBhIHVuaXF1ZV9wdHIuIFRvIHJlbGVhc2UgaXQs
IGFzc2lnbiBpdCB0byBudWxscHRyLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCk6IEVuc3VyZSBtX2RlY29kZXIgaXMgY3JlYXRlZC4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6IENhbGwgZW5z
dXJlRGVjb2RlcklzQ3JlYXRlZCgpIGJlZm9yZQorICAgICAgICBhY3R1YWxseSBzZXR0aW5nIHRo
ZSBkYXRhLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppc1NpemVB
dmFpbGFibGUpOiBVc2UgaW5pdGlhbGl6ZWQoKTsKKyAgICAgICAgCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNp
emUgb2YgdGhlIGltYWdlLgorICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6Omdl
dEhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIENoZWNrIGZvciBp
bml0aWFsaXplZCgpIGluc3RlYWQgb2YgY2hlY2tpbmcgbV9kZWNvZGVyLgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6CisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2FzIG1v
dmVkIHRvIHRoZSBoZWFkZXIgZmlsZS4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OnNldEFsbG93U3Vic2FtcGxpbmcpOiBNb3ZlZCBmcm9tIEJpdG1hcEltYWdlLgorICAgICAgICAK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwpOiBE
ZWxldGVkLgorICAgICAgICBEZWxldGUgaW5pdGlhbGl6aW5nIG1fbWluaW11bVN1YnNhbXBsaW5n
TGV2ZWwgYW5kIGRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKCkKKyAgICAgICAgc2lu
Y2UgdGhleSBhcmUgbW92ZWQgdG8gSW1hZ2VTb3VyY2UuCisgICAgICAgIAorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgIERl
bGV0ZSBtZW1iZXJzIGFuZCBtZXRob2RzIHdoaWNoIGFyZSBub3cgb3duZWQgYW5kIGNhbGN1bGF0
ZWQgYnkgSW1hZ2VTb3VyY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpj
cmVhdGUpOiBSZXR1cm5zIGEgQ0cgSW1hZ2VEZWNvZGVyIG9iamVjdC4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6IENyZWF0ZXMgYSBuYXRp
dmUgQ0cgaW1hZ2UgZGVjb2Rlci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6On5JbWFnZURlY29kZXIpOiBSZWxlYXNlcyB0aGUgbmF0aXZlIENHIGltYWdlIGRlY29k
ZXIuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdWJzYW1wbGlu
Z0xldmVsRm9yU2NhbGUpOiBNb3ZlZCBmcm9tIEltYWdlU291cmNlLgorICAgICAgICBBIG5ldyBh
cmd1bWVudCBuYW1lZCAnbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwnIGlzIGFkZGVkIHRvIGZpbHRl
ciB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmhvdFNwb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6ICBNb3ZlZCBmcm9tIEltYWdlU291cmNlLgorICAgICAg
ICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZW5z
dXJlRGVjb2RlcklzQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNhbGN1bGF0ZU1heGltdW1TdWJzYW1w
bGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjptYXhpbXVtU3Vic2Ft
cGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppc1NpemVBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdP
ZkZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXpl
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6b3JpZW50YXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpnZXRIb3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICBEZWxldGVkIHRoZSBjYWxscyB0byBtX2RlY29k
ZXIuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVk
KTogRGVsZXRlZC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAg
ICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gb2YgdGhlIG5vbiBDRyBJbWFnZURlY29kZXI6OmNyZWF0
ZSgpIHRvIG1hdGNoIGl0cyBDRworICAgICAgICBjb3VudGVycGFydC4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6IERlbGV0ZSB1bm5lZWRlZCBhcmd1bWVudC4KKwogMjAx
Ni0wMy0yNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2luXSBJbXByb3ZlIENNYWtlIGJ1aWxkIHBlcmZvcm1hbmNlIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IDRhNWM2MWE1ZDI3YmE4
NTU0M2MwMDY0NWRmOGVhMjAzMzUwYTllMWMuLmE3Y2YyOGE1MDUzZDFlMjAxNTYyZWQ4ZGNiY2Ix
ZTRlZmI4ZDJkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAKQEAgLTQ3LDkgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBC
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJ
bWFnZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoMCkKLSAgICAs
IG1faW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BMZWZ0KQotICAgICwgbV9zaG91bGRSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBt
X3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50
U3RhdHVzKFVua25vd24pCkBAIC02Miw5ICs1OSw2IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9z
ZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGluZyByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCiAgICAgLCBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGlt
ZSgwKQogICAgICwgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50KDApCi0gICAgLCBtX2FsbG93
U3Vic2FtcGxpbmcodHJ1ZSkKLSNlbHNlCi0gICAgLCBtX2FsbG93U3Vic2FtcGxpbmcoZmFsc2Up
CiAjZW5kaWYKICAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9jaGVja2VkRm9y
U29saWRDb2xvcihmYWxzZSkKQEAgLTIzNiwyMCArMjMwLDE1IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRl
Y29kZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFn
ZTo6dXBkYXRlU2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNv
bnN0Cit2b2lkIEJpdG1hcEltYWdlOjp1cGRhdGVTaXplKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
c2l6ZUF2YWlsYWJsZSB8fCBtX2hhdmVTaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Np
emUgPSBtX3NvdXJjZS5zaXplKGRlc2NyaXB0aW9uKTsKLSAgICBtX3NpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKSk7Ci0K
LSAgICBtX2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3JpcHRp
b24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKCkpOworICAgIG1fc2l6ZSA9IG1fc291cmNlLnNpemUoKTsKKyAgICBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7
CiAKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsKLQotICAgIGRldGVybWluZU1pbmltdW1TdWJzYW1w
bGluZ0xldmVsKCk7CiAgICAgZGlkRGVjb2RlUHJvcGVydGllcygpOwogfQogCkBAIC0yNTksOSAr
MjQ4LDkgQEAgRmxvYXRTaXplIEJpdG1hcEltYWdlOjpzaXplKCkgY29uc3QKICAgICByZXR1cm4g
bV9zaXplOwogfQogCi1JbnRTaXplIEJpdG1hcEltYWdlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0
aW9uKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKK0ludFNp
emUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAogewotICAg
IHVwZGF0ZVNpemUoZGVzY3JpcHRpb24pOworICAgIHVwZGF0ZVNpemUoKTsKICAgICByZXR1cm4g
bV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwogfQogCkBAIC0zOTEsNyArMzgwLDcgQEAgTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwg
ZmxvYXQgcHJlc2VudGF0aW9uU2MKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbCA9IHN0ZDo6bWluKG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShwcmVzZW50
YXRpb25TY2FsZUhpbnQpLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKTsKKyAgICBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9y
U2NhbGUocHJlc2VudGF0aW9uU2NhbGVIaW50KTsKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hl
ZCBhIGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ug
d2UgbmVlZCB0bwogICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCkBAIC03MTAs
MTMgKzY5OSw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0
CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3VycmVudC1mcmFtZSIsIG1fY3VycmVudEZyYW1l
KTsKICAgICB9CiAgICAgCi0gICAgaWYgKGFsbG93U3Vic2FtcGxpbmcoKSkKLSAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbGxvdy1zdWJzYW1wbGluZyIsIGFsbG93U3Vic2FtcGxpbmcoKSk7CiAg
ICAgaWYgKG1faXNTb2xpZENvbG9yKQogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNvbGlkLWNv
bG9yIiwgbV9pc1NvbGlkQ29sb3IpOwotICAgIAotICAgIGlmIChtX2ltYWdlT3JpZW50YXRpb24g
IT0gT3JpZ2luVG9wTGVmdCkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcmllbnRhdGlvbiIs
IG1faW1hZ2VPcmllbnRhdGlvbik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDAwZmJhMzNiYTQxOWMxMjQxNTQxNjUzMzAx
ZTI5NWNlZjg2ZDE3NzkuLjUxMTNkNWQ1Mjc3ODE1NGVhZmNmOWEzNDI3YjUyZWIxNWNmZTk2OWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApA
QCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZsb2F0U2l6ZSBkdWUgdG8gb3Zl
cnJpZGUuCiAgICAgRmxvYXRTaXplIHNpemUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRTaXpl
IHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0g
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OworICAgIEludFNpemUgc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRIb3RTcG90KEludFBv
aW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTE3OSwxNiArMTc5LDE0IEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIGNhbkFuaW1hdGUoKTsKIAotICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdWJzYW1wbGluZzsgfQotICAgIHZvaWQgc2V0QWxsb3dT
dWJzYW1wbGluZyhib29sIGFsbG93U3Vic2FtcGxpbmcpIHsgbV9hbGxvd1N1YnNhbXBsaW5nID0g
YWxsb3dTdWJzYW1wbGluZzsgfQorICAgIHZvaWQgc2V0QWxsb3dTdWJzYW1wbGluZyhib29sIGFs
bG93U3Vic2FtcGxpbmcpIHsgbV9zb3VyY2Uuc2V0QWxsb3dTdWJzYW1wbGluZyhhbGxvd1N1YnNh
bXBsaW5nKTsgfQogCiAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudEZyYW1lOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGJvb2wgaXNCaXRtYXBJbWFnZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgdXBkYXRlU2l6ZShJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24o
KSkgY29uc3Q7Ci0gICAgdm9pZCBkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNv
bnN0OworICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZW51
bSBSZXBldGl0aW9uQ291bnRTdGF0dXMgewpAQCAtMjk1LDExICsyOTMsNiBAQCBwcml2YXRlOgog
ICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXplIHRvIHVzZSBmb3IgdGhlIG92
ZXJhbGwgaW1hZ2UgKHdpbGwganVzdCBiZSB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgaW1hZ2UpLgog
ICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKLSAgICBt
dXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbDsKLQotICAg
IG11dGFibGUgdW5zaWduZWQgbV9pbWFnZU9yaWVudGF0aW9uIDogNDsgLy8gSW1hZ2VPcmllbnRh
dGlvbkVudW0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50
YXRpb24gOiAxOyAvLyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0KLQogICAgIHNpemVfdCBt
X2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1h
dGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2Yg
dGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVz
IHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIApAQCAtMzI3LDggKzMyMCw2IEBAIHByaXZhdGU6
CiAgICAgZG91YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lOwogICAgIHVpbnQxNl90IG1f
cHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudDsKICNlbmRpZgotCi0gICAgYm9vbCBtX2FsbG93U3Vi
c2FtcGxpbmcgOiAxOyAvLyBXaGV0aGVyIHdlIHNob3VsZCBhdHRlbXB0IHN1YnNhbXBsaW5nIGlm
IHRoaXMgaW1hZ2UgaXMgdmVyeSBsYXJnZS4KICAgICBib29sIG1faXNTb2xpZENvbG9yIDogMTsg
Ly8gV2hldGhlciBvciBub3Qgd2UgYXJlIGEgMXgxIHNvbGlkIGltYWdlLgogICAgIGJvb2wgbV9j
aGVja2VkRm9yU29saWRDb2xvciA6IDE7IC8vIFdoZXRoZXIgd2UndmUgY2hlY2tlZCB0aGUgZnJh
bWUgZm9yIHNvbGlkIGNvbG9yLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggYWUzMWM5ODM1MjFkNTAwODIyNWMxZmMzNDI5YzJj
NDBhMDM3ZTQ4OC4uNWQ1N2Q0OWM2ZjUxZjJlZDIwZjJkN2M2YWUwYzE1NTEyMTdhZTVlMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApA
QCAtNDMsOCArNDMsNyBAQCB1bnNpZ25lZCBJbWFnZVNvdXJjZTo6c19tYXhQaXhlbHNQZXJEZWNv
ZGVkSW1hZ2UgPSAxMDI0ICogMTAyNDsKICNlbmRpZgogCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3Vy
Y2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0gICAg
OiBtX2RlY29kZXIoMCkKLSAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgOiBt
X2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKIH0KQEAgLTYyLDI5ICs2MSwzOSBA
QCB2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJl
Zm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBk
ZWxldGUgbV9kZWNvZGVyOwotICAgIG1fZGVjb2RlciA9IDA7CisgICAgaWYgKG1fZGVjb2RlcikK
KyAgICAgICAgbV9kZWNvZGVyID0gbnVsbHB0cjsKKwogICAgIGlmIChkYXRhKQogICAgICAgICBz
ZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6Omlu
aXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyOwotfQotCi12b2lkIElt
YWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpCit2b2lkIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKFNoYXJlZEJ1ZmZl
ciogZGF0YSkKIHsKKyAgICBpZiAoaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAogICAgIC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVzLgogICAgIC8v
IFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5z
dGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgogICAgIC8vIElmIGluc3Vm
ZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwg
bm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCi0gICAgaWYgKCFtX2RlY29k
ZXIpIHsKLSAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VEZWNvZGVy
UHRyPihOYXRpdmVJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9n
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworICAgIG1fZGVjb2RlciA9IEltYWdlRGVjb2Rl
cjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBp
ZiAobV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQotICAgICAgICAgICAg
bV9kZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpOwor
ICAgIGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpCisgICAgICAg
IG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsK
ICNlbmRpZgorfQorCit2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChkYXRhKTsKKyAgICAKKyAgICBp
ZiAoIWluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV9kZWNvZGVyKQpAQCAtMTA4LDI5ICsxMTcs
MzMgQEAgYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNp
emVfdCkgY29uc3QKIAogYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKIHsKLSAg
ICByZXR1cm4gbV9kZWNvZGVyICYmIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7CisgICAg
cmV0dXJuIGluaXRpYWxpemVkKCkgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKIH0K
IAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7CisgICAgcmV0
dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7CiB9CiAKLUludFNpemUgSW1hZ2VTb3VyY2U6OmZy
YW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNl
OjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVjb2Rl
cikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRl
eCgwLCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7Cit9CiAKLSAgICBJbnRTaXplIHNpemUg
PSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOwotICAgIGlmICgoZGVzY3JpcHRp
b24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikg
JiYgbV9kZWNvZGVyLT5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCi0gICAgICAg
IHJldHVybiBJbnRTaXplKHNpemUuaGVpZ2h0KCksIHNpemUud2lkdGgoKSk7CitJbnRTaXplIElt
YWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIHJldHVybiBzaXplOworICAgIEludFNpemUgc2l6ZSA9IG1fZGVjb2Rlci0+ZnJh
bWVTaXplQXRJbmRleChpbmRleCk7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9
IG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKTsKKyAgICAKKyAgICByZXR1cm4gc2hvdWxkUmVzcGVj
dEltYWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gJiYgb3JpZW50YXRp
b24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUoKSA6IHNpemU7CiB9
CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+aG90U3BvdChob3RTcG90KSA6
IGZhbHNlOworICAgIHJldHVybiBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+aG90U3BvdCho
b3RTcG90KTsKIH0KIAogc2l6ZV90IEltYWdlU291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWlu
ZVByb3BlcnRpZXMoKSBjb25zdApAQCAtMTQwLDIxICsxNTMsMTcgQEAgc2l6ZV90IEltYWdlU291
cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAogCiBpbnQgSW1h
Z2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCiB7Ci0gICAgcmV0dXJuIG1fZGVjb2RlciA/IG1f
ZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTm9uZTsKKyAgICByZXR1cm4g
aW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9u
Tm9uZTsKIH0KIAogc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOworICAgIHJl
dHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQogCiBO
YXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsKQogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFpbml0aWFsaXplZCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFplcm8taGVpZ2h0IGltYWdlcyBj
YW4gY2F1c2UgcHJvYmxlbXMgZm9yIHNvbWUgcG9ydHMuICBJZiB3ZSBoYXZlIGFuCkBAIC0xNjIs
NiArMTcxLDEwIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdl
QXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2CiAgICAgaWYgKHNpemUoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgSW1hZ2VGcmFtZSogYnVmZmVy
ID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVy
IHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKICAgICAvLyBSZXR1cm4gdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBh
IG5hdGl2ZSBpbWFnZS4gIEZvciBzb21lIHBvcnRzLCB0aGUgZGF0YQogICAgIC8vIGlzIGFscmVh
ZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhpcyBqdXN0IGluY3JlbWVudHMgaXRzIHJl
ZmNvdW50LgogICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKQEAgLTE2OSw3
ICsxODIsNyBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogCiBmbG9hdCBJbWFnZVNvdXJjZTo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghbV9kZWNvZGVy
KQorICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbWFn
ZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CkBA
IC0xODgsMTkgKzIwMSwxNyBAQCBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KQogCiBJbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpvcmllbnRh
dGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdAogewotICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2Rl
Y29kZXItPm9yaWVudGF0aW9uKCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyAgICByZXR1
cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKSA6IERlZmF1bHRJbWFn
ZU9yaWVudGF0aW9uOwogfQogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRl
eChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsK
KyAgICByZXR1cm4gIWluaXRpYWxpemVkKCkgfHwgbV9kZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJ
bmRleChpbmRleCk7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghbV9kZWNvZGVyKQorICAgIGlmICghaW5pdGlh
bGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW1hZ2VGcmFtZSogYnVmZmVy
ID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwpAQCAtMjA5LDkgKzIyMCw3
IEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4
KQogCiB1bnNpZ25lZCBJbWFnZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdAogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUJ5dGVzQXRJbmRleChpbmRl
eCk7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1lQnl0ZXNBdElu
ZGV4KGluZGV4KSA6IDA7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IGMxMWY3YmU0ODI5ZTRlNmJjNDAxNzg5NjNjMWQ1MWEx
ODY2MGEwYTAuLmRkOGYyZDY3OTY4OWFlODVkNTVmZTEwNjIwZjdlOWVkYWEzMzI5NDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtNDUs
MTkgKzQ1LDcgQEAgY2xhc3MgSW1hZ2VPcmllbnRhdGlvbjsKIGNsYXNzIEludFBvaW50OwogY2xh
c3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotI2lmIFVTRShDRykKLXR5cGVkZWYg
Q0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZWxzZQogY2xhc3MgSW1h
Z2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsK
LSNlbmRpZgotCi0jaWYgVVNFKENHKQotI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VE
ZWNvZGVyCi0jZWxzZQotdHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwot
I2VuZGlmCiAKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdl
IGZvcm1hdCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVt
IGFuZCB0aGUgY29uc3RhbnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4K
QEAgLTEyMiwxOSArMTEwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgIFNoYXJlZEJ1ZmZl
ciogZGF0YSA9IE5VTEwsCiAgICAgICAgICAgICAgICBib29sIGFsbERhdGFSZWNlaXZlZCA9IGZh
bHNlKTsKIAotICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdDsKKyAgICBib29sIGluaXRpYWxp
emVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgU3RyaW5n
IGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CiAKICAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd1N1YnNhbXBs
aW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICB2b2lkIHNldEFsbG93U3Vic2Ft
cGxpbmcoYm9vbCBhbGxvd1N1YnNhbXBsaW5nKSB7IG1fYWxsb3dTdWJzYW1wbGluZyA9IGFsbG93
U3Vic2FtcGxpbmc7IH0KKyAgICBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGluZ0xl
dmVsKCkgY29uc3Q7CiAKICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwotICAgIC8vIEFsd2F5
cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBsaW5nLgotICAgIEludFNpemUgc2l6ZShJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24o
KSkgY29uc3Q7Ci0gICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1YnNhbXBsZWQgZnJhbWUuCi0g
ICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAs
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
bigpKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25F
bnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7CiAKICAgICBib29sIGdl
dEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsKIApAQCAtMTYzLDcgKzE1MiwxNiBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVy
OworICAgIHZvaWQgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChTaGFyZWRCdWZmZXIqKTsKKyAgICBT
dWJzYW1wbGluZ0xldmVsIGNhbGN1bGF0ZU1heGltdW1TdWJzYW1wbGluZ0xldmVsKCkgY29uc3Q7
CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAg
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fYWxsb3dTdWJzYW1wbGluZyB7IHRydWUg
fTsKKyNlbHNlCisgICAgYm9vbCBtX2FsbG93U3Vic2FtcGxpbmcgeyBmYWxzZSB9OworI2VuZGlm
CiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCmluZGV4IGJkYTBkYzI4MWM5MzdkY2RmMmRiMTVhYzcxMjhhMjM5NGQ3NTc0
YWYuLjFmNGVlMjA3NjZjMTVkY2Q3ZTBhZTZjYmMwZDRiZDFjNzM0NTE2MDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCkBAIC00MSw3ICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIG5hdGl2ZUltYWdl
LCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQogICAgICwg
bV9zaXplKGNhaXJvU3VyZmFjZVNpemUobmF0aXZlSW1hZ2UuZ2V0KCkpKQotICAgICwgbV9taW5p
bXVtU3Vic2FtcGxpbmdMZXZlbCgwKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1f
cmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0aW9uQ291bnRT
dGF0dXMoVW5rbm93bikKQEAgLTEyMiwxMSArMTIxLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBG
bG8KICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEJp
dG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0Ci17Ci0g
ICAgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci19Ci0KIHZvaWQgQml0bWFwSW1hZ2U6
OmNoZWNrRm9yU29saWRDb2xvcigpCiB7CiAgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdl
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VD
Ry5jcHAKaW5kZXggMzJiZDBiNWNiNTUzZmNkZWRkYmFhZDJmOTYzNjEzMDFmNWQ0NmVjZC4uZWIz
ZmU0MmVlM2JlMTI2NDQ2MjYwYjI0YTlhMTQ4M2E2N2M2ODM3NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKQEAgLTcw
LDkgKzcwLDYgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKIAog
Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9t
aW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgwKQotICAgICwgbV9pbWFnZU9yaWVudGF0aW9uKE9yaWdp
blRvcExlZnQpCi0gICAgLCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKGZhbHNlKQog
ICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRp
b25Ob25lKQogICAgICwgbV9yZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikKQEAgLTEwNSwy
OCArMTAyLDYgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFJldGFpblB0cjxDR0ltYWdlUmVm
PiYmIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICBjaGVja0ZvclNvbGlkQ29s
b3IoKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5n
TGV2ZWwoKSBjb25zdAotewotICAgIGlmICghbV9hbGxvd1N1YnNhbXBsaW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fc291cmNlLmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRl
eCgwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVmFsdWVzIGNob3NlbiB0byBiZSBhcHBy
b3ByaWF0ZSBmb3IgaU9TLgotICAgIGNvbnN0IGludCBjTWF4aW11bUltYWdlQXJlYUJlZm9yZVN1
YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OwotICAgIGNvbnN0IFN1YnNhbXBsaW5nTGV2ZWwg
bWF4U3Vic2FtcGxpbmdMZXZlbCA9IDM7Ci0KLSAgICBTdWJzYW1wbGluZ0xldmVsIGN1cnJlbnRM
ZXZlbCA9IDA7Ci0gICAgZm9yICggOyBjdXJyZW50TGV2ZWwgPD0gbWF4U3Vic2FtcGxpbmdMZXZl
bDsgKytjdXJyZW50TGV2ZWwpIHsKLSAgICAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBtX3NvdXJj
ZS5mcmFtZVNpemVBdEluZGV4KDAsIGN1cnJlbnRMZXZlbCk7Ci0gICAgICAgIGlmIChmcmFtZVNp
emUuYXJlYSgpIDwgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBjdXJy
ZW50TGV2ZWw7Ci19Ci0KIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiB7
CiAgICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCmluZGV4IDUwMTVk
ZDE1YWJmYzgyNWRjZWIwMzIwZjEyMDI5Y2JhNTEyMTgyNzkuLjg4NzQyZWRlYTVhMjQzNGM3MzNi
MDQ0ZWE5YWViYmVjYzUxMzM4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCkBAIC01MSw2MSArNTEsNTMgQEAgY29u
c3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgPSBDRlNUUigia0NH
SW1hZ2VTb3VyY2VTdWJzYW1wbGUKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitjbGFzcyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIH5JbWFnZURlY29kZXIoKTsKIAot
Y29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNsYW1wZWREZWxh
eVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7Ci1jb25zdCBDRlN0cmluZ1JlZiBX
ZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSA9IENGU1RSKCJEZWxheVRpbWUiKTsK
LWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50ID0g
Q0ZTVFIoIkxvb3BDb3VudCIpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNv
ZGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZURlY29kZXI+KG5ldyBJbWFnZURlY29kZXIpOworICAgIH0KIAotY29uc3QgQ0ZTdHJpbmdSZWYg
a0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNo
b3VsZFByZWZlclJHQjMyIik7Ci1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNraXBN
ZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOworICAgIHN0YXRp
YyBzaXplX3QgYnl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCk7CisgICAgc3RhdGlj
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlLCBT
dWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKTsKIAotI2lmICFQTEFURk9S
TShDT0NPQSkKLXNpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5m
bywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQotewotICAgIFNo
YXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5m
byk7Ci0gICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXItPnNpemUoKTsKLSAgICBp
ZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgU3RyaW5n
IGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBj
b25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBzaXplX3QgZnJhbWVDb3VudCgp
IGNvbnN0OworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAgICBib29sIGhvdFNw
b3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0OwogCi0gICAgY29uc3QgY2hhciogc291cmNlID0g
c2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKLSAgICBzaXplX3QgYW1vdW50ID0gc3Rk
OjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0aW9uKTsKLSAgICBtZW1jcHko
YnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7Ci0gICAgcmV0dXJuIGFtb3VudDsKLX0KKyAgICBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsKKyAg
ICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OwogCi12b2lkIHNoYXJl
ZEJ1ZmZlclJlbGVhc2Uodm9pZCogaW5mbykKLXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1
ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAgIHNoYXJlZEJ1ZmZl
ci0+ZGVyZWYoKTsKLX0KLSNlbmRpZgorICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpIGNvbnN0
OworICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7
CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
ID0gMCkgY29uc3Q7CiAKLUltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxw
aGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICA6
IG1fZGVjb2RlcigwKQotewotICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBhbmQgR2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCi19CisgICAgTmF0aXZlSW1hZ2VQdHIgY3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdDsKIAot
SW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCi17Ci0gICAgY2xlYXIodHJ1ZSk7Ci19CisgICAg
dm9pZCBzZXREYXRhKENGRGF0YVJlZiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZvaWQg
c2V0RGF0YShTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKLXZvaWQgSW1h
Z2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIC8vIFJlY2VudCB2ZXJzaW9u
cyBvZiBJbWFnZUlPIGRpc2NhcmQgcHJldmlvdXNseSBkZWNvZGVkIGltYWdlIGZyYW1lcyBpZiB0
aGUgY2xpZW50Ci0gICAgLy8gYXBwbGljYXRpb24gbm8gbG9uZ2VyIGhvbGRzIHJlZmVyZW5jZXMg
dG8gdGhlbSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHRocm93IGF3YXkKLSAgICAvLyB0aGUgZGVj
b2RlciB1bmxlc3Mgd2UncmUgZXhwbGljaXRseSBhc2tlZCB0byBkZXN0cm95IGFsbCBvZiB0aGUg
ZnJhbWVzLgotICAgIGlmICghZGVzdHJveUFsbEZyYW1lcykKLSAgICAgICAgcmV0dXJuOworcHJv
dGVjdGVkOgorICAgIEltYWdlRGVjb2RlcigpOworICAgIAorICAgIG11dGFibGUgSW50U2l6ZSBt
X3NpemU7CisgICAgQ0dJbWFnZVNvdXJjZVJlZiBtX25hdGl2ZURlY29kZXI7Cit9OwogCi0gICAg
aWYgKG1fZGVjb2RlcikgewotICAgICAgICBDRlJlbGVhc2UobV9kZWNvZGVyKTsKLSAgICAgICAg
bV9kZWNvZGVyID0gMDsKLSAgICB9Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIHNldERhdGEoZGF0
YSwgYWxsRGF0YVJlY2VpdmVkKTsKLX0KK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdl
UHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lID0gQ0ZTVFIoIlVuY2xhbXBlZERlbGF5VGlt
ZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRp
bWUgPSBDRlNUUigiRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFn
ZVByb3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RSKCJMb29wQ291bnQiKTsKKworY29uc3QgQ0ZT
dHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFn
ZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7Citjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNv
dXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOwog
CiBzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlSW1hZ2VTb3VyY2VPcHRp
b25zKFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKIHsKQEAgLTEzNSw2NCArMTI3
LDYgQEAgc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9u
cyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW4KICAgICByZXR1cm4gb3B0aW9uczsKIH0KIAot
Ym9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rl
Y29kZXI7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAo
IW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3Jl
bWVudGFsKDApOwotICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVkQnVm
ZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZmZXIn
cyBrbm93bGVkZ2UuICBXZSB1c2UgU2hhcmVkQnVmZmVyJ3MgYWJpbGl0eQotICAgIC8vIHRvIHdy
YXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0
IEltYWdlSU8gaXMgcmVhbGx5IGxvb2tpbmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBDR0lt
YWdlU291cmNlVXBkYXRlRGF0YShtX2RlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgp
LCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAg
bV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIENy
ZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBkYXRh
LT5yZWYoKTsKLSAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFjayBy
YXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVmZmVyCi0g
ICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRl
ciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwgd2hpY2gKLSAgICAvLyBpcyBhIHJl
cXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBvaW50ZXIgY2FsbGJhY2suCi0gICAgQ0dE
YXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAs
IHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgc2hhcmVkQnVmZmVyUmVsZWFzZSB9Owot
ICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihD
R0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBkYXRhLT5zaXplKCksICZwcm92aWRlckNh
bGxiYWNrcykpOwotICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhUHJvdmlkZXIobV9kZWNvZGVy
LCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKLX0KLQotU3Ry
aW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2RlY29kZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBDRlN0cmluZ1JlZiBpbWFn
ZVNvdXJjZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX2RlY29kZXIpOwotICAgIHJldHVy
biBXZWJDb3JlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JJbWFnZVNvdXJjZVR5cGUoaW1hZ2VTb3Vy
Y2VUeXBlKTsKLX0KLQotU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZXJlIGFyZSBmb3Vy
IHN1YnNhbXBsaW5nIGxldmVsczogMCA9IDF4LCAxID0gMC41eCwgMiA9IDAuMjV4LCAzID0gMC4x
MjV4LgotICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IHN0ZDo6bWF4PGZsb2F0PigwLjEyNSwgc3Rk
OjptaW48ZmxvYXQ+KDEsIHNjYWxlKSk7Ci0gICAgaW50IHJlc3VsdCA9IGNlaWxmKGxvZzJmKDEg
LyBjbGFtcGVkU2NhbGUpKTsKLSAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1bHQgPD0gMyk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxh
YmxlKCkKLXsKLSAgICAvLyBSYWduYXJvcyB5ZWxsczogVE9PIFNPT04hIFlvdSBoYXZlIGF3YWtl
bmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKLSAgICBpZiAoQ0dJbWFnZVNvdXJjZUdldFN0YXR1
cyhtX2RlY29kZXIpIDwga0NHSW1hZ2VTdGF0dXNJbmNvbXBsZXRlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0aWVz
ID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2Rlciwg
MCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWltYWdlMFByb3BlcnRp
ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250
YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxXaWR0
aCkKLSAgICAgICAgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5n
ZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKLX0KLQogc3RhdGljIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQ
cm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChpbWFnZVByb3BlcnRpZXMpOwpAQCAtMjA1LDg3ICsx
MzksNDcgQEAgc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9tUHJvcGVydGll
cyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWUKICAgICByZXR1cm4gSW1hZ2VPcmllbnRh
dGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOwogfQogCi1ib29sIEltYWdlU291cmNlOjph
bGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAorI2lmICFQTEFURk9S
TShDT0NPQSkKK3NpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5m
bywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQogewotICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMo
KS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFn
ZVByb3BlcnR5SkZJRkRpY3Rpb25hcnkpKTsKLSAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKLSAg
ICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlK
RklGSXNQcm9ncmVzc2l2ZSkpOwotICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7Ci0gICAgICAg
ICAgICBib29sIGlzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wp
OwotICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+
IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBw
cm9ncmVzc2l2ZQotICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0
aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9n
cmVzc2l2ZSBpbWFnZXMuIFRoaXMKLSAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBm
YWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgotICAg
ICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQg
KDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKLSAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVz
c2l2ZTsKLSAgICAgICAgfQotICAgIH0KKyAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9
IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNpemVfdCBzb3VyY2VTaXpl
ID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7CisgICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUp
CisgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29uc3QgY2hhciog
c291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKKyAgICBzaXplX3QgYW1v
dW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0aW9uKTsKKyAg
ICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJuIGFtb3VudDsKIH0K
IAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0
aW9uIGRlc2NyaXB0aW9uKSBjb25zdAordm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGlu
Zm8pCiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBp
bWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKLQotICAgIGlmICgh
cHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIGludCB3aWR0aCA9
IDA7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0gICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVy
UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVy
dHlQaXhlbFdpZHRoKTsKLSAgICBpZiAobnVtKQotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51
bSwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKLSAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVs
SGVpZ2h0KTsKLSAgICBpZiAobnVtKQotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NG
TnVtYmVySW50VHlwZSwgJmhlaWdodCk7Ci0KLSAgICBpZiAoKGRlc2NyaXB0aW9uLnJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0
aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkK
LSAgICAgICAgcmV0dXJuIEludFNpemUoaGVpZ2h0LCB3aWR0aCk7Ci0KLSAgICByZXR1cm4gSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0
YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNoYXJlZEJ1ZmZlci0+ZGVyZWYo
KTsKIH0KLQotSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3JpZW50YXRpb25BdEluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QKKyNlbmRpZgorICAgIAorSW1hZ2VEZWNvZGVyOjpJbWFnZURl
Y29kZXIoKQorICAgIDogbV9uYXRpdmVEZWNvZGVyKENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1l
bnRhbCgwKSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgaW5k
ZXgsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQot
ICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0KLSAgICByZXR1cm4gb3Jp
ZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKTsKIH0KLQotSW50U2l6ZSBJ
bWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24p
IGNvbnN0CisgICAgCitJbWFnZURlY29kZXI6On5JbWFnZURlY29kZXIoKQogewotICAgIHJldHVy
biBmcmFtZVNpemVBdEluZGV4KDAsIDAsIGRlc2NyaXB0aW9uKTsKKyAgICBDRlJlbGVhc2UobV9u
YXRpdmVEZWNvZGVyKTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdChJbnRQb2lu
dCYgaG90U3BvdCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VEZWNvZGVyOjpzdWJzYW1w
bGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwpCiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVy
dGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29k
ZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgeCA9IC0xLCB5ID0gLTE7Ci0gICAg
Q0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3Bl
cnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WCIpKTsKLSAgICBpZiAoIW51bSB8fCAhQ0ZOdW1i
ZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3Bl
cnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WSIpKTsKLSAgICBpZiAoIW51bSB8fCAhQ0ZOdW1i
ZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ5KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHggPCAwIHx8IHkgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBob3RTcG90ID0gSW50UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgLy8g
VGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2ZWxzOiAwID0gMXgsIDEgPSAwLjV4LCAyID0g
MC4yNXgsIDMgPSAwLjEyNXguCisgICAgZmxvYXQgY2xhbXBlZFNjYWxlID0gc3RkOjptYXg8Zmxv
YXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwgc2NhbGUpKTsKKyAgICBTdWJzYW1wbGluZ0xl
dmVsIHJlc3VsdCA9IGNlaWxmKGxvZzJmKDEgLyBjbGFtcGVkU2NhbGUpKTsKKyAgICBBU1NFUlQo
cmVzdWx0ID49MCAmJiByZXN1bHQgPD0gMyk7CisgICAgcmV0dXJuIHN0ZDo6bWluKHJlc3VsdCwg
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCi1zaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVz
RGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CitzaXplX3QgSW1hZ2VEZWNvZGVy
OjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKQogewogICAgIC8vIE1lYXN1cmVk
IGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxvYyBjYWxscyBvbiBNYWMgT1MgMTAuNi42LCB4ODZfNjQu
CiAgICAgLy8gQSBub24temVybyB2YWx1ZSBlbnN1cmVzIGNhY2hlZCBpbWFnZXMgd2l0aCBubyBk
ZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRlcgpAQCAtMjk2LDEyICsxOTAsNDEgQEAgc2l6ZV90IElt
YWdlU291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAogICAg
IHJldHVybiAxMzA4ODsKIH0KICAgICAKLWludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50
KCkKK1N0cmluZyBJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKIHsKLSAg
ICBpZiAoIWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7
CisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUo
bV9uYXRpdmVEZWNvZGVyKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVkRXh0ZW5zaW9u
Rm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Cit9CiAKLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVBy
b3BlcnRpZXMobV9kZWNvZGVyLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworYm9vbCBJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Cit7CisgICAgLy8gUmFnbmFyb3Mg
eWVsbHM6IFRPTyBTT09OISBZb3UgaGF2ZSBhd2FrZW5lZCBtZSBUT08gU09PTiwgRXhlY3V0dXMh
CisgICAgaWYgKENHSW1hZ2VTb3VyY2VHZXRTdGF0dXMobV9uYXRpdmVEZWNvZGVyKSA8IGtDR0lt
YWdlU3RhdHVzSW5jb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNv
dXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIDAsIGltYWdlU291cmNl
T3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2Uw
UHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCisgICAgICAgICYm
IENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdl
UHJvcGVydHlQaXhlbEhlaWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpzaXplKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zaXplID0gZnJh
bWVTaXplQXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3QgSW1h
Z2VEZWNvZGVyOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJj
ZUdldENvdW50KG1fbmF0aXZlRGVjb2Rlcik7Cit9CisKK2ludCBJbWFnZURlY29kZXI6OnJlcGV0
aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJv
cGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1fbmF0aXZlRGVj
b2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKICAgICBpZiAoIXByb3BlcnRpZXMp
CiAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CiAKQEAgLTMzNSw2MSArMjU4LDY3
IEBAIGludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKICAgICByZXR1cm4gY0FuaW1h
dGlvbk5vbmU7CiB9CiAKLXNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0Citi
b29sIEltYWdlRGVjb2Rlcjo6aG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9kZWNvZGVyID8gQ0dJbWFnZVNvdXJjZUdldENvdW50KG1fZGVjb2RlcikgOiAw
OworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENH
SW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFn
ZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaW50IHggPSAtMSwgeSA9IC0xOworICAgIENGTnVtYmVyUmVm
IG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgp
LCBDRlNUUigiaG90c3BvdFgiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgp
LCBDRlNUUigiaG90c3BvdFkiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICh4IDwgMCB8fCB5IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaG90U3Bv
dCA9IEludFBvaW50KHgsIHkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1SZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQorSW50U2l6ZSBJbWFnZURlY29k
ZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbml0aWFsaXplZCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFn
ZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKKyAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVBy
b3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9u
cyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwogCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8v
IDxyZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2VkIHRoZSBkZWZh
dWx0IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNoaW5nVHJhbnNp
ZW50Ci0gICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBmb3IgdXMg
c2luY2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBldmVyeSB0aW1l
IHdlIGNhbGxlZAotICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRlbGwgQ0cgdG8g
Y2FjaGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVtLzE0MzY2NzU1
PiAtCi0gICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBrQ0dJbWFnZUNh
Y2hpbmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQuCi0jaWYgQ09N
UElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0jZW5kaWYK
LSAgICBDR0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdU
ZW1wb3JhcnkpOwotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHBvcAotI2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgIGlmICghcHJvcGVydGll
cykKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIENGU3RyaW5nUmVmIGltYWdlVVRJID0gQ0dJ
bWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdS
ZWYgeGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdlIik7CisgICAgaW50IHdpZHRo
ID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1i
ZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9w
ZXJ0eVBpeGVsV2lkdGgpOworICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUo
bnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwogCi0gICAgaWYgKCFpbWFnZVVUSSkKLSAg
ICAgICAgcmV0dXJuIGltYWdlOworICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwor
ICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmaGVpZ2h0KTsKIAotICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJtVVRJKSkKLSAg
ICAgICAgcmV0dXJuIGltYWdlOwotICAgIAotICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwg
bWFzayBvdXQgYWxsIHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4K
LSAgICBjb25zdCBDR0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1
NSwgMjU1LCAyNTV9OwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5n
Q29sb3JzKSk7Ci0gICAgcmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2UgOiBpbWFnZTsK
KyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAotYm9vbCBJbWFnZVNvdXJj
ZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCitib29sIEltYWdlRGVjb2Rl
cjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGZyYW1lQ291bnQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRTdGF0dXNBdElu
ZGV4KG1fZGVjb2RlciwgaW5kZXgpID09IGtDR0ltYWdlU3RhdHVzQ29tcGxldGU7CisgICAgcmV0
dXJuIENHSW1hZ2VTb3VyY2VHZXRTdGF0dXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgp
ID09IGtDR0ltYWdlU3RhdHVzQ29tcGxldGU7CiB9CiAKLWZsb2F0IEltYWdlU291cmNlOjpmcmFt
ZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCitJbWFnZU9yaWVudGF0aW9uIEltYWdlRGVj
b2Rlcjo6b3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKIHsKLSAgICBpZiAo
IWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiAwOworICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGll
c0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0
KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VP
cmllbnRhdGlvbjsKKworICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKHByb3Bl
cnRpZXMuZ2V0KCkpOworfQogCitmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKICAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Ci0gICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNv
dXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9w
dGlvbnMoKS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRp
ZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKICAgICBpZiAocHJv
cGVydGllcykgewogICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRp
Y3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1h
Z2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOwogICAgICAgICBpZiAoZ2lmUHJvcGVydGllcykgewpA
QCAtNDIwLDE1ICszNDksMzQgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCBpbmRleCkKICAgICByZXR1cm4gZHVyYXRpb247CiB9CiAKLWJvb2wgSW1hZ2VT
b3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK2Jvb2wgSW1hZ2VEZWNv
ZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAogewotICAg
IGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEZJWE1FOiB3aHkgZG9l
c24ndCB0aGlzIHJldHVybiB0cnVlPworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBy
b3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9u
YXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICgh
cHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJRkRpY3Rpb25h
cnkpKTsKKyAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZCb29sZWFuUmVmIGlz
UHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOwor
ICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7CisgICAgICAgICAgICBib29sIGlzUHJvZ3Jlc3Np
dmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOworICAgICAgICAgICAgLy8gV29y
a2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVy
eSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQorICAgICAgICAg
ICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwg
dGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMK
KyAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBj
aGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgorICAgICAgICAgICAgLy8gRklYTUU6IFJl
bW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkx
NDE4PikKKyAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQogCitib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNB
bHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorewogICAgIGlmICghZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleChpbmRleCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQ0ZTdHJpbmdS
ZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKKyAgICBDRlN0
cmluZ1JlZiBpbWFnZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIp
OwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGlzIG5vIGltYWdlIHR5cGUgb3IgdGhl
IGltYWdlIHR5cGUgaXMgSlBFRywgYmVjYXVzZQogICAgIC8vIEpQRUcgZG9lcyBub3Qgc3VwcG9y
dCBhbHBoYSB0cmFuc3BhcmVuY3kuCkBAIC00NDEsMTAgKzM4OSwyMzUgQEAgYm9vbCBJbWFnZVNv
dXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIHJldHVybiB0cnVl
OwogfQogCit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIElu
dFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS5hcmVhKCkgKiA0OworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRl
eChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdM
ZXZlbCkuZ2V0KCkpKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vNzM3MTE5OD4gLSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUgZGVmYXVsdCBjYWNoaW5nIGJl
aGF2aW91ciBpbiBpT1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1RyYW5zaWVudAorICAgIC8vIHdo
aWNoIGNhdXNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9yIHVzIHNpbmNlIHRoZSBpbWFn
ZXMgaGFkIHRvIGJlIHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkgdGltZSB3ZSBjYWxsZWQKKyAg
ICAvLyBDR0NvbnRleHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENHIHRvIGNhY2hlIHRoZSBkcmF3
biBpbWFnZXMuIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2Njc1NT4gLQorICAgIC8vIENv
cmVHcmFwaGljcyBuZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1hZ2VDYWNoaW5nVGVtcG9yYXJ5
IHNpbmNlIGl0J3Mgc3RpbGwgbm90IHRoZSBkZWZhdWx0LgorI2lmIENPTVBJTEVSKENMQU5HKQor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBp
Z25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorI2VuZGlmCisgICAgICAgIENHSW1h
Z2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7
CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5k
aWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9
IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlcik7CisgICAgc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFnZSIpOworCisg
ICAgaWYgKCFpbWFnZVVUSSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAgaWYgKCFDRkVx
dWFsKGltYWdlVVRJLCB4Ym1VVEkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisKKyAgICAvLyBJ
ZiBpdCBpcyBhbiB4Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJlYXMgdG8gcmVu
ZGVyIHRoZW0gdHJhbnNwYXJlbnQuCisgICAgY29uc3QgQ0dGbG9hdCBtYXNraW5nQ29sb3JzWzZd
ID0gezI1NSwgMjU1LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gbWFza2VkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9y
cyhpbWFnZS5nZXQoKSwgbWFza2luZ0NvbG9ycykpOworICAgIHJldHVybiBtYXNrZWRJbWFnZSA/
IG1hc2tlZEltYWdlIDogaW1hZ2U7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKENG
RGF0YVJlZiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBDR0ltYWdlU291cmNl
VXBkYXRlRGF0YShtX25hdGl2ZURlY29kZXIsIGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisK
K3ZvaWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8gT24gTWFjIHRoZSBO
U0RhdGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRv
IHdpdGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4KKyAgICAvLyBXZSB1c2UgU2hh
cmVkQnVmZmVyJ3MgYWJpbGl0eSB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBh
cm91bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzCisgICAgLy8gcmVhbGx5IGxvb2tp
bmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBzZXREYXRhKGRhdGEtPmNyZWF0ZUNGRGF0YSgp
LmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1f
bmF0aXZlRGVjb2RlciwgZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFSZWNlaXZl
ZCk7CisjZWxzZQorICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhlIFNo
YXJlZEJ1ZmZlci4KKyAgICBkYXRhLT5yZWYoKTsKKyAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVz
QXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJl
Y2F1c2UgU2hhcmVkQnVmZmVyCisgICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2Nr
IGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwg
d2hpY2gKKyAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBvaW50
ZXIgY2FsbGJhY2suCisgICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJD
YWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgc2hh
cmVkQnVmZmVyUmVsZWFzZSB9OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBkYXRh
LT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVE
YXRhUHJvdmlkZXIobV9uYXRpdmVEZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFS
ZWNlaXZlZCk7CisjZW5kaWYKK30KKworSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291
cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KQoreworICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBhbmQgR2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24gYXJlIGlnbm9yZWQuCit9CisKK0ltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQorewor
ICAgIGNsZWFyKHRydWUpOworfQorCit2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ry
b3lBbGxGcmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCkKK3sKKyAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgSW1hZ2VJTyBkaXNjYXJkIHByZXZp
b3VzbHkgZGVjb2RlZCBpbWFnZSBmcmFtZXMgaWYgdGhlIGNsaWVudAorICAgIC8vIGFwcGxpY2F0
aW9uIG5vIGxvbmdlciBob2xkcyByZWZlcmVuY2VzIHRvIHRoZW0sIHNvIHRoZXJlJ3Mgbm8gbmVl
ZCB0byB0aHJvdyBhd2F5CisgICAgLy8gdGhlIGRlY29kZXIgdW5sZXNzIHdlJ3JlIGV4cGxpY2l0
bHkgYXNrZWQgdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1lcy4KKyAgICBpZiAoIWRlc3Ryb3lB
bGxGcmFtZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpbml0aWFsaXplZCgpKQorICAg
ICAgICBtX2RlY29kZXIgPSBudWxscHRyOworICAgIAorICAgIGlmIChkYXRhKQorICAgICAgICBz
ZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisgICAgCit2b2lkIEltYWdlU291cmNl
OjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKFNoYXJlZEJ1ZmZlciopCit7CisgICAgaWYgKGluaXRp
YWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlY29kZXIgPSBJbWFnZURlY29kZXI6
OmNyZWF0ZSgpOworfQorCit2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFkYXRhKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChkYXRhKTsKKyAgICAKKyAg
ICBpZiAoIWluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEs
IGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK1N0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5m
aWxlbmFtZUV4dGVuc2lvbigpIDogU3RyaW5nKCk7Cit9CisgICAgCitTdWJzYW1wbGluZ0xldmVs
IEltYWdlU291cmNlOjpjYWxjdWxhdGVNYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2FsbG93U3Vic2FtcGxpbmcgfHwgIWFsbG93U3Vic2FtcGxpbmdPZkZyYW1l
QXRJbmRleCgwKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBWYWx1ZXMgY2hvc2VuIHRv
IGJlIGFwcHJvcHJpYXRlIGZvciBpT1MuCisgICAgY29uc3QgaW50IGNNYXhpbXVtSW1hZ2VBcmVh
QmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEwMjQ7CisgICAgY29uc3QgU3Vic2FtcGxp
bmdMZXZlbCBtYXhTdWJzYW1wbGluZ0xldmVsID0gMzsKKworICAgIFN1YnNhbXBsaW5nTGV2ZWwg
Y3VycmVudExldmVsID0gMDsKKyAgICBmb3IgKCA7IGN1cnJlbnRMZXZlbCA8PSBtYXhTdWJzYW1w
bGluZ0xldmVsOyArK2N1cnJlbnRMZXZlbCkgeworICAgICAgICBJbnRTaXplIGZyYW1lU2l6ZSA9
IGZyYW1lU2l6ZUF0SW5kZXgoMCwgY3VycmVudExldmVsKTsKKyAgICAgICAgaWYgKGZyYW1lU2l6
ZS5hcmVhKCkgPCBjTWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRMZXZlbDsKK30KKyAgICAKK1N1
YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6Om1heGltdW1TdWJzYW1wbGluZ0xldmVsKCkgY29u
c3QKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGNhbGN1bGF0ZU1heGltdW1TdWJz
YW1wbGluZ0xldmVsKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworU3Vic2FtcGxpbmdM
ZXZlbCBJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlKSBj
b25zdAoreworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2Fs
ZShzY2FsZSwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSk7Cit9CisKK2Jvb2wgSW1hZ2VTb3Vy
Y2U6OmlzU2l6ZUF2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgJiYgbV9k
ZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dT
dWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJ
bmRleChpbmRleCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3QK
K3sKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisg
ICAgSW50U2l6ZSBzaXplID0gbV9kZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gbV9kZWNv
ZGVyLT5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgIAorICAgIHJldHVybiBzaG91bGRS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiAmJiBvcmll
bnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpIDogc2l6
ZTsKK30KKworSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3JpZW50YXRpb25BdEluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVj
b2Rlci0+b3JpZW50YXRpb25BdEluZGV4KGluZGV4KSA6IERlZmF1bHRJbWFnZU9yaWVudGF0aW9u
OworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKK30KKyAgICAKK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNp
emVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBmcmFtZVNpemVB
dEluZGV4KDAsIDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKTsKK30KKworYm9vbCBJbWFnZVNv
dXJjZTo6Z2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmhvdFNwb3QoaG90U3BvdCk7Cit9CisKK3NpemVf
dCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3Bl
cnRpZXMoKTsKK30KKyAgICAKK2ludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKK3sK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkg
OiBjQW5pbWF0aW9uTG9vcE9uY2U7Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3Vu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1l
Q291bnQoKSA6IDA7Cit9CisKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZVNvdXJjZTo6Y3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNy
ZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7
Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+ZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChpbmRleCk7Cit9CisKK2Zsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0
aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBt
X2RlY29kZXItPmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KSA6IDA7Cit9CisKK2Jvb2wgSW1h
Z2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICByZXR1
cm4gIWluaXRpYWxpemVkKCkgfHwgbV9kZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRl
eCk7Cit9CisKIHVuc2lnbmVkIEltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3Qg
aW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBJ
bnRTaXplIGZyYW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikp
OwotICAgIHJldHVybiBmcmFtZVNpemUud2lkdGgoKSAqIGZyYW1lU2l6ZS5oZWlnaHQoKSAqIDQ7
CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBmcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1w
bGluZ0xldmVsKTsKKyAgICByZXR1cm4gZnJhbWVTaXplLmFyZWEoKSAqIDQ7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuY3BwCmluZGV4IGI5NjU2NTUyZjI3ZTM2ODJmNmExNDM4MGZhNWVkMzNjNTcxNTRkNmQu
LjkyM2NkYTYyNmE1MjAxMjc4OGRiM2RjNjQ2NDdhNTVhNDNjYzUyNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cApAQCAtOTUsMzUgKzk1LDM1IEBAIGJvb2wgbWF0Y2hlc0NVUlNpZ25hdHVyZShjaGFyKiBjb250
ZW50cykKIAogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNo
YXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJ
bWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24pCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBJbWFnZURlY29kZXI6OmNy
ZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBh
bHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uKQogewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsZW5n
dGhPZkxvbmdlc3RTaWduYXR1cmUgPSAxNDsgLy8gVG8gd2l0OiAiUklGRj8/Pz9XRUJQVlAiCiAg
ICAgY2hhciBjb250ZW50c1tsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmVdOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNvbnRlbnRzLCBsZW5ndGhPZkxvbmdlc3RT
aWduYXR1cmUsIGRhdGEsIDApOwogICAgIGlmIChsZW5ndGggPCBsZW5ndGhPZkxvbmdlc3RTaWdu
YXR1cmUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmIChtYXRjaGVzR0lGU2lnbmF0dXJlKGNvbnRlbnRzKSkKLSAgICAgICAgcmV0dXJuIG5ldyBH
SUZJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+KG5ldyBHSUZJbWFn
ZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAKICAg
ICBpZiAobWF0Y2hlc1BOR1NpZ25hdHVyZShjb250ZW50cykpCi0gICAgICAgIHJldHVybiBuZXcg
UE5HSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPihuZXcgUE5HSW1h
Z2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogCiAg
ICAgaWYgKG1hdGNoZXNJQ09TaWduYXR1cmUoY29udGVudHMpIHx8IG1hdGNoZXNDVVJTaWduYXR1
cmUoY29udGVudHMpKQotICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcihhbHBoYU9w
dGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4obmV3IElDT0ltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwg
Z2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKIAogICAgIGlmIChtYXRjaGVzSlBFR1NpZ25h
dHVyZShjb250ZW50cykpCi0gICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcihhbHBo
YU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4obmV3IEpQRUdJbWFnZURlY29kZXIoYWxwaGFPcHRp
b24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAKICNpZiBVU0UoV0VCUCkKICAgICBp
ZiAobWF0Y2hlc1dlYlBTaWduYXR1cmUoY29udGVudHMpKQotICAgICAgICByZXR1cm4gbmV3IFdF
QlBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+KG5ldyBXRUJQSW1h
Z2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogI2Vu
ZGlmCiAKICAgICBpZiAobWF0Y2hlc0JNUFNpZ25hdHVyZShjb250ZW50cykpCi0gICAgICAgIHJl
dHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbik7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPihu
ZXcgQk1QSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikpOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEltYWdlRnJh
bWU6OkltYWdlRnJhbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCBiMzU0N2Q5NGU4MDhmODc0YWVkOWRhMGYy
OTFiZWNlMjBhNjQ2NDM3Li41MzQ3YTQ3YjcyM2NkNWYwM2I2MmQzYjM1MmNmOTQ1MTQ3ZGEwZWFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaApAQCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBkZWNvZGVyIG9mIHRoZSBhcHByb3ByaWF0
ZSB0eXBlLiAgUmV0dXJucyAwIGlmCiAgICAgICAgIC8vIHdlIGNhbid0IHNuaWZmIGEgc3VwcG9y
dGVkIHR5cGUgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAocG9zc2libHkKICAgICAgICAgLy8gYmVj
YXVzZSB0aGVyZSBpc24ndCBlbm91Z2ggZGF0YSB5ZXQpLgotICAgICAgICBzdGF0aWMgSW1hZ2VE
ZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxw
aGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAg
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmls
ZW5hbWVFeHRlbnNpb24oKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvRHJhZ0ltYWdlTWFjLm1tCmluZGV4IGJiYWU5MWZhOGUzYzA2NjQ0N2M0NjRkNmUzMTIwMGRl
MjQ4Y2U4M2YuLjkxYzkyZTkxMmNjMjE4OTJmNjU5ZTY3YTk1OTU3MWZiZGQwMDI3YjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQpAQCAtOTEsNyArOTEs
NyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBp
bWFnZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaQogICAgIGlmIChpczxCaXRtYXBJbWFnZT4oKmlt
YWdlKSkgewogICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwogICAgICAgICBC
aXRtYXBJbWFnZSYgYml0bWFwSW1hZ2UgPSBkb3duY2FzdDxCaXRtYXBJbWFnZT4oKmltYWdlKTsK
LSAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uu
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihkZXNjcmlwdGlvbik7CisgICAgICAgIEludFNpemUg
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLnNpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb24oKTsKIAogICAgICAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50
YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAgICAgICAgIG9yaWVudGF0
aW9uID0gYml0bWFwSW1hZ2Uub3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274970</attachid>
            <date>2016-03-25 21:03:44 -0700</date>
            <delta_ts>2016-03-26 19:06:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160325210346.patch</filename>
            <type>text/plain</type>
            <size>59052</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiYjdjMTYwZDYxYjgx
MDk3OWNkZTU4OWVkMGNlODY2M2RiNDQ3ZC4uNWMwOGE3NGUwZDU4YWY5MzQyOGFhYTQyNDhjMDVm
ZDM4OTk0MTYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAxNi0wMy0yNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIGltYWdlIENHIGRlY29kaW5nIGNvZGUgZnJvbSBvdXQgdG8gYSBuZXcgY2xh
c3MgbmFtZWQgSW1hZ2VEZWNvZGVyLgorICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHNwbGl0
IGlzIHRvIGhhdmUgdGhlIENHIEltYWdlU291cmNlIHNpbWlsYXIgdG8gdGhlIG5vbmUKKyAgICAg
ICAgQ0cgSW1hZ2VTb3VyY2Ugd2hlcmUgdGhlcmUgaXMgYSBzZXBhcmF0ZSBjbGFzcyBmb3IgZGVj
b2RpbmcgYW5kIGl0IGlzIG5hbWVkCisgICAgICAgIEltYWdlRGVjb2RlciBhbHNvLgorIAorICAg
ICAgICBUaGUgcGxhbiBpcyBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgLS0gTW92ZSB0
aGUgbmV3IGNsYXNzIHRvIGEgc2VwYXJhdGUgZmlsZXMKKyAgICAgICAgICAgIC0tIE1lcmdlIHRo
ZSBJbWFnZVNvdXJjZS5jcHAgYW5kIEltYWdlU291cmNlQ0cuY3BwLiBpbiBvbmUgZmlsZQorICAg
ICAgICAgICAgLS0gTW92ZSBjYWNoaW5nIHRoZSBGcmFtZURhdGEgZnJvbSBCaXRtYXBJbWFnZSB0
byBJbWFnZVNvdXJjZS4KKyAKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRlcmVyKToK
KyAgICAgICAgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBkb2VzIG5v
dCB0YWtlIGFueSBhcmd1bWVudCBub3cuCisgICAgICAgIEZpeCB0aGUgY2FsbCB0byB0aGlzIGZ1
bmN0aW9uIGFuZCBkZWxldGUgdGhlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgY29kZSAKKyAgICAg
ICAgc2luY2UgdGhlIGNvZGUgaXMgdGhlIHNhbWUgZm9yIGFsbCBjYXNlcy4KKyAKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJp
dG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkdW1wKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICBBbiBpbWFnZSBj
YW4gaGF2ZSB0d28gc2l6ZXM6IHNpemUoKSBhbmQgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigp
LiBUaGUKKyAgICAgICAgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGlzIHRoZSB0cmFuc3Bv
c2Ugb2Ygc2l6ZSgpIGlmZiB0aGUgaW1hZ2UKKyAgICAgICAgb3JpZW50YXRpb24gaGFzIHVzZXNX
aWR0aEFzSGVpZ2h0KCkgZXF1YWxzIHRvIHRydWUuIFNvIHRoZXJlIGlzIG5vIG5lZWQKKyAgICAg
ICAgZm9yIHRoZSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gYXJndW1lbnQuIEFsc28gdGhl
cmUgaXMgbm8gbmVlZCBmb3IKKyAgICAgICAgdGhlIG1lbWJlcnMgbV9pbWFnZU9yaWVudGF0aW9u
IG9yIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24uIEFsc28KKyAgICAgICAgbW92ZSBt
X2FsbG93U3Vic2FtcGxpbmcgYW5kIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgKHdoaWNoIHNo
b3VsZCBiZQorICAgICAgICBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsKSB0byBJbWFnZVNvdXJj
ZUNHIGluc3RlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToKKyAgICAgICAgbV9kZWNvZGVyIGlzIG5v
dyBhIHVuaXF1ZV9wdHIuIFRvIHJlbGVhc2UgaXQsIGFzc2lnbiBpdCB0byBudWxscHRyLgorCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCk6IEVu
c3VyZSBtX2RlY29kZXIgaXMgY3JlYXRlZC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6c2V0RGF0YSk6IENhbGwgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCgpIGJlZm9y
ZQorICAgICAgICBhY3R1YWxseSBzZXR0aW5nIHRoZSBkYXRhLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUpOiBVc2UgaW5pdGlhbGl6ZWQo
KTsKKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAg
IFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGltYWdlLgorICAgIAorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZy
YW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpvcmll
bnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFz
QWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVz
QXRJbmRleCk6CisgICAgICAgIENoZWNrIGZvciBpbml0aWFsaXplZCgpIGluc3RlYWQgb2YgY2hl
Y2tpbmcgbV9kZWNvZGVyLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
Ojppbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6
CisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2FzIG1vdmVkIHRvIHRoZSBoZWFkZXIgZmlsZS4KKwor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldEFsbG93U3Vic2FtcGxpbmcpOiBNb3Zl
ZCBmcm9tIEJpdG1hcEltYWdlLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGV0ZXJt
aW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwpOiBEZWxldGVkLgorICAgICAgICBEZWxldGUgaW5p
dGlhbGl6aW5nIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgYW5kIGRldGVybWluZU1pbmltdW1T
dWJzYW1wbGluZ0xldmVsKCkKKyAgICAgICAgc2luY2UgdGhleSBhcmUgbW92ZWQgdG8gSW1hZ2VT
b3VyY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcElt
YWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxp
bmdMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgIERlbGV0ZSBtZW1iZXJzIGFuZCBtZXRob2RzIHdo
aWNoIGFyZSBub3cgb3duZWQgYW5kIGNhbGN1bGF0ZWQgYnkgSW1hZ2VTb3VyY2UuCisgICAgICAg
IAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUpOiBSZXR1cm5zIGEgQ0cgSW1hZ2VE
ZWNvZGVyIG9iamVjdC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OkltYWdlRGVjb2Rlcik6IENyZWF0ZXMgYSBuYXRpdmUgQ0cgaW1hZ2UgZGVjb2Rlci4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6On5JbWFnZURlY29kZXIpOiBSZWxl
YXNlcyB0aGUgbmF0aXZlIENHIGltYWdlIGRlY29kZXIuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOiBNb3ZlZCBmcm9t
IEltYWdlU291cmNlLgorICAgICAgICBBIG5ldyBhcmd1bWVudCBuYW1lZCAnbWF4aW11bVN1YnNh
bXBsaW5nTGV2ZWwnIGlzIGFkZGVkIHRvIGZpbHRlciB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAg
ICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1p
bmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVF
eHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRl
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6YWxsb3dTdWJzYW1wbGluZ09m
RnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNB
bHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVz
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1h
Z2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6ICBN
b3ZlZCBmcm9tIEltYWdlU291cmNlLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6fklt
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmNhbGN1bGF0ZU1heGltdW1TdWJzYW1wbGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjptYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6b3JpZW50YXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplUmVz
cGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpnZXRI
b3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpieXRlc0RlY29kZWRUb0Rl
dGVybWluZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0
aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAg
ICBEZWxldGVkIHRoZSBjYWxscyB0byBtX2RlY29kZXIuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgCisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gb2Yg
dGhlIG5vbiBDRyBJbWFnZURlY29kZXI6OmNyZWF0ZSgpIHRvIG1hdGNoIGl0cyBDRworICAgICAg
ICBjb3VudGVycGFydC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdJbWFn
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6IERl
bGV0ZSB1bm5lZWRlZCBhcmd1bWVudC4KKwogMjAxNi0wMy0yNSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBJbXByb3ZlIENNYWtlIGJ1aWxkIHBl
cmZvcm1hbmNlIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAK
aW5kZXggMTZkZDY1Y2JiMzRlM2JmYjk5NmZiYmZhZjA2N2FjNzEzN2EwMTljYi4uMDhjNWY2OTU1
YWQ1YTkzMzFhZmRkNTI4OWVjNTBhYTQ2YjE2Y2IxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCkBAIC0yNzIsMjIgKzI3MiwxNCBAQCBMYXlvdXRTaXpl
IENhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBmbG9hdAogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIExheW91dFNp
emUoKTsKIAotICAgIExheW91dFNpemUgaW1hZ2VTaXplKG1faW1hZ2UtPnNpemUoKSk7CisgICAg
TGF5b3V0U2l6ZSBpbWFnZVNpemU7CiAKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9O
KQotICAgIGlmIChyZW5kZXJlciAmJiBpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpKSB7Ci0gICAg
ICAgIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9uKHJl
bmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCByZW5kZXJlci0+c3R5bGUo
KS5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgICAgICBpZiAob3JpZW50YXRpb25EZXNjcmlwdGlv
bi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQot
ICAgICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFnZT4o
Km1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24ob3JpZW50YXRpb25EZXNjcmlwdGlv
bikpOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKGlzPEJpdG1hcEltYWdlPigqbV9pbWFnZSkgJiYg
KHJlbmRlcmVyICYmIHJlbmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09
IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSkKKyAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCptX2lt
YWdlKSAmJiByZW5kZXJlciAmJiByZW5kZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRp
b24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAgICAgaW1hZ2VTaXplID0gTGF5
b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb24oKSk7Ci0jZW5kaWYgLy8gRU5BQkxFKENTU19JTUFHRV9PUklFTlRBVElPTikKLQot
ICAgIGVsc2UgaWYgKGlzPFNWR0ltYWdlPigqbV9pbWFnZSkgJiYgc2l6ZVR5cGUgPT0gVXNlZFNp
emUpIHsKKyAgICBlbHNlIGlmIChpczxTVkdJbWFnZT4oKm1faW1hZ2UpICYmIHNpemVUeXBlID09
IFVzZWRTaXplKQogICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKG1fc3ZnSW1hZ2VDYWNo
ZS0+aW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIpKTsKLSAgICB9CisgICAgZWxzZQorICAg
ICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKG1faW1hZ2UtPnNpemUoKSk7CiAKICAgICBpZiAo
bXVsdGlwbGllciA9PSAxLjBmKQogICAgICAgICByZXR1cm4gaW1hZ2VTaXplOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IDRhNWM2
MWE1ZDI3YmE4NTU0M2MwMDY0NWRmOGVhMjAzMzUwYTllMWMuLmE3Y2YyOGE1MDUzZDFlMjAxNTYy
ZWQ4ZGNiY2IxZTRlZmI4ZDJkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTQ3LDkgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIp
CiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwo
MCkKLSAgICAsIG1faW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BMZWZ0KQotICAgICwgbV9zaG91
bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAsIG1fY3VycmVudEZyYW1lKDAp
CiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1fcmVwZXRp
dGlvbkNvdW50U3RhdHVzKFVua25vd24pCkBAIC02Miw5ICs1OSw2IEBAIEJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGlu
ZyByZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCiAgICAgLCBtX3Byb2dyZXNzaXZlTG9h
ZENodW5rVGltZSgwKQogICAgICwgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50KDApCi0gICAg
LCBtX2FsbG93U3Vic2FtcGxpbmcodHJ1ZSkKLSNlbHNlCi0gICAgLCBtX2FsbG93U3Vic2FtcGxp
bmcoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9j
aGVja2VkRm9yU29saWRDb2xvcihmYWxzZSkKQEAgLTIzNiwyMCArMjMwLDE1IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogICAgICAgICBpbWFnZU9ic2Vy
dmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKIH0KIAotdm9pZCBC
aXRtYXBJbWFnZTo6dXBkYXRlU2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3Jp
cHRpb24pIGNvbnN0Cit2b2lkIEJpdG1hcEltYWdlOjp1cGRhdGVTaXplKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSB8fCBtX2hhdmVTaXplKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKGRlc2NyaXB0aW9uKTsKLSAgICBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlw
dGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlv
bigpKSk7Ci0KLSAgICBtX2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBtX3Nob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uKCkpOworICAgIG1fc2l6ZSA9IG1fc291cmNlLnNpemUoKTsKKyAgICBt
X3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplUmVzcGVjdGluZ09yaWVu
dGF0aW9uKCk7CiAKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsKLQotICAgIGRldGVybWluZU1pbmlt
dW1TdWJzYW1wbGluZ0xldmVsKCk7CiAgICAgZGlkRGVjb2RlUHJvcGVydGllcygpOwogfQogCkBA
IC0yNTksOSArMjQ4LDkgQEAgRmxvYXRTaXplIEJpdG1hcEltYWdlOjpzaXplKCkgY29uc3QKICAg
ICByZXR1cm4gbV9zaXplOwogfQogCi1JbnRTaXplIEJpdG1hcEltYWdlOjpzaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29u
c3QKK0ludFNpemUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25z
dAogewotICAgIHVwZGF0ZVNpemUoZGVzY3JpcHRpb24pOworICAgIHVwZGF0ZVNpemUoKTsKICAg
ICByZXR1cm4gbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwogfQogCkBAIC0zOTEsNyArMzgw
LDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCA9IHN0ZDo6bWluKG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2Fs
ZShwcmVzZW50YXRpb25TY2FsZUhpbnQpLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKTsKKyAg
ICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGlu
Z0xldmVsRm9yU2NhbGUocHJlc2VudGF0aW9uU2NhbGVIaW50KTsKIAogICAgIC8vIFdlIG1heSBo
YXZlIGNhY2hlZCBhIGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdo
aWNoIGNhc2Ugd2UgbmVlZCB0bwogICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwu
CkBAIC03MTAsMTMgKzY5OSw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3VycmVudC1mcmFtZSIsIG1fY3Vy
cmVudEZyYW1lKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGFsbG93U3Vic2FtcGxpbmcoKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbGxvdy1zdWJzYW1wbGluZyIsIGFsbG93U3Vic2FtcGxp
bmcoKSk7CiAgICAgaWYgKG1faXNTb2xpZENvbG9yKQogICAgICAgICB0cy5kdW1wUHJvcGVydHko
InNvbGlkLWNvbG9yIiwgbV9pc1NvbGlkQ29sb3IpOwotICAgIAotICAgIGlmIChtX2ltYWdlT3Jp
ZW50YXRpb24gIT0gT3JpZ2luVG9wTGVmdCkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcmll
bnRhdGlvbiIsIG1faW1hZ2VPcmllbnRhdGlvbik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDAwZmJhMzNiYTQxOWMxMjQx
NTQxNjUzMzAxZTI5NWNlZjg2ZDE3NzkuLjUxMTNkNWQ1Mjc3ODE1NGVhZmNmOWEzNDI3YjUyZWIx
NWNmZTk2OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuaApAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZsb2F0U2l6ZSBk
dWUgdG8gb3ZlcnJpZGUuCiAgICAgRmxvYXRTaXplIHNpemUoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OworICAgIEludFNp
emUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRIb3RT
cG90KEludFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTE3OSwxNiArMTc5LDE0IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGNhbkFuaW1hdGUoKTsKIAotICAgIGJvb2wgYWxsb3dTdWJz
YW1wbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTdWJzYW1wbGluZzsgfQotICAgIHZvaWQg
c2V0QWxsb3dTdWJzYW1wbGluZyhib29sIGFsbG93U3Vic2FtcGxpbmcpIHsgbV9hbGxvd1N1YnNh
bXBsaW5nID0gYWxsb3dTdWJzYW1wbGluZzsgfQorICAgIHZvaWQgc2V0QWxsb3dTdWJzYW1wbGlu
Zyhib29sIGFsbG93U3Vic2FtcGxpbmcpIHsgbV9zb3VyY2Uuc2V0QWxsb3dTdWJzYW1wbGluZyhh
bGxvd1N1YnNhbXBsaW5nKTsgfQogCiAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudEZyYW1lOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGJvb2wgaXNCaXRt
YXBJbWFnZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgdXBk
YXRlU2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24oKSkgY29uc3Q7Ci0gICAgdm9pZCBkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdM
ZXZlbCgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6
CiAgICAgZW51bSBSZXBldGl0aW9uQ291bnRTdGF0dXMgewpAQCAtMjk1LDExICsyOTMsNiBAQCBw
cml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXplIHRvIHVzZSBm
b3IgdGhlIG92ZXJhbGwgaW1hZ2UgKHdpbGwganVzdCBiZSB0aGUgc2l6ZSBvZiB0aGUgZmlyc3Qg
aW1hZ2UpLgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb247
CiAKLSAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZl
bDsKLQotICAgIG11dGFibGUgdW5zaWduZWQgbV9pbWFnZU9yaWVudGF0aW9uIDogNDsgLy8gSW1h
Z2VPcmllbnRhdGlvbkVudW0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1fc2hvdWxkUmVzcGVjdElt
YWdlT3JpZW50YXRpb24gOiAxOyAvLyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0KLQogICAg
IHNpemVfdCBtX2N1cnJlbnRGcmFtZTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1l
IG9mIGFuaW1hdGlvbi4KICAgICBWZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4g
YXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byBy
ZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIApAQCAtMzI3LDggKzMyMCw2IEBA
IHByaXZhdGU6CiAgICAgZG91YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lOwogICAgIHVp
bnQxNl90IG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudDsKICNlbmRpZgotCi0gICAgYm9vbCBt
X2FsbG93U3Vic2FtcGxpbmcgOiAxOyAvLyBXaGV0aGVyIHdlIHNob3VsZCBhdHRlbXB0IHN1YnNh
bXBsaW5nIGlmIHRoaXMgaW1hZ2UgaXMgdmVyeSBsYXJnZS4KICAgICBib29sIG1faXNTb2xpZENv
bG9yIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGEgMXgxIHNvbGlkIGltYWdlLgogICAg
IGJvb2wgbV9jaGVja2VkRm9yU29saWRDb2xvciA6IDE7IC8vIFdoZXRoZXIgd2UndmUgY2hlY2tl
ZCB0aGUgZnJhbWUgZm9yIHNvbGlkIGNvbG9yLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggYWUzMWM5ODM1MjFkNTAwODIyNWMx
ZmMzNDI5YzJjNDBhMDM3ZTQ4OC4uNWQ1N2Q0OWM2ZjUxZjJlZDIwZjJkN2M2YWUwYzE1NTEyMTdh
ZTVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcApAQCAtNDMsOCArNDMsNyBAQCB1bnNpZ25lZCBJbWFnZVNvdXJjZTo6c19tYXhQaXhl
bHNQZXJEZWNvZGVkSW1hZ2UgPSAxMDI0ICogMTAyNDsKICNlbmRpZgogCiBJbWFnZVNvdXJjZTo6
SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNv
dXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pCi0gICAgOiBtX2RlY29kZXIoMCkKLSAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24p
CisgICAgOiBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogICAgICwgbV9nYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKIH0KQEAgLTYyLDI5
ICs2MSwzOSBAQCB2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVf
dCBjbGVhckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBkZWxldGUgbV9kZWNvZGVyOwotICAgIG1fZGVjb2RlciA9IDA7CisgICAgaWYgKG1f
ZGVjb2RlcikKKyAgICAgICAgbV9kZWNvZGVyID0gbnVsbHB0cjsKKwogICAgIGlmIChkYXRhKQog
ICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKLWJvb2wgSW1hZ2VT
b3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyOwotfQot
Ci12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCit2b2lkIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKFNo
YXJlZEJ1ZmZlciogZGF0YSkKIHsKKyAgICBpZiAoaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAogICAgIC8vIE1ha2UgdGhlIGRlY29kZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVz
LgogICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlh
dGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgogICAgIC8v
IElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1h
Z2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCi0gICAgaWYg
KCFtX2RlY29kZXIpIHsKLSAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1h
Z2VEZWNvZGVyUHRyPihOYXRpdmVJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9w
dGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworICAgIG1fZGVjb2RlciA9IElt
YWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQot
ICAgICAgICBpZiAobV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQotICAg
ICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVk
SW1hZ2UpOworICAgIGlmIChtX2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2Up
CisgICAgICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2Rl
ZEltYWdlKTsKICNlbmRpZgorfQorCit2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFkYXRhKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChkYXRhKTsKKyAg
ICAKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV9kZWNvZGVyKQpAQCAtMTA4
LDI5ICsxMTcsMzMgQEAgYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVB
dEluZGV4KHNpemVfdCkgY29uc3QKIAogYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxl
KCkKIHsKLSAgICByZXR1cm4gbV9kZWNvZGVyICYmIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxl
KCk7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFi
bGUoKTsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7
CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7CiB9CiAKLUludFNpemUgSW1hZ2VT
b3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIElt
YWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICByZXR1cm4gZnJhbWVT
aXplQXRJbmRleCgwLCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7Cit9CiAKLSAgICBJbnRT
aXplIHNpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOwotICAgIGlmICgo
ZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbikgJiYgbV9kZWNvZGVyLT5vcmllbnRhdGlvbigpLnVzZXNXaWR0aEFzSGVpZ2h0KCkp
Ci0gICAgICAgIHJldHVybiBJbnRTaXplKHNpemUuaGVpZ2h0KCksIHNpemUud2lkdGgoKSk7CitJ
bnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBzaXplOworICAgIEludFNpemUgc2l6ZSA9IG1fZGVj
b2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCk7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiA9IG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKTsKKyAgICAKKyAgICByZXR1cm4gc2hv
dWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gJiYg
b3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUoKSA6
IHNpemU7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNw
b3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+aG90U3BvdCho
b3RTcG90KSA6IGZhbHNlOworICAgIHJldHVybiBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+
aG90U3BvdChob3RTcG90KTsKIH0KIAogc2l6ZV90IEltYWdlU291cmNlOjpieXRlc0RlY29kZWRU
b0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdApAQCAtMTQwLDIxICsxNTMsMTcgQEAgc2l6ZV90
IEltYWdlU291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAog
CiBpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCiB7Ci0gICAgcmV0dXJuIG1fZGVj
b2RlciA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTm9uZTsKKyAg
ICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBj
QW5pbWF0aW9uTm9uZTsKIH0KIAogc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAw
OworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAw
OwogfQogCiBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsKQogewotICAgIGlmICghbV9kZWNvZGVy
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1f
ZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBi
dWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgaWYgKCFpbml0
aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFplcm8taGVpZ2h0
IGltYWdlcyBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIHNvbWUgcG9ydHMuICBJZiB3ZSBoYXZlIGFu
CkBAIC0xNjIsNiArMTcxLDEwIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVG
cmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2CiAgICAgaWYgKHNp
emUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgSW1hZ2VGcmFt
ZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlm
ICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAvLyBSZXR1cm4gdGhlIGJ1ZmZlciBjb250
ZW50cyBhcyBhIG5hdGl2ZSBpbWFnZS4gIEZvciBzb21lIHBvcnRzLCB0aGUgZGF0YQogICAgIC8v
IGlzIGFscmVhZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhpcyBqdXN0IGluY3JlbWVu
dHMgaXRzIHJlZmNvdW50LgogICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsK
QEAgLTE2OSw3ICsxODIsNyBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogCiBmbG9hdCBJbWFn
ZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICgh
bV9kZWNvZGVyKQorICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChp
bmRleCk7CkBAIC0xODgsMTkgKzIwMSwxNyBAQCBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJh
dGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogCiBJbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNl
OjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdAogewotICAgIHJldHVybiBtX2RlY29k
ZXIgPyBtX2RlY29kZXItPm9yaWVudGF0aW9uKCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKSA6IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uOwogfQogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0Fs
cGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4
KGluZGV4KTsKKyAgICByZXR1cm4gIWluaXRpYWxpemVkKCkgfHwgbV9kZWNvZGVyLT5mcmFtZUhh
c0FscGhhQXRJbmRleChpbmRleCk7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghbV9kZWNvZGVyKQorICAgIGlm
ICghaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW1hZ2VGcmFt
ZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwpAQCAtMjA5
LDkgKzIyMCw3IEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQogCiB1bnNpZ25lZCBJbWFnZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdAogewotICAgIGlmICghbV9kZWNvZGVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUJ5dGVzQXRJ
bmRleChpbmRleCk7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1l
Qnl0ZXNBdEluZGV4KGluZGV4KSA6IDA7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IGMxMWY3YmU0ODI5ZTRlNmJjNDAxNzg5
NjNjMWQ1MWExODY2MGEwYTAuLmRkOGYyZDY3OTY4OWFlODVkNTVmZTEwNjIwZjdlOWVkYWEzMzI5
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aApAQCAtNDUsMTkgKzQ1LDcgQEAgY2xhc3MgSW1hZ2VPcmllbnRhdGlvbjsKIGNsYXNzIEludFBv
aW50OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotI2lmIFVTRShDRykK
LXR5cGVkZWYgQ0dJbWFnZVNvdXJjZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZWxzZQog
Y2xhc3MgSW1hZ2VEZWNvZGVyOwotdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVj
b2RlclB0cjsKLSNlbmRpZgotCi0jaWYgVVNFKENHKQotI2RlZmluZSBOYXRpdmVJbWFnZURlY29k
ZXIgSW1hZ2VEZWNvZGVyCi0jZWxzZQotdHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VE
ZWNvZGVyOwotI2VuZGlmCiAKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25p
emVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRp
b24gc3lzdGVtIGFuZCB0aGUgY29uc3RhbnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMg
aW4gbWluZC4KQEAgLTEyMiwxOSArMTEwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgIFNo
YXJlZEJ1ZmZlciogZGF0YSA9IE5VTEwsCiAgICAgICAgICAgICAgICBib29sIGFsbERhdGFSZWNl
aXZlZCA9IGZhbHNlKTsKIAotICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdDsKKyAgICBib29s
IGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9CiAKICAgICB2
b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAg
ICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CiAKICAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCkgY29uc3Q7CiAgICAgYm9vbCBhbGxv
d1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICB2b2lkIHNldEFs
bG93U3Vic2FtcGxpbmcoYm9vbCBhbGxvd1N1YnNhbXBsaW5nKSB7IG1fYWxsb3dTdWJzYW1wbGlu
ZyA9IGFsbG93U3Vic2FtcGxpbmc7IH0KKyAgICBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJz
YW1wbGluZ0xldmVsKCkgY29uc3Q7CiAKICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwotICAg
IC8vIEFsd2F5cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBsaW5nLgotICAgIEludFNp
emUgc2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVz
Y3JpcHRpb24oKSkgY29uc3Q7Ci0gICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1YnNhbXBsZWQg
ZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IDAsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbigpKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBJbnRT
aXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1l
U2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7CiAKICAg
ICBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsKIApAQCAtMTYzLDcgKzE1MiwxNiBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIg
bV9kZWNvZGVyOworICAgIHZvaWQgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChTaGFyZWRCdWZmZXIq
KTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIGNhbGN1bGF0ZU1heGltdW1TdWJzYW1wbGluZ0xldmVs
KCkgY29uc3Q7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNv
ZGVyOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fYWxsb3dTdWJzYW1wbGlu
ZyB7IHRydWUgfTsKKyNlbHNlCisgICAgYm9vbCBtX2FsbG93U3Vic2FtcGxpbmcgeyBmYWxzZSB9
OworI2VuZGlmCiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb247
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRt
YXBJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCmluZGV4IGJkYTBkYzI4MWM5MzdkY2RmMmRiMTVhYzcxMjhh
MjM5NGQ3NTc0YWYuLjFmNGVlMjA3NjZjMTVkY2Q3ZTBhZTZjYmMwZDRiZDFjNzM0NTE2MDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCkBAIC00MSw3ICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIG5h
dGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVy
KQogICAgICwgbV9zaXplKGNhaXJvU3VyZmFjZVNpemUobmF0aXZlSW1hZ2UuZ2V0KCkpKQotICAg
ICwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgwKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkK
ICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0
aW9uQ291bnRTdGF0dXMoVW5rbm93bikKQEAgLTEyMiwxMSArMTIxLDYgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
LCBjb25zdCBGbG8KICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQog
Ci12b2lkIEJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNv
bnN0Ci17Ci0gICAgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci19Ci0KIHZvaWQgQml0
bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiB7CiAgICAgbV9pc1NvbGlkQ29sb3IgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Jp
dG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0
bWFwSW1hZ2VDRy5jcHAKaW5kZXggMzJiZDBiNWNiNTUzZmNkZWRkYmFhZDJmOTYzNjEzMDFmNWQ0
NmVjZC4uZWIzZmU0MmVlM2JlMTI2NDQ2MjYwYjI0YTlhMTQ4M2E2N2M2ODM3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5j
cHAKQEAgLTcwLDkgKzcwLDYgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRh
ZGF0YSkKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFJldGFpblB0cjxDR0ltYWdlUmVmPiYm
IGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQot
ICAgICwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgwKQotICAgICwgbV9pbWFnZU9yaWVudGF0
aW9uKE9yaWdpblRvcExlZnQpCi0gICAgLCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KGZhbHNlKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50
KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikK
QEAgLTEwNSwyOCArMTAyLDYgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFJldGFpblB0cjxD
R0ltYWdlUmVmPiYmIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICBjaGVja0Zv
clNvbGlkQ29sb3IoKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1
YnNhbXBsaW5nTGV2ZWwoKSBjb25zdAotewotICAgIGlmICghbV9hbGxvd1N1YnNhbXBsaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc291cmNlLmFsbG93U3Vic2FtcGxpbmdPZkZy
YW1lQXRJbmRleCgwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVmFsdWVzIGNob3NlbiB0
byBiZSBhcHByb3ByaWF0ZSBmb3IgaU9TLgotICAgIGNvbnN0IGludCBjTWF4aW11bUltYWdlQXJl
YUJlZm9yZVN1YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OwotICAgIGNvbnN0IFN1YnNhbXBs
aW5nTGV2ZWwgbWF4U3Vic2FtcGxpbmdMZXZlbCA9IDM7Ci0KLSAgICBTdWJzYW1wbGluZ0xldmVs
IGN1cnJlbnRMZXZlbCA9IDA7Ci0gICAgZm9yICggOyBjdXJyZW50TGV2ZWwgPD0gbWF4U3Vic2Ft
cGxpbmdMZXZlbDsgKytjdXJyZW50TGV2ZWwpIHsKLSAgICAgICAgSW50U2l6ZSBmcmFtZVNpemUg
PSBtX3NvdXJjZS5mcmFtZVNpemVBdEluZGV4KDAsIGN1cnJlbnRMZXZlbCk7Ci0gICAgICAgIGlm
IChmcmFtZVNpemUuYXJlYSgpIDwgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykK
LSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2
ZWwgPSBjdXJyZW50TGV2ZWw7Ci19Ci0KIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRD
b2xvcigpCiB7CiAgICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCmlu
ZGV4IDUwMTVkZDE1YWJmYzgyNWRjZWIwMzIwZjEyMDI5Y2JhNTEyMTgyNzkuLjg4NzQyZWRlYTVh
MjQzNGM3MzNiMDQ0ZWE5YWViYmVjYzUxMzM4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCkBAIC01MSw2MSArNTEs
NTMgQEAgY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgPSBD
RlNUUigia0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGUKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgCitjbGFzcyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIH5JbWFnZURlY29k
ZXIoKTsKIAotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNs
YW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7Ci1jb25zdCBDRlN0
cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSA9IENGU1RSKCJEZWxh
eVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9v
cENvdW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VEZWNvZGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZURlY29kZXI+KG5ldyBJbWFnZURlY29kZXIpOworICAgIH0KIAotY29uc3QgQ0ZT
dHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFn
ZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7Ci1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNv
dXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOwor
ICAgIHN0YXRpYyBzaXplX3QgYnl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCk7Cisg
ICAgc3RhdGljIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0
IHNjYWxlLCBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKTsKIAotI2lm
ICFQTEFURk9STShDT0NPQSkKLXNpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24o
dm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQot
ewotICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVm
ZmVyKj4oaW5mbyk7Ci0gICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXItPnNpemUo
KTsKLSAgICBpZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1NpemVBdmFp
bGFibGUoKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBzaXplX3QgZnJh
bWVDb3VudCgpIGNvbnN0OworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAgICBi
b29sIGhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0OwogCi0gICAgY29uc3QgY2hhciog
c291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKLSAgICBzaXplX3QgYW1v
dW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0aW9uKTsKLSAg
ICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7Ci0gICAgcmV0dXJuIGFtb3VudDsKLX0K
KyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBj
b25zdDsKKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAg
ICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OwogCi12
b2lkIHNoYXJlZEJ1ZmZlclJlbGVhc2Uodm9pZCogaW5mbykKLXsKLSAgICBTaGFyZWRCdWZmZXIq
IHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAgIHNo
YXJlZEJ1ZmZlci0+ZGVyZWYoKTsKLX0KLSNlbmRpZgorICAgIGZsb2F0IGZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXpl
X3QpIGNvbnN0OworICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVf
dCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gMCkgY29uc3Q7CiAKLUltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNv
dXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikKLSAgICA6IG1fZGVjb2RlcigwKQotewotICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBhbmQg
R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCi19CisgICAgTmF0aXZlSW1h
Z2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKSBj
b25zdDsKIAotSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCi17Ci0gICAgY2xlYXIodHJ1ZSk7
Ci19CisgICAgdm9pZCBzZXREYXRhKENGRGF0YVJlZiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwor
ICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAK
LXZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbEZyYW1lcywgc2l6ZV90LCBT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIC8vIFJlY2Vu
dCB2ZXJzaW9ucyBvZiBJbWFnZUlPIGRpc2NhcmQgcHJldmlvdXNseSBkZWNvZGVkIGltYWdlIGZy
YW1lcyBpZiB0aGUgY2xpZW50Ci0gICAgLy8gYXBwbGljYXRpb24gbm8gbG9uZ2VyIGhvbGRzIHJl
ZmVyZW5jZXMgdG8gdGhlbSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHRocm93IGF3YXkKLSAgICAv
LyB0aGUgZGVjb2RlciB1bmxlc3Mgd2UncmUgZXhwbGljaXRseSBhc2tlZCB0byBkZXN0cm95IGFs
bCBvZiB0aGUgZnJhbWVzLgotICAgIGlmICghZGVzdHJveUFsbEZyYW1lcykKLSAgICAgICAgcmV0
dXJuOworcHJvdGVjdGVkOgorICAgIEltYWdlRGVjb2RlcigpOworICAgIAorICAgIG11dGFibGUg
SW50U2l6ZSBtX3NpemU7CisgICAgQ0dJbWFnZVNvdXJjZVJlZiBtX25hdGl2ZURlY29kZXI7Cit9
OwogCi0gICAgaWYgKG1fZGVjb2RlcikgewotICAgICAgICBDRlJlbGVhc2UobV9kZWNvZGVyKTsK
LSAgICAgICAgbV9kZWNvZGVyID0gMDsKLSAgICB9Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIHNl
dERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLX0KK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNv
cmVDR0ltYWdlUHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lID0gQ0ZTVFIoIlVuY2xhbXBl
ZERlbGF5VGltZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQ
TkdEZWxheVRpbWUgPSBDRlNUUigiRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmluZ1JlZiBXZWJD
b3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RSKCJMb29wQ291bnQiKTsKKwor
Y29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0IzMiA9IENGU1RS
KCJrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7Citjb25zdCBDRlN0cmluZ1JlZiBr
Q0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNraXBNZXRh
ZGF0YSIpOwogCiBzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY3JlYXRlSW1hZ2VT
b3VyY2VPcHRpb25zKFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKIHsKQEAgLTEz
NSw2NCArMTI3LDYgQEAgc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291
cmNlT3B0aW9ucyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW4KICAgICByZXR1cm4gb3B0aW9u
czsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2RlY29kZXI7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNy
ZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUg
U2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFy
ZWRCdWZmZXIncyBrbm93bGVkZ2UuICBXZSB1c2UgU2hhcmVkQnVmZmVyJ3MgYWJpbGl0eQotICAg
IC8vIHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1
cmluZyB0aGF0IEltYWdlSU8gaXMgcmVhbGx5IGxvb2tpbmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4K
LSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX2RlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0
YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKLSAgICBpZiAoIW1fZGVjb2RlcikK
LSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwot
ICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhlIFNoYXJlZEJ1ZmZlci4K
LSAgICBkYXRhLT5yZWYoKTsKLSAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBj
YWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hhcmVk
QnVmZmVyCi0gICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2NrIGRvd24gdGhlIGJ5
dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwgd2hpY2gKLSAgICAv
LyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBvaW50ZXIgY2FsbGJhY2su
Ci0gICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJDYWxsYmFja3MgPSB7
IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgc2hhcmVkQnVmZmVyUmVs
ZWFzZSB9OwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBkYXRhLT5zaXplKCksICZw
cm92aWRlckNhbGxiYWNrcykpOwotICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhUHJvdmlkZXIo
bV9kZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYK
LX0KLQotU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBDRlN0cmlu
Z1JlZiBpbWFnZVNvdXJjZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX2RlY29kZXIpOwot
ICAgIHJldHVybiBXZWJDb3JlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JJbWFnZVNvdXJjZVR5cGUo
aW1hZ2VTb3VyY2VUeXBlKTsKLX0KLQotU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6c3Vi
c2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZXJl
IGFyZSBmb3VyIHN1YnNhbXBsaW5nIGxldmVsczogMCA9IDF4LCAxID0gMC41eCwgMiA9IDAuMjV4
LCAzID0gMC4xMjV4LgotICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IHN0ZDo6bWF4PGZsb2F0Pigw
LjEyNSwgc3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxlKSk7Ci0gICAgaW50IHJlc3VsdCA9IGNlaWxm
KGxvZzJmKDEgLyBjbGFtcGVkU2NhbGUpKTsKLSAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1
bHQgPD0gMyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aXNT
aXplQXZhaWxhYmxlKCkKLXsKLSAgICAvLyBSYWduYXJvcyB5ZWxsczogVE9PIFNPT04hIFlvdSBo
YXZlIGF3YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKLSAgICBpZiAoQ0dJbWFnZVNvdXJj
ZUdldFN0YXR1cyhtX2RlY29kZXIpIDwga0NHSW1hZ2VTdGF0dXNJbmNvbXBsZXRlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQ
cm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1f
ZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWltYWdl
MFByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBDRkRpY3Rp
b25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5
UGl4ZWxXaWR0aCkKLSAgICAgICAgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJv
cGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKLX0KLQogc3RhdGlj
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlS
ZWYgaW1hZ2VQcm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChpbWFnZVByb3BlcnRpZXMpOwpAQCAt
MjA1LDg3ICsxMzksNDcgQEAgc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9t
UHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWUKICAgICByZXR1cm4gSW1h
Z2VPcmllbnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOwogfQogCi1ib29sIEltYWdl
U291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdAorI2lm
ICFQTEFURk9STShDT0NPQSkKK3NpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24o
dm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQog
ewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENH
SW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBpbWFnZVNvdXJj
ZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nh
c3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgp
LCBrQ0dJbWFnZVByb3BlcnR5SkZJRkRpY3Rpb25hcnkpKTsKLSAgICBpZiAoamZpZlByb3BlcnRp
ZXMpIHsKLSAgICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENG
Qm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdl
UHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOwotICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7
Ci0gICAgICAgICAgICBib29sIGlzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1By
b2dDRkJvb2wpOwotICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVt
LzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBE
ZWNvZGluZyBwcm9ncmVzc2l2ZQotICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZl
cnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNh
bXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMKLSAgICAgICAgICAgIC8vIHdpbGwgY2F1c2Ug
dGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNv
ZGVkLgotICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUg
aXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKLSAgICAgICAgICAgIHJldHVybiAh
aXNQcm9ncmVzc2l2ZTsKLSAgICAgICAgfQotICAgIH0KKyAgICBTaGFyZWRCdWZmZXIqIHNoYXJl
ZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNpemVfdCBz
b3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7CisgICAgaWYgKHBvc2l0aW9uID49IHNv
dXJjZVNpemUpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgY29u
c3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKKyAgICBz
aXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0
aW9uKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJuIGFt
b3VudDsKIH0KIAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3Qg
aW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAordm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNl
KHZvaWQqIGluZm8pCiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGll
cyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIs
IGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKLQot
ICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIGlu
dCB3aWR0aCA9IDA7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0gICAgQ0ZOdW1iZXJSZWYgbnVtID0g
KENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0lt
YWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKLSAgICBpZiAobnVtKQotICAgICAgICBDRk51bWJlckdl
dFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKLSAgICBudW0gPSAoQ0ZOdW1i
ZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9w
ZXJ0eVBpeGVsSGVpZ2h0KTsKLSAgICBpZiAobnVtKQotICAgICAgICBDRk51bWJlckdldFZhbHVl
KG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7Ci0KLSAgICBpZiAoKGRlc2NyaXB0aW9u
LnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYm
IG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSkudXNlc1dpZHRoQXNI
ZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoaGVpZ2h0LCB3aWR0aCk7Ci0KLSAgICBy
ZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1
ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNoYXJlZEJ1ZmZl
ci0+ZGVyZWYoKTsKIH0KLQotSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3JpZW50YXRp
b25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyNlbmRpZgorICAgIAorSW1hZ2VEZWNvZGVy
OjpJbWFnZURlY29kZXIoKQorICAgIDogbV9uYXRpdmVEZWNvZGVyKENHSW1hZ2VTb3VyY2VDcmVh
dGVJbmNyZW1lbnRhbCgwKSkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9w
ZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVj
b2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9w
ZXJ0aWVzKQotICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0KLSAgICBy
ZXR1cm4gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKTsKIH0KLQot
SW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24pIGNvbnN0CisgICAgCitJbWFnZURlY29kZXI6On5JbWFnZURlY29kZXIoKQogewot
ICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDAsIGRlc2NyaXB0aW9uKTsKKyAgICBDRlJl
bGVhc2UobV9uYXRpdmVEZWNvZGVyKTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6Z2V0SG90U3Bv
dChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VEZWNvZGVy
OjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwg
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRl
eChtX2RlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFw
cm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgeCA9IC0xLCB5ID0g
LTE7Ci0gICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKHByb3BlcnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WCIpKTsKLSAgICBpZiAoIW51bSB8
fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZh
bHVlKHByb3BlcnRpZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WSIpKTsKLSAgICBpZiAoIW51bSB8
fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ5KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHggPCAwIHx8IHkgPCAwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBob3RTcG90ID0gSW50UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgLy8gVGhlcmUgYXJlIGZvdXIgc3Vic2FtcGxpbmcgbGV2ZWxzOiAwID0gMXgsIDEgPSAw
LjV4LCAyID0gMC4yNXgsIDMgPSAwLjEyNXguCisgICAgZmxvYXQgY2xhbXBlZFNjYWxlID0gc3Rk
OjptYXg8ZmxvYXQ+KDAuMTI1LCBzdGQ6Om1pbjxmbG9hdD4oMSwgc2NhbGUpKTsKKyAgICBTdWJz
YW1wbGluZ0xldmVsIHJlc3VsdCA9IGNlaWxmKGxvZzJmKDEgLyBjbGFtcGVkU2NhbGUpKTsKKyAg
ICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1bHQgPD0gMyk7CisgICAgcmV0dXJuIHN0ZDo6bWlu
KHJlc3VsdCwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCi1zaXplX3QgSW1hZ2VTb3Vy
Y2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CitzaXplX3QgSW1h
Z2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKQogewogICAgIC8v
IE1lYXN1cmVkIGJ5IHRyYWNpbmcgbWFsbG9jL2NhbGxvYyBjYWxscyBvbiBNYWMgT1MgMTAuNi42
LCB4ODZfNjQuCiAgICAgLy8gQSBub24temVybyB2YWx1ZSBlbnN1cmVzIGNhY2hlZCBpbWFnZXMg
d2l0aCBubyBkZWNvZGVkIGZyYW1lcyBzdGlsbCBlbnRlcgpAQCAtMjk2LDEyICsxOTAsNDEgQEAg
c2l6ZV90IEltYWdlU291cmNlOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKSBj
b25zdAogICAgIHJldHVybiAxMzA4ODsKIH0KICAgICAKLWludCBJbWFnZVNvdXJjZTo6cmVwZXRp
dGlvbkNvdW50KCkKK1N0cmluZyBJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29u
c3QKIHsKLSAgICBpZiAoIWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiBjQW5pbWF0aW9u
TG9vcE9uY2U7CisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJj
ZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVk
RXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Cit9CiAKLSAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291
cmNlQ29weVByb3BlcnRpZXMobV9kZWNvZGVyLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkp
OworYm9vbCBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Cit7CisgICAgLy8g
UmFnbmFyb3MgeWVsbHM6IFRPTyBTT09OISBZb3UgaGF2ZSBhd2FrZW5lZCBtZSBUT08gU09PTiwg
RXhlY3V0dXMhCisgICAgaWYgKENHSW1hZ2VTb3VyY2VHZXRTdGF0dXMobV9uYXRpdmVEZWNvZGVy
KSA8IGtDR0ltYWdlU3RhdHVzSW5jb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0Yo
Q0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIDAsIGlt
YWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNL
ZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCisg
ICAgICAgICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCks
IGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVy
OjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9z
aXplID0gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitz
aXplX3QgSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJ
bWFnZVNvdXJjZUdldENvdW50KG1fbmF0aXZlRGVjb2Rlcik7Cit9CisKK2ludCBJbWFnZURlY29k
ZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1f
bmF0aXZlRGVjb2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKICAgICBpZiAoIXBy
b3BlcnRpZXMpCiAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CiAKQEAgLTMzNSw2
MSArMjU4LDY3IEBAIGludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKICAgICByZXR1
cm4gY0FuaW1hdGlvbk5vbmU7CiB9CiAKLXNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgp
IGNvbnN0Citib29sIEltYWdlRGVjb2Rlcjo6aG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9kZWNvZGVyID8gQ0dJbWFnZVNvdXJjZUdldENvdW50KG1fZGVj
b2RlcikgOiAwOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVy
LCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IHggPSAtMSwgeSA9IC0xOworICAgIENG
TnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0
aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFgiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0
aWVzLmdldCgpLCBDRlNUUigiaG90c3BvdFkiKSk7CisgICAgaWYgKCFudW0gfHwgIUNGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaG90U3BvdCA9IEludFBvaW50KHgsIHkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1SZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQorSW50U2l6ZSBJ
bWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbml0aWFsaXplZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChtX2RlY29kZXIsIGlu
ZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291
cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgsIGltYWdlU291
cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKS5nZXQoKSkpOwogCi0jaWYgUExBVEZPUk0oSU9T
KQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MzcxMTk4PiAtIENvcmVHcmFwaGljcyBjaGFuZ2Vk
IHRoZSBkZWZhdWx0IGNhY2hpbmcgYmVoYXZpb3VyIGluIGlPUyA0LjAgdG8ga0NHSW1hZ2VDYWNo
aW5nVHJhbnNpZW50Ci0gICAgLy8gd2hpY2ggY2F1c2VkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lv
biBmb3IgdXMgc2luY2UgdGhlIGltYWdlcyBoYWQgdG8gYmUgcmVzYW1wbGVkL3JlY3JlYXRlZCBl
dmVyeSB0aW1lIHdlIGNhbGxlZAotICAgIC8vIENHQ29udGV4dERyYXdJbWFnZS4gV2Ugbm93IHRl
bGwgQ0cgdG8gY2FjaGUgdGhlIGRyYXduIGltYWdlcy4gU2VlIGFsc28gPHJkYXI6Ly9wcm9ibGVt
LzE0MzY2NzU1PiAtCi0gICAgLy8gQ29yZUdyYXBoaWNzIG5lZWRzIHRvIHVuLWRlcHJlY2F0ZSBr
Q0dJbWFnZUNhY2hpbmdUZW1wb3Jhcnkgc2luY2UgaXQncyBzdGlsbCBub3QgdGhlIGRlZmF1bHQu
Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMi
Ci0jZW5kaWYKLSAgICBDR0ltYWdlU2V0Q2FjaGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFn
ZUNhY2hpbmdUZW1wb3JhcnkpOwotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHBvcAotI2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgIGlmICgh
cHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIENGU3RyaW5nUmVmIGltYWdl
VVRJID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKLSAgICBzdGF0aWMgY29uc3Qg
Q0ZTdHJpbmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdlIik7CisgICAg
aW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICBDRk51bWJlclJlZiBudW0g
PSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NH
SW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOworICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVy
R2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwogCi0gICAgaWYgKCFpbWFn
ZVVUSSkKLSAgICAgICAgcmV0dXJuIGltYWdlOworICAgIG51bSA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxI
ZWlnaHQpOworICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZO
dW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKIAotICAgIGlmICghQ0ZFcXVhbChpbWFnZVVUSSwgeGJt
VVRJKSkKLSAgICAgICAgcmV0dXJuIGltYWdlOwotICAgIAotICAgIC8vIElmIGl0IGlzIGFuIHhi
bSBpbWFnZSwgbWFzayBvdXQgYWxsIHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFu
c3BhcmVudC4KLSAgICBjb25zdCBDR0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUs
ICAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJ
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgp
LCBtYXNraW5nQ29sb3JzKSk7Ci0gICAgcmV0dXJuIG1hc2tlZEltYWdlID8gbWFza2VkSW1hZ2Ug
OiBpbWFnZTsKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAotYm9vbCBJ
bWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCitib29sIElt
YWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGZyYW1lQ291bnQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRT
dGF0dXNBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgpID09IGtDR0ltYWdlU3RhdHVzQ29tcGxldGU7
CisgICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRTdGF0dXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rl
ciwgaW5kZXgpID09IGtDR0ltYWdlU3RhdHVzQ29tcGxldGU7CiB9CiAKLWZsb2F0IEltYWdlU291
cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCitJbWFnZU9yaWVudGF0aW9u
IEltYWdlRGVjb2Rlcjo6b3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKIHsK
LSAgICBpZiAoIWluaXRpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiAwOworICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5
UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRp
b25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBEZWZh
dWx0SW1hZ2VPcmllbnRhdGlvbjsKKworICAgIHJldHVybiBvcmllbnRhdGlvbkZyb21Qcm9wZXJ0
aWVzKHByb3BlcnRpZXMuZ2V0KCkpOworfQogCitmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKICAgICBmbG9hdCBkdXJhdGlvbiA9
IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0Yo
Q0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFn
ZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgo
bV9uYXRpdmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKICAg
ICBpZiAocHJvcGVydGllcykgewogICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZ2lmUHJvcGVydGll
cyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOwogICAgICAgICBpZiAoZ2lmUHJvcGVy
dGllcykgewpAQCAtNDIwLDE1ICszNDksMzQgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKICAgICByZXR1cm4gZHVyYXRpb247CiB9CiAKLWJv
b2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK2Jvb2wg
SW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25z
dAogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEZJWE1F
OiB3aHkgZG9lc24ndCB0aGlzIHJldHVybiB0cnVlPworICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0
SW5kZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwor
ICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJ
RkRpY3Rpb25hcnkpKTsKKyAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZCb29s
ZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVz
c2l2ZSkpOworICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7CisgICAgICAgICAgICBib29sIGlz
UHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOworICAgICAgICAg
ICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5k
ZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQor
ICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5v
dy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFn
ZXMuIFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJn
ZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgorICAgICAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJv
YmxlbS81MTkxNDE4PikKKyAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQogCitib29sIEltYWdlRGVjb2Rlcjo6
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorewogICAgIGlmICghZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
Q0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsK
KyAgICBDRlN0cmluZ1JlZiBpbWFnZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2
ZURlY29kZXIpOwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGlzIG5vIGltYWdlIHR5
cGUgb3IgdGhlIGltYWdlIHR5cGUgaXMgSlBFRywgYmVjYXVzZQogICAgIC8vIEpQRUcgZG9lcyBu
b3Qgc3VwcG9ydCBhbHBoYSB0cmFuc3BhcmVuY3kuCkBAIC00NDEsMTAgKzM4OSwyMzUgQEAgYm9v
bCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIHJl
dHVybiB0cnVlOwogfQogCit1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4
KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAor
eworICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2Ft
cGxpbmdMZXZlbCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS5hcmVhKCkgKiA0OworfQorCitOYXRp
dmVJbWFnZVB0ciBJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUlt
YWdlQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vi
c2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyA8cmRh
cjovL3Byb2JsZW0vNzM3MTE5OD4gLSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUgZGVmYXVsdCBj
YWNoaW5nIGJlaGF2aW91ciBpbiBpT1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1RyYW5zaWVudAor
ICAgIC8vIHdoaWNoIGNhdXNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9yIHVzIHNpbmNl
IHRoZSBpbWFnZXMgaGFkIHRvIGJlIHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkgdGltZSB3ZSBj
YWxsZWQKKyAgICAvLyBDR0NvbnRleHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENHIHRvIGNhY2hl
IHRoZSBkcmF3biBpbWFnZXMuIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2Njc1NT4gLQor
ICAgIC8vIENvcmVHcmFwaGljcyBuZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1hZ2VDYWNoaW5n
VGVtcG9yYXJ5IHNpbmNlIGl0J3Mgc3RpbGwgbm90IHRoZSBkZWZhdWx0LgorI2lmIENPTVBJTEVS
KENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorI2VuZGlmCisgICAg
ICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1Rl
bXBvcmFyeSk7CisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKKyAgICBDRlN0cmluZ1JlZiBp
bWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlcik7CisgICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFn
ZSIpOworCisgICAgaWYgKCFpbWFnZVVUSSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAg
aWYgKCFDRkVxdWFsKGltYWdlVVRJLCB4Ym1VVEkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisK
KyAgICAvLyBJZiBpdCBpcyBhbiB4Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJl
YXMgdG8gcmVuZGVyIHRoZW0gdHJhbnNwYXJlbnQuCisgICAgY29uc3QgQ0dGbG9hdCBtYXNraW5n
Q29sb3JzWzZdID0gezI1NSwgMjU1LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gbWFza2VkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFz
a2luZ0NvbG9ycyhpbWFnZS5nZXQoKSwgbWFza2luZ0NvbG9ycykpOworICAgIHJldHVybiBtYXNr
ZWRJbWFnZSA/IG1hc2tlZEltYWdlIDogaW1hZ2U7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpz
ZXREYXRhKENGRGF0YVJlZiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBDR0lt
YWdlU291cmNlVXBkYXRlRGF0YShtX25hdGl2ZURlY29kZXIsIGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8gT24g
TWFjIHRoZSBOU0RhdGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFw
cGVuZGVkIHRvIHdpdGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4KKyAgICAvLyBX
ZSB1c2UgU2hhcmVkQnVmZmVyJ3MgYWJpbGl0eSB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRh
IHRvIGdldCBhcm91bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzCisgICAgLy8gcmVh
bGx5IGxvb2tpbmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBzZXREYXRhKGRhdGEtPmNyZWF0
ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIENHSW1hZ2VTb3VyY2VVcGRh
dGVEYXRhKG1fbmF0aXZlRGVjb2RlciwgZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERh
dGFSZWNlaXZlZCk7CisjZWxzZQorICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdy
YXAgdGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBkYXRhLT5yZWYoKTsKKyAgICAvLyBXZSB1c2UgdGhl
IEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50
ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVmZmVyCisgICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdh
eSB0byBsb2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29u
J3QgbW92ZSwgd2hpY2gKKyAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0
Qnl0ZVBvaW50ZXIgY2FsbGJhY2suCisgICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3Mg
cHJvdmlkZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3Np
dGlvbiwgc2hhcmVkQnVmZmVyUmVsZWFzZSB9OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRl
clJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChk
YXRhLCBkYXRhLT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOworICAgIENHSW1hZ2VTb3Vy
Y2VVcGRhdGVEYXRhUHJvdmlkZXIobV9uYXRpdmVEZWNvZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IGFsbERhdGFSZWNlaXZlZCk7CisjZW5kaWYKK30KKworSW1hZ2VTb3VyY2U6OkltYWdlU291cmNl
KEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uKQoreworICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBhbmQgR2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCit9CisKK0ltYWdlU291cmNlOjp+SW1hZ2VTb3Vy
Y2UoKQoreworICAgIGNsZWFyKHRydWUpOworfQorCit2b2lkIEltYWdlU291cmNlOjpjbGVhcihi
b29sIGRlc3Ryb3lBbGxGcmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgSW1hZ2VJTyBkaXNj
YXJkIHByZXZpb3VzbHkgZGVjb2RlZCBpbWFnZSBmcmFtZXMgaWYgdGhlIGNsaWVudAorICAgIC8v
IGFwcGxpY2F0aW9uIG5vIGxvbmdlciBob2xkcyByZWZlcmVuY2VzIHRvIHRoZW0sIHNvIHRoZXJl
J3Mgbm8gbmVlZCB0byB0aHJvdyBhd2F5CisgICAgLy8gdGhlIGRlY29kZXIgdW5sZXNzIHdlJ3Jl
IGV4cGxpY2l0bHkgYXNrZWQgdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1lcy4KKyAgICBpZiAo
IWRlc3Ryb3lBbGxGcmFtZXMpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpbml0aWFsaXpl
ZCgpKQorICAgICAgICBtX2RlY29kZXIgPSBudWxscHRyOworICAgIAorICAgIGlmIChkYXRhKQor
ICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisgICAgCit2b2lkIElt
YWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKFNoYXJlZEJ1ZmZlciopCit7CisgICAg
aWYgKGluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlY29kZXIgPSBJbWFn
ZURlY29kZXI6OmNyZWF0ZSgpOworfQorCit2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChkYXRhKTsK
KyAgICAKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9kZWNvZGVyLT5zZXRE
YXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK1N0cmluZyBJbWFnZVNvdXJjZTo6Zmls
ZW5hbWVFeHRlbnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9k
ZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogU3RyaW5nKCk7Cit9CisgICAgCitTdWJzYW1w
bGluZ0xldmVsIEltYWdlU291cmNlOjpjYWxjdWxhdGVNYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2FsbG93U3Vic2FtcGxpbmcgfHwgIWFsbG93U3Vic2FtcGxp
bmdPZkZyYW1lQXRJbmRleCgwKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBWYWx1ZXMg
Y2hvc2VuIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBpT1MuCisgICAgY29uc3QgaW50IGNNYXhpbXVt
SW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEwMjQ7CisgICAgY29uc3Qg
U3Vic2FtcGxpbmdMZXZlbCBtYXhTdWJzYW1wbGluZ0xldmVsID0gMzsKKworICAgIFN1YnNhbXBs
aW5nTGV2ZWwgY3VycmVudExldmVsID0gMDsKKyAgICBmb3IgKCA7IGN1cnJlbnRMZXZlbCA8PSBt
YXhTdWJzYW1wbGluZ0xldmVsOyArK2N1cnJlbnRMZXZlbCkgeworICAgICAgICBJbnRTaXplIGZy
YW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoMCwgY3VycmVudExldmVsKTsKKyAgICAgICAgaWYg
KGZyYW1lU2l6ZS5hcmVhKCkgPCBjTWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRMZXZlbDsKK30K
KyAgICAKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6Om1heGltdW1TdWJzYW1wbGluZ0xl
dmVsKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGNhbGN1bGF0ZU1h
eGltdW1TdWJzYW1wbGluZ0xldmVsKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworU3Vi
c2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0
IHNjYWxlKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2
ZWxGb3JTY2FsZShzY2FsZSwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSk7Cit9CisKK2Jvb2wg
SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVk
KCkgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKK30KKworYm9vbCBJbWFnZVNvdXJj
ZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmFsbG93U3Vic2FtcGxpbmdP
ZkZyYW1lQXRJbmRleChpbmRleCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6
ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWws
IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
bikgY29uc3QKK3sKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybiB7IH07
CisgICAgCisgICAgSW50U2l6ZSBzaXplID0gbV9kZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGlu
ZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
ID0gbV9kZWNvZGVyLT5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgIAorICAgIHJldHVy
biBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
biAmJiBvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpID8gc2l6ZS50cmFuc3Bvc2VkU2l6
ZSgpIDogc2l6ZTsKK30KKworSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3JpZW50YXRp
b25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQo
KSA/IG1fZGVjb2Rlci0+b3JpZW50YXRpb25BdEluZGV4KGluZGV4KSA6IERlZmF1bHRJbWFnZU9y
aWVudGF0aW9uOworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKK30KKyAgICAKK0ludFNpemUgSW1hZ2VT
b3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBm
cmFtZVNpemVBdEluZGV4KDAsIDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKTsKK30KKworYm9v
bCBJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmhvdFNwb3QoaG90U3BvdCk7Cit9
CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVy
bWluZVByb3BlcnRpZXMoKTsKK30KKyAgICAKK2ludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNv
dW50KCkKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlv
bkNvdW50KCkgOiBjQW5pbWF0aW9uTG9vcE9uY2U7Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6
ZnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29k
ZXItPmZyYW1lQ291bnQoKSA6IDA7Cit9CisKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZVNv
dXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2Rl
Y29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6
IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgo
c2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCk7Cit9CisKK2Zsb2F0IEltYWdlU291cmNlOjpm
cmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIGluaXRpYWxp
emVkKCkgPyBtX2RlY29kZXItPmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KSA6IDA7Cit9CisK
K2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sK
KyAgICByZXR1cm4gIWluaXRpYWxpemVkKCkgfHwgbV9kZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJ
bmRleChpbmRleCk7Cit9CisKIHVuc2lnbmVkIEltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRl
eChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QK
IHsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNh
bXBsaW5nTGV2ZWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbikpOwotICAgIHJldHVybiBmcmFtZVNpemUud2lkdGgoKSAqIGZyYW1lU2l6ZS5oZWln
aHQoKSAqIDQ7CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBmcmFtZVNpemVBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICByZXR1cm4gZnJhbWVTaXplLmFyZWEoKSAqIDQ7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwCmluZGV4IGI5NjU2NTUyZjI3ZTM2ODJmNmExNDM4MGZhNWVkMzNj
NTcxNTRkNmQuLjkyM2NkYTYyNmE1MjAxMjc4OGRiM2RjNjQ2NDdhNTVhNDNjYzUyNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtOTUsMzUgKzk1LDM1IEBAIGJvb2wgbWF0Y2hlc0NVUlNpZ25hdHVyZShj
aGFyKiBjb250ZW50cykKIAogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6Y3JlYXRl
KGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhh
T3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBJbWFnZURl
Y29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBo
YU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogewogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmUgPSAxNDsgLy8gVG8gd2l0OiAiUklGRj8/Pz9X
RUJQVlAiCiAgICAgY2hhciBjb250ZW50c1tsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmVdOwogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNvbnRlbnRzLCBsZW5ndGhP
Zkxvbmdlc3RTaWduYXR1cmUsIGRhdGEsIDApOwogICAgIGlmIChsZW5ndGggPCBsZW5ndGhPZkxv
bmdlc3RTaWduYXR1cmUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGlmIChtYXRjaGVzR0lGU2lnbmF0dXJlKGNvbnRlbnRzKSkKLSAgICAgICAgcmV0
dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+KG5l
dyBHSUZJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KSk7CiAKICAgICBpZiAobWF0Y2hlc1BOR1NpZ25hdHVyZShjb250ZW50cykpCi0gICAgICAgIHJl
dHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbik7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPihu
ZXcgUE5HSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikpOwogCiAgICAgaWYgKG1hdGNoZXNJQ09TaWduYXR1cmUoY29udGVudHMpIHx8IG1hdGNoZXND
VVJTaWduYXR1cmUoY29udGVudHMpKQotICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2Rl
cihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4obmV3IElDT0ltYWdlRGVjb2RlcihhbHBo
YU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKIAogICAgIGlmIChtYXRjaGVz
SlBFR1NpZ25hdHVyZShjb250ZW50cykpCi0gICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVj
b2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4obmV3IEpQRUdJbWFnZURlY29kZXIo
YWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAKICNpZiBVU0UoV0VC
UCkKICAgICBpZiAobWF0Y2hlc1dlYlBTaWduYXR1cmUoY29udGVudHMpKQotICAgICAgICByZXR1
cm4gbmV3IFdFQlBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+KG5l
dyBXRUJQSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikpOwogI2VuZGlmCiAKICAgICBpZiAobWF0Y2hlc0JNUFNpZ25hdHVyZShjb250ZW50cykpCi0g
ICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbik7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VE
ZWNvZGVyPihuZXcgQk1QSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbikpOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IEltYWdlRnJhbWU6OkltYWdlRnJhbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCBiMzU0N2Q5NGU4MDhmODc0
YWVkOWRhMGYyOTFiZWNlMjBhNjQ2NDM3Li41MzQ3YTQ3YjcyM2NkNWYwM2I2MmQzYjM1MmNmOTQ1
MTQ3ZGEwZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBkZWNvZGVyIG9mIHRoZSBh
cHByb3ByaWF0ZSB0eXBlLiAgUmV0dXJucyAwIGlmCiAgICAgICAgIC8vIHdlIGNhbid0IHNuaWZm
IGEgc3VwcG9ydGVkIHR5cGUgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAocG9zc2libHkKICAgICAg
ICAgLy8gYmVjYXVzZSB0aGVyZSBpc24ndCBlbm91Z2ggZGF0YSB5ZXQpLgotICAgICAgICBzdGF0
aWMgSW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNv
dXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bik7CisgICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUo
Y29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKICAgICAgICAgdmlydHVhbCBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCmluZGV4IGJiYWU5MWZhOGUzYzA2NjQ0N2M0NjRk
NmUzMTIwMGRlMjQ4Y2U4M2YuLjkxYzkyZTkxMmNjMjE4OTJmNjU5ZTY3YTk1OTU3MWZiZGQwMDI3
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQpAQCAt
OTEsNyArOTEsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdl
KEltYWdlKiBpbWFnZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaQogICAgIGlmIChpczxCaXRtYXBJ
bWFnZT4oKmltYWdlKSkgewogICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwog
ICAgICAgICBCaXRtYXBJbWFnZSYgYml0bWFwSW1hZ2UgPSBkb3duY2FzdDxCaXRtYXBJbWFnZT4o
KmltYWdlKTsKLSAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gYml0
bWFwSW1hZ2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihkZXNjcmlwdGlvbik7CisgICAgICAg
IEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLnNpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24oKTsKIAogICAgICAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAgICAgICAg
IG9yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uub3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274994</attachid>
            <date>2016-03-26 19:06:21 -0700</date>
            <delta_ts>2016-03-28 16:51:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160326190623.patch</filename>
            <type>text/plain</type>
            <size>59206</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiYjdjMTYwZDYxYjgx
MDk3OWNkZTU4OWVkMGNlODY2M2RiNDQ3ZC4uYmJkMDU2ZGFhNGRhMjM3YjFhZWU0YTE1YWEwMTg1
OTVlYWNjNjE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wMy0yNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIGltYWdlIENHIGRlY29kaW5nIGNvZGUgZnJvbSB0aGUgY2xhc3MgSW1hZ2VT
b3VyY2Ugb3V0IHRvIGEgbmV3CisgICAgICAgIGNsYXNzIG5hbWVkIEltYWdlRGVjb2Rlci4gVGhl
IHB1cnBvc2Ugb2YgdGhpcyBzcGxpdCBpcyB0byBoYXZlIHRoZSBDRworICAgICAgICBJbWFnZVNv
dXJjZSBzaW1pbGFyIHRvIHRoZSBub25lIENHIEltYWdlU291cmNlIHdoZXJlIHRoZXJlIGlzIGEg
c2VwYXJhdGUKKyAgICAgICAgY2xhc3MgZm9yIGRlY29kaW5nIGFuZCBpdCBpcyBuYW1lZCBJbWFn
ZURlY29kZXIgYWxzby4KKyAKKyAgICAgICAgVGhlIHBsYW4gYWZ0ZXIgdGhpcyBwYXRjaCBpcyBp
cyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgLS0gTW92ZSB0aGUgbmV3IGNsYXNzIHRvIHNl
cGFyYXRlIGZpbGVzCisgICAgICAgICAgICAtLSBNZXJnZSB0aGUgSW1hZ2VTb3VyY2UuY3BwIGFu
ZCBJbWFnZVNvdXJjZUNHLmNwcC4gaW4gb25lIGZpbGUKKyAgICAgICAgICAgIC0tIE1vdmUgY2Fj
aGluZyB0aGUgRnJhbWVEYXRhIGZyb20gQml0bWFwSW1hZ2UgdG8gSW1hZ2VTb3VyY2UuCisgCisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcik6CisgICAgICAgIEJpdG1hcEltYWdl
OjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgZG9lcyBub3QgdGFrZSBhbnkgYXJndW1lbnQg
bm93LgorICAgICAgICBGaXggdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBhbmQgZGVsZXRlIHRo
ZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGNvZGUgCisgICAgICAgIHNpbmNlIHRoZSBjb2RlIGlz
IHRoZSBzYW1lIGZvciB0aGUgdHdvIGNhc2VzLgorIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjp1cGRh
dGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaXplUmVzcGVjdGluZ09y
aWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmR1bXApOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIEFuIGltYWdlIGNhbiBoYXZlIHR3byBzaXpl
czogc2l6ZSgpIGFuZCBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkuIFRoZQorICAgICAgICBz
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgaXMgdGhlIHRyYW5zcG9zZSBvZiBzaXplKCkgaWZm
IHRoZSBpbWFnZQorICAgICAgICBvcmllbnRhdGlvbiBoYXMgdXNlc1dpZHRoQXNIZWlnaHQoKSBp
cyB0cnVlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUKKyAgICAgICAgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uIGFyZ3VtZW50LiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUgbWVt
YmVycworICAgICAgICBtX2ltYWdlT3JpZW50YXRpb24gb3IgbV9zaG91bGRSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbi4gQWxzbyBtb3ZlCisgICAgICAgIG1fYWxsb3dTdWJzYW1wbGluZyBhbmQgbV9t
aW5pbXVtU3Vic2FtcGxpbmdMZXZlbCAod2hpY2ggc2hvdWxkIGJlIG5hbWVkCisgICAgICAgIG1f
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpIHRvIEltYWdlU291cmNlIGluc3RlYWQuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmNsZWFyKToKKyAgICAgICAgbV9kZWNvZGVyIGlzIG5vdyBhIHVuaXF1ZV9wdHIuIFRvIHJl
bGVhc2UgaXQsIGFzc2lnbiBpdCB0byBudWxscHRyLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCk6IEVuc3VyZSBtX2RlY29kZXIgaXMgY3Jl
YXRlZC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6
IENhbGwgZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCgpIGJlZm9yZQorICAgICAgICBhY3R1YWxseSBz
ZXR0aW5nIHRoZSBkYXRhLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
Ojppc1NpemVBdmFpbGFibGUpOiBVc2UgaW5pdGlhbGl6ZWQoKTsKKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyByZXR1
cm4gdGhlIHNpemUgb2YgdGhlIGltYWdlLgorICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmdldEhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0
aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIENo
ZWNrIGZvciBpbml0aWFsaXplZCgpIGluc3RlYWQgb2YgY2hlY2tpbmcgbV9kZWNvZGVyLgorICAg
ICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6IERlbGV0
ZWQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6
IFRoZSBpbWFnZSBkZWNvZGVyIGlzIG5vdyBuYW1lZAorICAgICAgICBJbWFnZURlY29kZXIgZm9y
IGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmluaXRpYWxpemVkKTogTW92ZWQgdG8gdGhlIGhlYWRlciBmaWxlLgorCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6c2V0QWxsb3dTdWJzYW1wbGluZyk6IE1vdmVkIGZyb20gQml0bWFw
SW1hZ2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1h
cEltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vi
c2FtcGxpbmdMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgIERlbGV0ZSBpbml0aWFsaXppbmcgbV9t
aW5pbXVtU3Vic2FtcGxpbmdMZXZlbCBhbmQgZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2
ZWwoKQorICAgICAgICBzaW5jZSB0aGV5IGFyZSBtb3ZlZCB0byBJbWFnZVNvdXJjZS4KKyAgICAg
ICAgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKTogRGVs
ZXRlZC4KKyAgICAgICAgRGVsZXRlIG1lbWJlcnMgYW5kIG1ldGhvZHMgd2hpY2ggYXJlIG5vdyBv
d25lZCBhbmQgY2FsY3VsYXRlZCBieSBJbWFnZVNvdXJjZS4KKyAgICAgICAgCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OmNyZWF0ZSk6IFJldHVybnMgYSBDRyBJbWFnZURlY29kZXIgb2JqZWN0
LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVy
KTogQ3JlYXRlcyBhIG5hdGl2ZSBDRyBpbWFnZSBkZWNvZGVyLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6fkltYWdlRGVjb2Rlcik6IFJlbGVhc2VzIHRoZSBuYXRp
dmUgQ0cgaW1hZ2UgZGVjb2Rlci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZSk6IE1vdmVkIGZyb20gSW1hZ2VTb3VyY2Uu
CisgICAgICAgIEEgbmV3IGFyZ3VtZW50IG5hbWVkICdtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCcg
aXMgYWRkZWQgdG8gbG93IGZpbHRlciB0aGUKKyAgICAgICAgcmV0dXJuIHZhbHVlLgorICAgICAg
ICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1p
bmVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVF
eHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRl
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6YWxsb3dTdWJzYW1wbGluZ09m
RnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNB
bHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVz
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1h
Z2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6Cisg
ICAgICAgIFRoZSBjb2RlIG9mIHRoZXNlIGZ1bmN0aW9uIHdhcyBtb3ZlZCBmcm9tIHRoZSBmdW5j
dGlvbnMgb2YgSW1hZ2VTb3VyY2UuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjp+SW1h
Z2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6Y2FsY3VsYXRlTWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6Om1heGltdW1TdWJzYW1wbGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmdldEhv
dFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0
ZXJtaW5lUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRp
dGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAg
IENhbGwgbV9kZWNvZGVyJ3MgZnVuY3Rpb24gdG8gZG8gdGhlIHJlYWwgd29yay4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOiBEZWxldGVkLgor
ICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICBDaGFuZ2Ug
dGhlIHJldHVybiBvZiBJbWFnZURlY29kZXI6OmNyZWF0ZSgpIHRvIGJlIHVuaXF1ZV9wdHIuCisg
ICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOiBEZWxldGUgdW5uZWVkZWQgYXJn
dW1lbnQuCisKIDIwMTYtMDMtMjUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgW1dpbl0gSW1wcm92ZSBDTWFrZSBidWlsZCBwZXJmb3JtYW5jZSAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IDE2ZGQ2NWNiYjM0
ZTNiZmI5OTZmYmJmYWYwNjdhYzcxMzdhMDE5Y2IuLjA4YzVmNjk1NWFkNWE5MzMxYWZkZDUyODll
YzUwYWE0NmIxNmNiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZElt
YWdlLmNwcApAQCAtMjcyLDIyICsyNzIsMTQgQEAgTGF5b3V0U2l6ZSBDYWNoZWRJbWFnZTo6aW1h
Z2VTaXplRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZmxvYXQKICAg
ICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBMYXlvdXRTaXplKCk7CiAKLSAgICBMYXlv
dXRTaXplIGltYWdlU2l6ZShtX2ltYWdlLT5zaXplKCkpOworICAgIExheW91dFNpemUgaW1hZ2VT
aXplOwogCi0jaWYgRU5BQkxFKENTU19JTUFHRV9PUklFTlRBVElPTikKLSAgICBpZiAocmVuZGVy
ZXIgJiYgaXM8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKSkgewotICAgICAgICBJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24gb3JpZW50YXRpb25EZXNjcmlwdGlvbihyZW5kZXJlci0+c2hvdWxkUmVz
cGVjdEltYWdlT3JpZW50YXRpb24oKSwgcmVuZGVyZXItPnN0eWxlKCkuaW1hZ2VPcmllbnRhdGlv
bigpKTsKLSAgICAgICAgaWYgKG9yaWVudGF0aW9uRGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgICAgIGltYWdl
U2l6ZSA9IExheW91dFNpemUoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KCptX2ltYWdlKS5zaXplUmVz
cGVjdGluZ09yaWVudGF0aW9uKG9yaWVudGF0aW9uRGVzY3JpcHRpb24pKTsKLSAgICB9Ci0jZWxz
ZQotICAgIGlmIChpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpICYmIChyZW5kZXJlciAmJiByZW5k
ZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbikpCisgICAgaWYgKGlzPEJpdG1hcEltYWdlPigqbV9pbWFnZSkgJiYgcmVuZGVyZXIg
JiYgcmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pCiAgICAgICAgIGltYWdlU2l6ZSA9IExheW91dFNpemUoZG93bmNhc3Q8
Qml0bWFwSW1hZ2U+KCptX2ltYWdlKS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkpOwotI2Vu
ZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04pCi0KLSAgICBlbHNlIGlmIChpczxT
VkdJbWFnZT4oKm1faW1hZ2UpICYmIHNpemVUeXBlID09IFVzZWRTaXplKSB7CisgICAgZWxzZSBp
ZiAoaXM8U1ZHSW1hZ2U+KCptX2ltYWdlKSAmJiBzaXplVHlwZSA9PSBVc2VkU2l6ZSkKICAgICAg
ICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShtX3N2Z0ltYWdlQ2FjaGUtPmltYWdlU2l6ZUZvclJl
bmRlcmVyKHJlbmRlcmVyKSk7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgaW1hZ2VTaXplID0g
TGF5b3V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwogCiAgICAgaWYgKG11bHRpcGxpZXIgPT0gMS4w
ZikKICAgICAgICAgcmV0dXJuIGltYWdlU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0YTVjNjFhNWQyN2JhODU1NDNjMDA2
NDVkZjhlYTIwMzM1MGE5ZTFjLi5hN2NmMjhhNTA1M2QxZTIwMTU2MmVkOGRjYmNiMWU0ZWZiOGQy
ZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCkBAIC00Nyw5ICs0Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2Jz
ZXJ2ZXIpCi0gICAgLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKDApCi0gICAgLCBtX2ltYWdl
T3JpZW50YXRpb24oT3JpZ2luVG9wTGVmdCkKLSAgICAsIG1fc2hvdWxkUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24oZmFsc2UpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAgICwgbV9yZXBldGl0
aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhV
bmtub3duKQpAQCAtNjIsOSArNTksNiBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0
aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgcmVtb3ZlIHRoZSBQTEFU
Rk9STShJT1MpLWd1YXJkLgogICAgICwgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUoMCkKICAg
ICAsIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCgwKQotICAgICwgbV9hbGxvd1N1YnNhbXBs
aW5nKHRydWUpCi0jZWxzZQotICAgICwgbV9hbGxvd1N1YnNhbXBsaW5nKGZhbHNlKQogI2VuZGlm
CiAgICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKICAgICAsIG1fY2hlY2tlZEZvclNvbGlkQ29s
b3IoZmFsc2UpCkBAIC0yMzYsMjAgKzIzMCwxNSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkaWREZWNv
ZGVQcm9wZXJ0aWVzKCkgY29uc3QKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6
ZUNoYW5nZWQodGhpcywgZGVsdGFCeXRlcyk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OnVwZGF0
ZVNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAordm9p
ZCBCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpemVBdmFp
bGFibGUgfHwgbV9oYXZlU2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zaXplID0gbV9z
b3VyY2Uuc2l6ZShkZXNjcmlwdGlvbik7Ci0gICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9u
ID0gbV9zb3VyY2Uuc2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oUmVzcGVjdEltYWdl
T3JpZW50YXRpb24sIGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSkpOwotCi0gICAgbV9p
bWFnZU9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLmltYWdl
T3JpZW50YXRpb24oKSk7Ci0gICAgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigp
KTsKKyAgICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKCk7CisgICAgbV9zaXplUmVzcGVjdGluZ09y
aWVudGF0aW9uID0gbV9zb3VyY2Uuc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOwogCiAgICAg
bV9oYXZlU2l6ZSA9IHRydWU7Ci0KLSAgICBkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZl
bCgpOwogICAgIGRpZERlY29kZVByb3BlcnRpZXMoKTsKIH0KIApAQCAtMjU5LDkgKzI0OCw5IEBA
IEZsb2F0U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2l6ZTsK
IH0KIAotSW50U2l6ZSBCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CitJbnRTaXplIEJpdG1h
cEltYWdlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgY29uc3QKIHsKLSAgICB1cGRhdGVT
aXplKGRlc2NyaXB0aW9uKTsKKyAgICB1cGRhdGVTaXplKCk7CiAgICAgcmV0dXJuIG1fc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbjsKIH0KIApAQCAtMzkxLDcgKzM4MCw3IEBAIE5hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHBy
ZXNlbnRhdGlvblNjCiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBz
dGQ6Om1pbihtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUocHJlc2VudGF0aW9uU2Nh
bGVIaW50KSwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk7CisgICAgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsID0gbV9zb3VyY2Uuc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKHBy
ZXNlbnRhdGlvblNjYWxlSGludCk7CiAKICAgICAvLyBXZSBtYXkgaGF2ZSBjYWNoZWQgYSBmcmFt
ZSB3aXRoIGEgaGlnaGVyIHN1YnNhbXBsaW5nIGxldmVsLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQg
dG8KICAgICAvLyByZS1kZWNvZGUgd2l0aCBhIGxvd2VyIGxldmVsLgpAQCAtNzEwLDEzICs2OTks
OCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoImN1cnJlbnQtZnJhbWUiLCBtX2N1cnJlbnRGcmFtZSk7CiAgICAg
fQogICAgIAotICAgIGlmIChhbGxvd1N1YnNhbXBsaW5nKCkpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYWxsb3ctc3Vic2FtcGxpbmciLCBhbGxvd1N1YnNhbXBsaW5nKCkpOwogICAgIGlmICht
X2lzU29saWRDb2xvcikKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzb2xpZC1jb2xvciIsIG1f
aXNTb2xpZENvbG9yKTsKLSAgICAKLSAgICBpZiAobV9pbWFnZU9yaWVudGF0aW9uICE9IE9yaWdp
blRvcExlZnQpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBtX2ltYWdl
T3JpZW50YXRpb24pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaAppbmRleCAwMGZiYTMzYmE0MTljMTI0MTU0MTY1MzMwMWUyOTVjZWY4
NmQxNzc5Li41MTEzZDVkNTI3NzgxNTRlYWZjZjlhMzQyN2I1MmViMTVjZmU5NjljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTEyMyw3
ICsxMjMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGbG9hdFNpemUgZHVlIHRvIG92ZXJyaWRlLgog
ICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgSW50U2l6ZSBzaXplUmVz
cGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5n
T3JpZW50YXRpb24oKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNv
bnN0IG92ZXJyaWRlOwogCkBAIC0xNzksMTYgKzE3OSwxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBjYW5BbmltYXRlKCk7CiAKLSAgICBib29sIGFsbG93U3Vic2FtcGxpbmcoKSBjb25zdCB7
IHJldHVybiBtX2FsbG93U3Vic2FtcGxpbmc7IH0KLSAgICB2b2lkIHNldEFsbG93U3Vic2FtcGxp
bmcoYm9vbCBhbGxvd1N1YnNhbXBsaW5nKSB7IG1fYWxsb3dTdWJzYW1wbGluZyA9IGFsbG93U3Vi
c2FtcGxpbmc7IH0KKyAgICB2b2lkIHNldEFsbG93U3Vic2FtcGxpbmcoYm9vbCBhbGxvd1N1YnNh
bXBsaW5nKSB7IG1fc291cmNlLnNldEFsbG93U3Vic2FtcGxpbmcoYWxsb3dTdWJzYW1wbGluZyk7
IH0KIAogICAgIHNpemVfdCBjdXJyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRG
cmFtZTsgfQogICAgIAogcHJpdmF0ZToKICAgICBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHVwZGF0ZVNpemUoSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0
OwotICAgIHZvaWQgZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdDsKKyAg
ICB2b2lkIHVwZGF0ZVNpemUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGVudW0gUmVwZXRp
dGlvbkNvdW50U3RhdHVzIHsKQEAgLTI5NSwxMSArMjkzLDYgQEAgcHJpdmF0ZToKICAgICBtdXRh
YmxlIEludFNpemUgbV9zaXplOyAvLyBUaGUgc2l6ZSB0byB1c2UgZm9yIHRoZSBvdmVyYWxsIGlt
YWdlICh3aWxsIGp1c3QgYmUgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGltYWdlKS4KICAgICBtdXRh
YmxlIEludFNpemUgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwogCi0gICAgbXV0YWJsZSBT
dWJzYW1wbGluZ0xldmVsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWw7Ci0KLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1faW1hZ2VPcmllbnRhdGlvbiA6IDQ7IC8vIEltYWdlT3JpZW50YXRpb25FbnVt
Ci0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uIDog
MTsgLy8gUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtCi0KICAgICBzaXplX3QgbV9jdXJyZW50
RnJhbWU7IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCiAg
ICAgVmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNo
ZWQgZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4g
dGhlbSBpbiB0aGUgY2FjaGUuCiAKQEAgLTMyNyw4ICszMjAsNiBAQCBwcml2YXRlOgogICAgIGRv
dWJsZSBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZTsKICAgICB1aW50MTZfdCBtX3Byb2dyZXNz
aXZlTG9hZENodW5rQ291bnQ7CiAjZW5kaWYKLQotICAgIGJvb2wgbV9hbGxvd1N1YnNhbXBsaW5n
IDogMTsgLy8gV2hldGhlciB3ZSBzaG91bGQgYXR0ZW1wdCBzdWJzYW1wbGluZyBpZiB0aGlzIGlt
YWdlIGlzIHZlcnkgbGFyZ2UuCiAgICAgYm9vbCBtX2lzU29saWRDb2xvciA6IDE7IC8vIFdoZXRo
ZXIgb3Igbm90IHdlIGFyZSBhIDF4MSBzb2xpZCBpbWFnZS4KICAgICBib29sIG1fY2hlY2tlZEZv
clNvbGlkQ29sb3IgOiAxOyAvLyBXaGV0aGVyIHdlJ3ZlIGNoZWNrZWQgdGhlIGZyYW1lIGZvciBz
b2xpZCBjb2xvci4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwCmluZGV4IGFlMzFjOTgzNTIxZDUwMDgyMjVjMWZjMzQyOWMyYzQwYTAzN2U0
ODguLjVkNTdkNDljNmY1MWYyZWQyMGYyZDdjNmFlMGMxNTUxMjE3YWU1ZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTQzLDgg
KzQzLDcgQEAgdW5zaWduZWQgSW1hZ2VTb3VyY2U6OnNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdl
ID0gMTAyNCAqIDEwMjQ7CiAjZW5kaWYKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdl
U291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIDogbV9kZWNv
ZGVyKDApCi0gICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQorICAgIDogbV9hbHBoYU9w
dGlvbihhbHBoYU9wdGlvbikKICAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiB7CiB9CkBAIC02MiwyOSArNjEsMzkgQEAgdm9pZCBJ
bWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZvcmVGcmFt
ZSwgU2hhcmVkQnVmZmVyKgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZGVsZXRlIG1f
ZGVjb2RlcjsKLSAgICBtX2RlY29kZXIgPSAwOworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAg
IG1fZGVjb2RlciA9IG51bGxwdHI7CisKICAgICBpZiAoZGF0YSkKICAgICAgICAgc2V0RGF0YShk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1ib29sIEltYWdlU291cmNlOjppbml0aWFsaXpl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2RlcjsKLX0KLQotdm9pZCBJbWFnZVNvdXJj
ZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQordm9p
ZCBJbWFnZVNvdXJjZTo6ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChTaGFyZWRCdWZmZXIqIGRhdGEp
CiB7CisgICAgaWYgKGluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICAv
LyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KICAgICAvLyBUaGlzIG1l
dGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9m
IHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KICAgICAvLyBJZiBpbnN1ZmZpY2llbnQg
Ynl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29k
ZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgotICAgIGlmICghbV9kZWNvZGVyKSB7Ci0g
ICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlRGVjb2RlclB0cj4oTmF0
aXZlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICBtX2RlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0
ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAj
aWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICAgICAgaWYgKG1fZGVj
b2RlciAmJiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSkKLSAgICAgICAgICAgIG1fZGVjb2Rl
ci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTsKKyAgICBpZiAo
bV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQorICAgICAgICBtX2RlY29k
ZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSk7CiAjZW5kaWYK
K30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoZGF0YSk7CisgICAgCisgICAgaWYgKCFpbml0
aWFsaXplZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKG1fZGVjb2RlcikKQEAgLTEwOCwyOSArMTE3LDMzIEBAIGJv
b2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNv
bnN0CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgcmV0dXJu
IG1fZGVjb2RlciAmJiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiBp
bml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLUludFNp
emUgSW1hZ2VTb3VyY2U6OnNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKSBjb25zdAorSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCwgZGVzY3JpcHRpb24pOworICAgIHJldHVybiBmcmFt
ZVNpemVBdEluZGV4KDAsIDApOwogfQogCi1JbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVB
dEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCwg
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pOworfQogCi0gICAgSW50U2l6ZSBzaXplID0gbV9kZWNv
ZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoKGRlc2NyaXB0aW9uLnJlc3Bl
Y3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pICYmIG1fZGVj
b2Rlci0+b3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAgICByZXR1cm4g
SW50U2l6ZShzaXplLmhlaWdodCgpLCBzaXplLndpZHRoKCkpOworSW50U2l6ZSBJbWFnZVNvdXJj
ZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIFJlc3Bl
Y3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29u
c3QKK3sKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICByZXR1cm4gc2l6ZTsKKyAgICBJbnRTaXplIHNpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgpOworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBtX2RlY29k
ZXItPm9yaWVudGF0aW9uKCk7CisgICAgCisgICAgcmV0dXJuIHNob3VsZFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uICYmIG9yaWVudGF0aW9uLnVzZXNX
aWR0aEFzSGVpZ2h0KCkgPyBzaXplLnRyYW5zcG9zZWRTaXplKCkgOiBzaXplOwogfQogCiBib29s
IEltYWdlU291cmNlOjpnZXRIb3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAogewotICAg
IHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmhvdFNwb3QoaG90U3BvdCkgOiBmYWxzZTsK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmhvdFNwb3QoaG90U3BvdCk7
CiB9CiAKIHNpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0
aWVzKCkgY29uc3QKQEAgLTE0MCwyMSArMTUzLDE3IEBAIHNpemVfdCBJbWFnZVNvdXJjZTo6Ynl0
ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKIAogaW50IEltYWdlU291cmNl
OjpyZXBldGl0aW9uQ291bnQoKQogewotICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXIt
PnJlcGV0aXRpb25Db3VudCgpIDogY0FuaW1hdGlvbk5vbmU7CisgICAgcmV0dXJuIGluaXRpYWxp
emVkKCkgPyBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpIDogY0FuaW1hdGlvbk5vbmU7CiB9
CiAKIHNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKKyAgICByZXR1cm4gaW5p
dGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKIH0KIAogTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9
PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQorICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBaZXJvLWhlaWdodCBpbWFnZXMgY2FuIGNhdXNl
IHByb2JsZW1zIGZvciBzb21lIHBvcnRzLiAgSWYgd2UgaGF2ZSBhbgpAQCAtMTYyLDYgKzE3MSwx
MCBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1fZGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZm
ZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCiAgICAgLy8gUmV0dXJuIHRoZSBidWZmZXIgY29udGVudHMgYXMgYSBuYXRpdmUg
aW1hZ2UuICBGb3Igc29tZSBwb3J0cywgdGhlIGRhdGEKICAgICAvLyBpcyBhbHJlYWR5IGluIGEg
bmF0aXZlIGNvbnRhaW5lciwgYW5kIHRoaXMganVzdCBpbmNyZW1lbnRzIGl0cyByZWZjb3VudC4K
ICAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CkBAIC0xNjksNyArMTgyLDcg
QEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXYKIAogZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKKyAgICBp
ZiAoIWluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSW1hZ2VGcmFtZSog
YnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwpAQCAtMTg4LDE5
ICsyMDEsMTcgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVf
dCBpbmRleCkKIAogSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3JpZW50YXRpb25BdElu
ZGV4KHNpemVfdCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5v
cmllbnRhdGlvbigpIDogRGVmYXVsdEltYWdlT3JpZW50YXRpb247CisgICAgcmV0dXJuIGluaXRp
YWxpemVkKCkgPyBtX2RlY29kZXItPm9yaWVudGF0aW9uKCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRh
dGlvbjsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90
IGluZGV4KQogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisgICAgcmV0
dXJuICFpbml0aWFsaXplZCgpIHx8IG1fZGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwogfQogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVf
dCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKKyAgICBpZiAoIWluaXRpYWxpemVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1fZGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKQEAgLTIwOSw5ICsyMjAsNyBAQCBib29s
IEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIAogdW5z
aWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpOworICAg
IHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5mcmFtZUJ5dGVzQXRJbmRleChpbmRl
eCkgOiAwOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaAppbmRleCBjMTFmN2JlNDgyOWU0ZTZiYzQwMTc4OTYzYzFkNTFhMTg2NjBhMGEw
Li5kZDhmMmQ2Nzk2ODlhZTg1ZDU1ZmUxMDYyMGY3ZTllZGFhMzMyOTQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTQ1LDE5ICs0NSw3
IEBAIGNsYXNzIEltYWdlT3JpZW50YXRpb247CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNp
emU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLSNpZiBVU0UoQ0cpCi10eXBlZGVmIENHSW1hZ2VT
b3VyY2VSZWYgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOwotI2Vsc2UKIGNsYXNzIEltYWdlRGVjb2Rl
cjsKLXR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZW5kaWYK
LQotI2lmIFVTRShDRykKLSNkZWZpbmUgTmF0aXZlSW1hZ2VEZWNvZGVyIEltYWdlRGVjb2Rlcgot
I2Vsc2UKLXR5cGVkZWYgSW1hZ2VEZWNvZGVyIE5hdGl2ZUltYWdlRGVjb2RlcjsKLSNlbmRpZgog
CiAvLyBSaWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQg
dGhhdCBzdXBwb3J0cyBhbmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhl
IGNvbnN0YW50cyBiZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCkBAIC0xMjIs
MTkgKzExMCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEg
PSBOVUxMLAogICAgICAgICAgICAgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZSk7CiAK
LSAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3Q7CisgICAgYm9vbCBpbml0aWFsaXplZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0OwogCiAgICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsRm9yU2NhbGUoZmxvYXQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJh
bWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgdm9pZCBzZXRBbGxvd1N1YnNhbXBsaW5nKGJv
b2wgYWxsb3dTdWJzYW1wbGluZykgeyBtX2FsbG93U3Vic2FtcGxpbmcgPSBhbGxvd1N1YnNhbXBs
aW5nOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNv
bnN0OwogCiAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKLSAgICAvLyBBbHdheXMgb3JpZ2lu
YWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1wbGluZy4KLSAgICBJbnRTaXplIHNpemUoSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0
OwotICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBzdWJzYW1wbGVkIGZyYW1lLgotICAgIEludFNp
emUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwLCBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkgY29u
c3Q7CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplUmVzcGVjdGlu
Z09yaWVudGF0aW9uKCkgY29uc3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERv
Tm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OwogCiAgICAgYm9vbCBnZXRIb3RTcG90
KEludFBvaW50JikgY29uc3Q7CiAKQEAgLTE2Myw3ICsxNTIsMTYgQEAgcHVibGljOgogI2VuZGlm
CiAKIHByaXZhdGU6Ci0gICAgTmF0aXZlSW1hZ2VEZWNvZGVyUHRyIG1fZGVjb2RlcjsKKyAgICB2
b2lkIGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoU2hhcmVkQnVmZmVyKik7CisgICAgU3Vic2FtcGxp
bmdMZXZlbCBjYWxjdWxhdGVNYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0OworICAgIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICAKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgYm9vbCBtX2FsbG93U3Vic2FtcGxpbmcgeyB0cnVlIH07CisjZWxz
ZQorICAgIGJvb2wgbV9hbGxvd1N1YnNhbXBsaW5nIHsgZmFsc2UgfTsKKyNlbmRpZgogCiAjaWYg
IVVTRShDRykKICAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAppbmRleCBiZGEwZGMyODFjOTM3ZGNkZjJkYjE1YWM3MTI4YTIzOTRkNzU3NGFmLi4xZjRl
ZTIwNzY2YzE1ZGNkN2UwYWU2Y2JjMGQ0YmQxYzczNDUxNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcApAQCAtNDEsNyArNDEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBuYXRpdmVJbWFnZSwgSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKICAgICAsIG1fc2l6ZShj
YWlyb1N1cmZhY2VTaXplKG5hdGl2ZUltYWdlLmdldCgpKSkKLSAgICAsIG1fbWluaW11bVN1YnNh
bXBsaW5nTGV2ZWwoMCkKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX3JlcGV0aXRp
b25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVu
a25vd24pCkBAIC0xMjIsMTEgKzEyMSw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvCiAgICAg
ICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFn
ZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdAotewotICAgIG1fbWlu
aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSAwOwotfQotCiB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IoKQogewogICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmlu
ZGV4IDMyYmQwYjVjYjU1M2ZjZGVkZGJhYWQyZjk2MzYxMzAxZjVkNDZlY2QuLmViM2ZlNDJlZTNi
ZTEyNjQ0NjI2MGIyNGE5YTE0ODNhNjdjNjgzNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCkBAIC03MCw5ICs3MCw2
IEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCiAKIEJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW1hZ2VPYnNl
cnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11bVN1
YnNhbXBsaW5nTGV2ZWwoMCkKLSAgICAsIG1faW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BMZWZ0
KQotICAgICwgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAsIG1f
Y3VycmVudEZyYW1lKDApCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkK
ICAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCkBAIC0xMDUsMjggKzEwMiw2
IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFn
ZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiB9
CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fYWxsb3dTdWJzYW1wbGluZykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFtX3NvdXJjZS5hbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoMCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFZhbHVlcyBjaG9zZW4gdG8gYmUgYXBwcm9wcmlhdGUg
Zm9yIGlPUy4KLSAgICBjb25zdCBpbnQgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGlu
ZyA9IDUgKiAxMDI0ICogMTAyNDsKLSAgICBjb25zdCBTdWJzYW1wbGluZ0xldmVsIG1heFN1YnNh
bXBsaW5nTGV2ZWwgPSAzOwotCi0gICAgU3Vic2FtcGxpbmdMZXZlbCBjdXJyZW50TGV2ZWwgPSAw
OwotICAgIGZvciAoIDsgY3VycmVudExldmVsIDw9IG1heFN1YnNhbXBsaW5nTGV2ZWw7ICsrY3Vy
cmVudExldmVsKSB7Ci0gICAgICAgIEludFNpemUgZnJhbWVTaXplID0gbV9zb3VyY2UuZnJhbWVT
aXplQXRJbmRleCgwLCBjdXJyZW50TGV2ZWwpOwotICAgICAgICBpZiAoZnJhbWVTaXplLmFyZWEo
KSA8IGNNYXhpbXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcpCi0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsID0gY3VycmVudExldmVs
OwotfQotCiB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogewogICAgIG1f
Y2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAppbmRleCA1MDE1ZGQxNWFiZmM4
MjVkY2ViMDMyMGYxMjAyOWNiYTUxMjE4Mjc5Li44ODc0MmVkZWE1YTI0MzRjNzMzYjA0NGVhOWFl
YmJlY2M1MTMzOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcApAQCAtNTEsNjEgKzUxLDUzIEBAIGNvbnN0IENGU3Ry
aW5nUmVmIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291
cmNlU3Vic2FtcGxlCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3Mg
SW1hZ2VEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICB+SW1hZ2VEZWNvZGVyKCk7CiAKLWNvbnN0IENG
U3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lID0g
Q0ZTVFIoIlVuY2xhbXBlZERlbGF5VGltZSIpOwotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNH
SW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUgPSBDRlNUUigiRGVsYXlUaW1lIik7Ci1jb25zdCBD
RlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RSKCJM
b29wQ291bnQiKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVy
PihuZXcgSW1hZ2VEZWNvZGVyKTsKKyAgICB9CiAKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdl
U291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVm
ZXJSR0IzMiIpOwotY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEg
PSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEiKTsKKyAgICBzdGF0aWMgc2l6ZV90
IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpOworICAgIHN0YXRpYyBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxp
bmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7CiAKLSNpZiAhUExBVEZPUk0oQ09DT0Ep
Ci1zaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQq
IGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKLXsKLSAgICBTaGFyZWRCdWZm
ZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOwotICAg
IHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7Ci0gICAgaWYgKHBvc2l0
aW9uID49IHNvdXJjZVNpemUpCi0gICAgICAgIHJldHVybiAwOworICAgIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0OworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7Cisg
ICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdDsK
KyAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7CisgICAgYm9vbCBob3RTcG90KEludFBv
aW50JiBob3RTcG90KSBjb25zdDsKIAotICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHNoYXJlZEJ1
ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247Ci0gICAgc2l6ZV90IGFtb3VudCA9IHN0ZDo6bWluPHNp
emVfdD4oY291bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlvbik7Ci0gICAgbWVtY3B5KGJ1ZmZlciwg
c291cmNlLCBhbW91bnQpOwotICAgIHJldHVybiBhbW91bnQ7Ci19CisgICAgSW50U2l6ZSBmcmFt
ZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CisgICAgYm9vbCBm
cmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgSW1hZ2VPcmllbnRhdGlv
biBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKIAotdm9pZCBzaGFyZWRCdWZmZXJS
ZWxlYXNlKHZvaWQqIGluZm8pCi17Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBz
dGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKLSAgICBzaGFyZWRCdWZmZXItPmRlcmVm
KCk7Ci19Ci0jZW5kaWYKKyAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpIGNv
bnN0OworICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBi
b29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNvbnN0OworICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApIGNv
bnN0OwogCi1JbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9u
LCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCi0gICAgOiBtX2RlY29k
ZXIoMCkKLXsKLSAgICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uIGFyZSBpZ25vcmVkLgotfQorICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAKLUltYWdlU291
cmNlOjp+SW1hZ2VTb3VyY2UoKQotewotICAgIGNsZWFyKHRydWUpOwotfQorICAgIHZvaWQgc2V0
RGF0YShDRkRhdGFSZWYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2b2lkIHNldERhdGEo
U2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCi12b2lkIEltYWdlU291cmNl
OjpjbGVhcihib29sIGRlc3Ryb3lBbGxGcmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgSW1h
Z2VJTyBkaXNjYXJkIHByZXZpb3VzbHkgZGVjb2RlZCBpbWFnZSBmcmFtZXMgaWYgdGhlIGNsaWVu
dAotICAgIC8vIGFwcGxpY2F0aW9uIG5vIGxvbmdlciBob2xkcyByZWZlcmVuY2VzIHRvIHRoZW0s
IHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB0aHJvdyBhd2F5Ci0gICAgLy8gdGhlIGRlY29kZXIgdW5s
ZXNzIHdlJ3JlIGV4cGxpY2l0bHkgYXNrZWQgdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1lcy4K
LSAgICBpZiAoIWRlc3Ryb3lBbGxGcmFtZXMpCi0gICAgICAgIHJldHVybjsKK3Byb3RlY3RlZDoK
KyAgICBJbWFnZURlY29kZXIoKTsKKyAgICAKKyAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOwor
ICAgIENHSW1hZ2VTb3VyY2VSZWYgbV9uYXRpdmVEZWNvZGVyOworfTsKIAotICAgIGlmIChtX2Rl
Y29kZXIpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKG1fZGVjb2Rlcik7Ci0gICAgICAgIG1fZGVjb2Rl
ciA9IDA7Ci0gICAgfQotICAgIGlmIChkYXRhKQotICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERh
dGFSZWNlaXZlZCk7Ci19Citjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5
QVBOR1VuY2xhbXBlZERlbGF5VGltZSA9IENGU1RSKCJVbmNsYW1wZWREZWxheVRpbWUiKTsKK2Nv
bnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HRGVsYXlUaW1lID0gQ0ZT
VFIoIkRlbGF5VGltZSIpOworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0
eUFQTkdMb29wQ291bnQgPSBDRlNUUigiTG9vcENvdW50Iik7CisKK2NvbnN0IENGU3RyaW5nUmVm
IGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VT
aG91bGRQcmVmZXJSR0IzMiIpOworY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTa2lw
TWV0YWRhdGEgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEiKTsKIAogc3RhdGlj
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCiB7CkBAIC0xMzUsNjQgKzEyNyw2IEBAIHN0
YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluCiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKLWJvb2wgSW1h
Z2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyOwot
fQotCi12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFtX2RlY29k
ZXIpCi0gICAgICAgIG1fZGVjb2RlciA9IENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1lbnRhbCgw
KTsKLSAgICAvLyBPbiBNYWMgdGhlIE5TRGF0YSBpbnNpZGUgdGhlIFNoYXJlZEJ1ZmZlciBjYW4g
YmUgc2VjcmV0bHkgYXBwZW5kZWQgdG8gd2l0aG91dCB0aGUgU2hhcmVkQnVmZmVyJ3Mga25vd2xl
ZGdlLiAgV2UgdXNlIFNoYXJlZEJ1ZmZlcidzIGFiaWxpdHkKLSAgICAvLyB0byB3cmFwIGl0c2Vs
ZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBhcm91bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlP
IGlzIHJlYWxseSBsb29raW5nIGF0IHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgQ0dJbWFnZVNvdXJj
ZVVwZGF0ZURhdGEobV9kZWNvZGVyLCBkYXRhLT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0
YVJlY2VpdmVkKTsKLSNlbHNlCi0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIG1fZGVjb2Rl
ciA9IENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1lbnRhbCgwKTsKLSAgICAvLyBDcmVhdGUgYSBD
R0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgZGF0YS0+cmVmKCk7
Ci0gICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0UG9zaXRpb24gY2FsbGJhY2sgcmF0aGVyIHRo
YW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNhdXNlIFNoYXJlZEJ1ZmZlcgotICAgIC8vIGRv
ZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3duIHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1
YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNoCi0gICAgLy8gaXMgYSByZXF1aXJlbWVu
dCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVyIGNhbGxiYWNrLgotICAgIENHRGF0YVByb3Zp
ZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJhY2tzID0geyAwLCAwLCAwLCBzaGFyZWRC
dWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1ZmZlclJlbGVhc2UgfTsKLSAgICBSZXRh
aW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJv
dmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3Mp
KTsKLSAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVByb3ZpZGVyKG1fZGVjb2RlciwgZGF0YVBy
b3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2VuZGlmCi19Ci0KLVN0cmluZyBJbWFn
ZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAotewotICAgIGlmICghbV9kZWNvZGVy
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VU
eXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKLSAgICByZXR1cm4gV2ViQ29y
ZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7
Ci19Ci0KLVN1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JT
Y2FsZShmbG9hdCBzY2FsZSkgY29uc3QKLXsKLSAgICAvLyBUaGVyZSBhcmUgZm91ciBzdWJzYW1w
bGluZyBsZXZlbHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1eC4KLSAg
ICBmbG9hdCBjbGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6bWluPGZs
b2F0PigxLCBzY2FsZSkpOwotICAgIGludCByZXN1bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBl
ZFNjYWxlKSk7Ci0gICAgQVNTRVJUKHJlc3VsdCA+PTAgJiYgcmVzdWx0IDw9IDMpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCi17
Ci0gICAgLy8gUmFnbmFyb3MgeWVsbHM6IFRPTyBTT09OISBZb3UgaGF2ZSBhd2FrZW5lZCBtZSBU
T08gU09PTiwgRXhlY3V0dXMhCi0gICAgaWYgKENHSW1hZ2VTb3VyY2VHZXRTdGF0dXMobV9kZWNv
ZGVyKSA8IGtDR0ltYWdlU3RhdHVzSW5jb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIDAsIGltYWdl
U291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXko
aW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCi0gICAg
ICAgICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtD
R0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7Ci19Ci0KIHN0YXRpYyBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGll
cykKIHsKICAgICBBU1NFUlQoaW1hZ2VQcm9wZXJ0aWVzKTsKQEAgLTIwNSw4NyArMTM5LDQ3IEBA
IHN0YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMoQ0ZEaWN0
aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllCiAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb246OmZy
b21FWElGVmFsdWUoZXhpZlZhbHVlKTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6YWxsb3dTdWJz
YW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3QKKyNpZiAhUExBVEZPUk0oQ09DT0Ep
CitzaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKHZvaWQqIGluZm8sIHZvaWQq
IGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkKIHsKLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVBy
b3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkp
KTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENG
RGljdGlvbmFyeVJlZiBqZmlmUHJvcGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0
eUpGSUZEaWN0aW9uYXJ5KSk7Ci0gICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENG
Qm9vbGVhblJlZiBpc1Byb2dDRkJvb2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKGpmaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJv
Z3Jlc3NpdmUpKTsKLSAgICAgICAgaWYgKGlzUHJvZ0NGQm9vbCkgewotICAgICAgICAgICAgYm9v
bCBpc1Byb2dyZXNzaXZlID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKLSAgICAg
ICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcg
cmVuZGVyaW5nIHZlcnkgbGFyZ2UgcHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3Np
dmUKLSAgICAgICAgICAgIC8vIGltYWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdo
dCBub3cuIFVudGlsIHRoaXMgaXMgZml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUg
aW1hZ2VzLiBUaGlzCi0gICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIg
bGFyZ2UgaW1hZ2UgY2hlY2sgYW5kIHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KLSAgICAgICAgICAg
IC8vIEZJWE1FOiBSZW1vdmUgb25jZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjov
L3Byb2JsZW0vNTE5MTQxOD4pCi0gICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKKyAgICBzaXplX3Qgc291cmNlU2l6ZSA9IHNoYXJl
ZEJ1ZmZlci0+c2l6ZSgpOworICAgIGlmIChwb3NpdGlvbiA+PSBzb3VyY2VTaXplKQorICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9
IHNoYXJlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247CisgICAgc2l6ZV90IGFtb3VudCA9IHN0
ZDo6bWluPHNpemVfdD4oY291bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlvbik7CisgICAgbWVtY3B5
KGJ1ZmZlciwgc291cmNlLCBhbW91bnQpOworICAgIHJldHVybiBhbW91bnQ7CiB9CiAKLUludFNp
emUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGlu
Z0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbikgY29uc3QKK3ZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogewot
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3Vy
Y2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSAgICBpZiAoIXByb3BlcnRp
ZXMpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBpbnQgd2lkdGggPSAwOwotICAg
IGludCBoZWlnaHQgPSAwOwotICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxX
aWR0aCk7Ci0gICAgaWYgKG51bSkKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51
bWJlckludFR5cGUsICZ3aWR0aCk7Ci0gICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdodCk7
Ci0gICAgaWYgKG51bSkKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlcklu
dFR5cGUsICZoZWlnaHQpOwotCi0gICAgaWYgKChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSAmJiBvcmllbnRhdGlvbkZyb21Q
cm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCi0gICAgICAg
IHJldHVybiBJbnRTaXplKGhlaWdodCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIEludFNpemUod2lk
dGgsIGhlaWdodCk7CisgICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2Fz
dDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKKyAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7CiB9Ci0K
LUltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0CisjZW5kaWYKKyAgICAKK0ltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKCkK
KyAgICA6IG1fbmF0aXZlRGVjb2RlcihDR0ltYWdlU291cmNlQ3JlYXRlSW5jcmVtZW50YWwoMCkp
CiB7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0Yo
Q0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFn
ZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAg
cmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwotCi0gICAgcmV0dXJuIG9yaWVudGF0aW9u
RnJvbVByb3BlcnRpZXMocHJvcGVydGllcy5nZXQoKSk7CiB9Ci0KLUludFNpemUgSW1hZ2VTb3Vy
Y2U6OnNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAor
ICAgIAorSW1hZ2VEZWNvZGVyOjp+SW1hZ2VEZWNvZGVyKCkKIHsKLSAgICByZXR1cm4gZnJhbWVT
aXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7CisgICAgQ0ZSZWxlYXNlKG1fbmF0aXZlRGVj
b2Rlcik7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNw
b3QpIGNvbnN0CitTdWJzYW1wbGluZ0xldmVsIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdMZXZl
bEZvclNjYWxlKGZsb2F0IHNjYWxlLCBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGlu
Z0xldmVsKQogewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBp
bWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IHggPSAtMSwgeSA9IC0xOwotICAgIENGTnVtYmVy
UmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBDRlNUUigiaG90c3BvdFgiKSk7Ci0gICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFs
dWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBDRlNUUigiaG90c3BvdFkiKSk7Ci0gICAgaWYgKCFudW0gfHwgIUNGTnVtYmVyR2V0VmFs
dWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaG90
U3BvdCA9IEludFBvaW50KHgsIHkpOwotICAgIHJldHVybiB0cnVlOworICAgIC8vIFRoZXJlIGFy
ZSBmb3VyIHN1YnNhbXBsaW5nIGxldmVsczogMCA9IDF4LCAxID0gMC41eCwgMiA9IDAuMjV4LCAz
ID0gMC4xMjV4LgorICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IHN0ZDo6bWF4PGZsb2F0PigwLjEy
NSwgc3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxlKSk7CisgICAgU3Vic2FtcGxpbmdMZXZlbCByZXN1
bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBlZFNjYWxlKSk7CisgICAgQVNTRVJUKHJlc3VsdCA+
PTAgJiYgcmVzdWx0IDw9IDMpOworICAgIHJldHVybiBzdGQ6Om1pbihyZXN1bHQsIG1heGltdW1T
dWJzYW1wbGluZ0xldmVsKTsKIH0KIAotc2l6ZV90IEltYWdlU291cmNlOjpieXRlc0RlY29kZWRU
b0RldGVybWluZVByb3BlcnRpZXMoKSBjb25zdAorc2l6ZV90IEltYWdlRGVjb2Rlcjo6Ynl0ZXNE
ZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkKIHsKICAgICAvLyBNZWFzdXJlZCBieSB0cmFj
aW5nIG1hbGxvYy9jYWxsb2MgY2FsbHMgb24gTWFjIE9TIDEwLjYuNiwgeDg2XzY0LgogICAgIC8v
IEEgbm9uLXplcm8gdmFsdWUgZW5zdXJlcyBjYWNoZWQgaW1hZ2VzIHdpdGggbm8gZGVjb2RlZCBm
cmFtZXMgc3RpbGwgZW50ZXIKQEAgLTI5NiwxMiArMTkwLDQxIEBAIHNpemVfdCBJbWFnZVNvdXJj
ZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKICAgICByZXR1cm4g
MTMwODg7CiB9CiAgICAgCi1pbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCitTdHJp
bmcgSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFp
bml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOworICAgIENG
U3RyaW5nUmVmIGltYWdlU291cmNlVHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZl
RGVjb2Rlcik7CisgICAgcmV0dXJuIFdlYkNvcmU6OnByZWZlcnJlZEV4dGVuc2lvbkZvckltYWdl
U291cmNlVHlwZShpbWFnZVNvdXJjZVR5cGUpOworfQogCi0gICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVz
KG1fZGVjb2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKK2Jvb2wgSW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAoreworICAgIC8vIFJhZ25hcm9zIHllbGxzOiBU
T08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1dHVzIQorICAgIGlm
IChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fbmF0aXZlRGVjb2RlcikgPCBrQ0dJbWFnZVN0YXR1
c0luY29tcGxldGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IGltYWdlMFByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5
UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNvdXJjZU9wdGlvbnMo
KS5nZXQoKSkpOworICAgIGlmICghaW1hZ2UwUHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGltYWdlMFByb3BlcnRp
ZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKQorICAgICAgICAmJiBDRkRpY3Rp
b25hcnlDb250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5
UGl4ZWxIZWlnaHQpOworfQorCitJbnRTaXplIEltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fc2l6ZSA9IGZyYW1lU2l6ZUF0
SW5kZXgoMCwgMCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKworc2l6ZV90IEltYWdlRGVjb2Rl
cjo6ZnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENHSW1hZ2VTb3VyY2VHZXRDb3Vu
dChtX25hdGl2ZURlY29kZXIpOworfQorCitpbnQgSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291
bnQoKSBjb25zdAoreworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMg
PSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllcyhtX25hdGl2ZURlY29kZXIsIGlt
YWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CiAgICAgaWYgKCFwcm9wZXJ0aWVzKQogICAgICAg
ICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwogCkBAIC0zMzUsNjEgKzI1OCw2NyBAQCBpbnQg
SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCiAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25l
OwogfQogCi1zaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAorYm9vbCBJbWFn
ZURlY29kZXI6OmhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZGVjb2RlciA/IENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX2RlY29kZXIpIDogMDsKKyAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291
cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VP
cHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGludCB4ID0gLTEsIHkgPSAtMTsKKyAgICBDRk51bWJlclJlZiBudW0gPSAo
Q0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIo
ImhvdHNwb3RYIikpOworICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NG
TnVtYmVySW50VHlwZSwgJngpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBudW0gPSAo
Q0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIo
ImhvdHNwb3RZIikpOworICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NG
TnVtYmVySW50VHlwZSwgJnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoeCA8
IDAgfHwgeSA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhvdFNwb3QgPSBJbnRQ
b2ludCh4LCB5KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmV0YWluUHRyPENHSW1hZ2VSZWY+
IEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNh
bXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpmcmFt
ZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsKSBjb25zdAogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VP
cHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7CisgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVz
QXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2Ft
cGxpbmdMZXZlbCkuZ2V0KCkpKTsKIAotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyA8cmRhcjov
L3Byb2JsZW0vNzM3MTE5OD4gLSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUgZGVmYXVsdCBjYWNo
aW5nIGJlaGF2aW91ciBpbiBpT1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1RyYW5zaWVudAotICAg
IC8vIHdoaWNoIGNhdXNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9yIHVzIHNpbmNlIHRo
ZSBpbWFnZXMgaGFkIHRvIGJlIHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkgdGltZSB3ZSBjYWxs
ZWQKLSAgICAvLyBDR0NvbnRleHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENHIHRvIGNhY2hlIHRo
ZSBkcmF3biBpbWFnZXMuIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2Njc1NT4gLQotICAg
IC8vIENvcmVHcmFwaGljcyBuZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1hZ2VDYWNoaW5nVGVt
cG9yYXJ5IHNpbmNlIGl0J3Mgc3RpbGwgbm90IHRoZSBkZWZhdWx0LgotI2lmIENPTVBJTEVSKENM
QU5HKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotI2VuZGlmCi0gICAgQ0dJ
bWFnZVNldENhY2hpbmdGbGFncyhpbWFnZS5nZXQoKSwga0NHSW1hZ2VDYWNoaW5nVGVtcG9yYXJ5
KTsKLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNl
bmRpZgotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3Vy
Y2VHZXRUeXBlKG1fZGVjb2Rlcik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVU
SSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFnZSIpOworICAgIGludCB3aWR0aCA9IDA7Cisg
ICAgaW50IGhlaWdodCA9IDA7CisgICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNG
RGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhl
bFdpZHRoKTsKKyAgICBpZiAobnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NG
TnVtYmVySW50VHlwZSwgJndpZHRoKTsKIAotICAgIGlmICghaW1hZ2VVVEkpCi0gICAgICAgIHJl
dHVybiBpbWFnZTsKKyAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKKyAgICBpZiAo
bnVtKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhl
aWdodCk7CiAKLSAgICBpZiAoIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVUSSkpCi0gICAgICAgIHJl
dHVybiBpbWFnZTsKLSAgICAKLSAgICAvLyBJZiBpdCBpcyBhbiB4Ym0gaW1hZ2UsIG1hc2sgb3V0
IGFsbCB0aGUgd2hpdGUgYXJlYXMgdG8gcmVuZGVyIHRoZW0gdHJhbnNwYXJlbnQuCi0gICAgY29u
c3QgQ0dGbG9hdCBtYXNraW5nQ29sb3JzWzZdID0gezI1NSwgMjU1LCAgMjU1LCAyNTUsIDI1NSwg
MjU1fTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbWFza2VkSW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9ycyhpbWFnZS5nZXQoKSwgbWFza2luZ0NvbG9ycykp
OwotICAgIHJldHVybiBtYXNrZWRJbWFnZSA/IG1hc2tlZEltYWdlIDogaW1hZ2U7CisgICAgcmV0
dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQorYm9vbCBJbWFnZURlY29kZXI6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChmcmFt
ZUNvdW50KCkpOwotICAgIHJldHVybiBDR0ltYWdlU291cmNlR2V0U3RhdHVzQXRJbmRleChtX2Rl
Y29kZXIsIGluZGV4KSA9PSBrQ0dJbWFnZVN0YXR1c0NvbXBsZXRlOworICAgIHJldHVybiBDR0lt
YWdlU291cmNlR2V0U3RhdHVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4KSA9PSBrQ0dJ
bWFnZVN0YXR1c0NvbXBsZXRlOwogfQogCi1mbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlv
bkF0SW5kZXgoc2l6ZV90IGluZGV4KQorSW1hZ2VPcmllbnRhdGlvbiBJbWFnZURlY29kZXI6Om9y
aWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbml0aWFs
aXplZCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4
KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Cisg
ICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRp
b247CisKKyAgICByZXR1cm4gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdl
dCgpKTsKK30KIAorZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QgaW5kZXgpIGNvbnN0Cit7CiAgICAgZmxvYXQgZHVyYXRpb24gPSAwOwotICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5
UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKCku
Z2V0KCkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRv
cHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2Rlciwg
aW5kZXgsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CiAgICAgaWYgKHByb3BlcnRpZXMp
IHsKICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5
UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVy
dHlHSUZEaWN0aW9uYXJ5KTsKICAgICAgICAgaWYgKGdpZlByb3BlcnRpZXMpIHsKQEAgLTQyMCwx
NSArMzQ5LDM0IEBAIGZsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QgaW5kZXgpCiAgICAgcmV0dXJuIGR1cmF0aW9uOwogfQogCi1ib29sIEltYWdlU291cmNlOjpm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCitib29sIEltYWdlRGVjb2Rlcjo6YWxs
b3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
ZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBGSVhNRTogd2h5IGRvZXNuJ3QgdGhp
cyByZXR1cm4gdHJ1ZT8KKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVz
ID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVj
b2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIXByb3BlcnRp
ZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGRGljdGlvbmFyeVJlZiBqZmlmUHJv
cGVydGllcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUpGSUZEaWN0aW9uYXJ5KSk7Cisg
ICAgaWYgKGpmaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGQm9vbGVhblJlZiBpc1Byb2dDRkJv
b2wgPSBzdGF0aWNfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGpmaWZQ
cm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5SkZJRklzUHJvZ3Jlc3NpdmUpKTsKKyAgICAgICAg
aWYgKGlzUHJvZ0NGQm9vbCkgeworICAgICAgICAgICAgYm9vbCBpc1Byb2dyZXNzaXZlID0gQ0ZC
b29sZWFuR2V0VmFsdWUoaXNQcm9nQ0ZCb29sKTsKKyAgICAgICAgICAgIC8vIFdvcmthcm91bmQg
Zm9yIDxyZGFyOi8vcHJvYmxlbS81MTg0NjU1PiAtIEhhbmcgcmVuZGVyaW5nIHZlcnkgbGFyZ2Ug
cHJvZ3Jlc3NpdmUgSlBFRy4gRGVjb2RpbmcgcHJvZ3Jlc3NpdmUKKyAgICAgICAgICAgIC8vIGlt
YWdlcyBoYW5ncyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSByaWdodCBub3cuIFVudGlsIHRoaXMgaXMg
Zml4ZWQsIGRvbid0IHN1Yi1zYW1wbGUgcHJvZ3Jlc3NpdmUgaW1hZ2VzLiBUaGlzCisgICAgICAg
ICAgICAvLyB3aWxsIGNhdXNlIHRoZW0gdG8gZmFpbCBvdXIgbGFyZ2UgaW1hZ2UgY2hlY2sgYW5k
IHRoZXkgd29uJ3QgYmUgZGVjb2RlZC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25j
ZSB1bmRlcmx5aW5nIGlzc3VlIGlzIGZpeGVkICg8cmRhcjovL3Byb2JsZW0vNTE5MTQxOD4pCisg
ICAgICAgICAgICByZXR1cm4gIWlzUHJvZ3Jlc3NpdmU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KIAorYm9vbCBJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKICAgICBpZiAoIWZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgoaW5kZXgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIENGU3RyaW5nUmVmIGltYWdl
VHlwZSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7CisgICAgQ0ZTdHJpbmdSZWYg
aW1hZ2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUobV9uYXRpdmVEZWNvZGVyKTsKIAogICAg
IC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFnZSB0eXBlIG9yIHRoZSBpbWFnZSB0
eXBlIGlzIEpQRUcsIGJlY2F1c2UKICAgICAvLyBKUEVHIGRvZXMgbm90IHN1cHBvcnQgYWxwaGEg
dHJhbnNwYXJlbmN5LgpAQCAtNDQxLDEwICszODksMjM1IEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmZy
YW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGZy
YW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAg
IHJldHVybiBmcmFtZVNpemUuYXJlYSgpICogNDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VE
ZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5n
TGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9uYXRp
dmVEZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdl
dCgpKSk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzEx
OTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIg
aW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3aGljaCBjYXVz
ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0
byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisgICAgLy8gQ0dD
b250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2Vz
LiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBDb3JlR3JhcGhp
Y3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBp
dCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorICAgICAgICBDR0ltYWdlU2V0Q2Fj
aGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3JhcnkpOworI2lmIENP
TVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQorCisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VVVEkgPSBDR0ltYWdl
U291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmlu
Z1JlZiB4Ym1VVEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1hZ2UiKTsKKworICAgIGlmICgh
aW1hZ2VVVEkpCisgICAgICAgIHJldHVybiBpbWFnZTsKKworICAgIGlmICghQ0ZFcXVhbChpbWFn
ZVVUSSwgeGJtVVRJKSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAgLy8gSWYgaXQgaXMg
YW4geGJtIGltYWdlLCBtYXNrIG91dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVt
IHRyYW5zcGFyZW50LgorICAgIGNvbnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUs
IDI1NSwgIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1h
c2tlZEltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2Uu
Z2V0KCksIG1hc2tpbmdDb2xvcnMpKTsKKyAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBtYXNrZWRJ
bWFnZSA6IGltYWdlOworfQorCit2b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShDRkRhdGFSZWYg
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURh
dGEobV9uYXRpdmVEZWNvZGVyLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCit2b2lkIElt
YWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGlu
c2lkZSB0aGUgU2hhcmVkQnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0
IHRoZSBTaGFyZWRCdWZmZXIncyBrbm93bGVkZ2UuCisgICAgLy8gV2UgdXNlIFNoYXJlZEJ1ZmZl
cidzIGFiaWxpdHkgdG8gd3JhcCBpdHNlbGYgaW5zaWRlIENGRGF0YSB0byBnZXQgYXJvdW5kIHRo
aXMsIGVuc3VyaW5nIHRoYXQgSW1hZ2VJTyBpcworICAgIC8vIHJlYWxseSBsb29raW5nIGF0IHRo
ZSBTaGFyZWRCdWZmZXIuCisgICAgc2V0RGF0YShkYXRhLT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwg
YWxsRGF0YVJlY2VpdmVkKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YShtX25hdGl2ZURl
Y29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vs
c2UKKyAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFwIHRoZSBTaGFyZWRCdWZm
ZXIuCisgICAgZGF0YS0+cmVmKCk7CisgICAgLy8gV2UgdXNlIHRoZSBHZXRCeXRlc0F0UG9zaXRp
b24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVyIG9uZSBiZWNhdXNlIFNo
YXJlZEJ1ZmZlcgorICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gbG9jayBkb3duIHRo
ZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IG1vdmUsIHdoaWNoCisg
ICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5dGVQb2ludGVyIGNhbGxi
YWNrLgorICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJhY2tz
ID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24sIHNoYXJlZEJ1ZmZl
clJlbGVhc2UgfTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRl
ciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0YSwgZGF0YS0+c2l6ZSgp
LCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKKyAgICBDR0ltYWdlU291cmNlVXBkYXRlRGF0YVByb3Zp
ZGVyKG1fbmF0aXZlRGVjb2RlciwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQp
OworI2VuZGlmCit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxw
aGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKK3sKKyAg
ICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGFy
ZSBpZ25vcmVkLgorfQorCitJbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkKK3sKKyAgICBjbGVh
cih0cnVlKTsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsRnJh
bWVzLCBzaXplX3QsIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgLy8gUmVjZW50IHZlcnNpb25zIG9mIEltYWdlSU8gZGlzY2FyZCBwcmV2aW91c2x5IGRl
Y29kZWQgaW1hZ2UgZnJhbWVzIGlmIHRoZSBjbGllbnQKKyAgICAvLyBhcHBsaWNhdGlvbiBubyBs
b25nZXIgaG9sZHMgcmVmZXJlbmNlcyB0byB0aGVtLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdGhy
b3cgYXdheQorICAgIC8vIHRoZSBkZWNvZGVyIHVubGVzcyB3ZSdyZSBleHBsaWNpdGx5IGFza2Vk
IHRvIGRlc3Ryb3kgYWxsIG9mIHRoZSBmcmFtZXMuCisgICAgaWYgKCFkZXN0cm95QWxsRnJhbWVz
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgbV9k
ZWNvZGVyID0gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgc2V0RGF0YShk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorICAgIAordm9pZCBJbWFnZVNvdXJjZTo6ZW5zdXJl
RGVjb2RlcklzQ3JlYXRlZChTaGFyZWRCdWZmZXIqKQoreworICAgIGlmIChpbml0aWFsaXplZCgp
KQorICAgICAgICByZXR1cm47CisgICAgbV9kZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUo
KTsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoZGF0YSk7CisgICAgCisgICAgaWYgKCFp
bml0aWFsaXplZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRh
UmVjZWl2ZWQpOworfQorCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZmlsZW5hbWVF
eHRlbnNpb24oKSA6IFN0cmluZygpOworfQorICAgIAorU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNv
dXJjZTo6Y2FsY3VsYXRlTWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdAoreworICAgIGlm
ICghbV9hbGxvd1N1YnNhbXBsaW5nIHx8ICFhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgo
MCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVmFsdWVzIGNob3NlbiB0byBiZSBhcHBy
b3ByaWF0ZSBmb3IgaU9TLgorICAgIGNvbnN0IGludCBjTWF4aW11bUltYWdlQXJlYUJlZm9yZVN1
YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OworICAgIGNvbnN0IFN1YnNhbXBsaW5nTGV2ZWwg
bWF4U3Vic2FtcGxpbmdMZXZlbCA9IDM7CisKKyAgICBTdWJzYW1wbGluZ0xldmVsIGN1cnJlbnRM
ZXZlbCA9IDA7CisgICAgZm9yICggOyBjdXJyZW50TGV2ZWwgPD0gbWF4U3Vic2FtcGxpbmdMZXZl
bDsgKytjdXJyZW50TGV2ZWwpIHsKKyAgICAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBmcmFtZVNp
emVBdEluZGV4KDAsIGN1cnJlbnRMZXZlbCk7CisgICAgICAgIGlmIChmcmFtZVNpemUuYXJlYSgp
IDwgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiBjdXJyZW50TGV2ZWw7Cit9CisgICAgCitTdWJzYW1wbGlu
Z0xldmVsIEltYWdlU291cmNlOjptYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0Cit7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBjYWxjdWxhdGVNYXhpbXVtU3Vic2FtcGxpbmdM
ZXZlbCgpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK1N1YnNhbXBsaW5nTGV2ZWwgSW1h
Z2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoc2NhbGUs
IG1heGltdW1TdWJzYW1wbGluZ0xldmVsKCkpOworfQorCitib29sIEltYWdlU291cmNlOjppc1Np
emVBdmFpbGFibGUoKQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+
aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxp
bmdPZkZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluaXRp
YWxpemVkKCkgJiYgbV9kZWNvZGVyLT5hbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoaW5k
ZXgpOworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAg
aWYgKCFpbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIEludFNp
emUgc2l6ZSA9IG1fZGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdM
ZXZlbCk7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IG1fZGVjb2Rlci0+b3Jp
ZW50YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAKKyAgICByZXR1cm4gc2hvdWxkUmVzcGVjdElt
YWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24gJiYgb3JpZW50YXRpb24u
dXNlc1dpZHRoQXNIZWlnaHQoKSA/IHNpemUudHJhbnNwb3NlZFNpemUoKSA6IHNpemU7Cit9CisK
K0ltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPm9y
aWVudGF0aW9uQXRJbmRleChpbmRleCkgOiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKK30KKwor
SW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1lU2l6
ZUF0SW5kZXgoMCwgMCk7Cit9CisgICAgCitJbnRTaXplIEltYWdlU291cmNlOjpzaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgw
LCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6Omdl
dEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluaXRpYWxp
emVkKCkgJiYgbV9kZWNvZGVyLT5ob3RTcG90KGhvdFNwb3QpOworfQorCitzaXplX3QgSW1hZ2VT
b3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCk7
Cit9CisgICAgCitpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCit7CisgICAgcmV0
dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpIDogY0FuaW1h
dGlvbkxvb3BPbmNlOworfQorCitzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25z
dAoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkg
OiAwOworfQorCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsKQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOworfQorCiti
b29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoaW5kZXgpOworfQorCitmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVy
LT5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCkgOiAwOworfQorCitib29sIEltYWdlU291cmNl
OjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuICFpbml0
aWFsaXplZCgpIHx8IG1fZGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOworfQor
CiB1bnNpZ25lZCBJbWFnZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBm
cmFtZVNpemUgPSBmcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oUmVzcGVjdEltYWdlT3JpZW50YXRpb24pKTsKLSAgICBy
ZXR1cm4gZnJhbWVTaXplLndpZHRoKCkgKiBmcmFtZVNpemUuaGVpZ2h0KCkgKiA0OworICAgIElu
dFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZS5hcmVhKCkgKiA0OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cAppbmRleCBiOTY1NjU1MmYyN2UzNjgyZjZhMTQzODBmYTVlZDMzYzU3MTU0ZDZkLi45MjNjZGE2
MjZhNTIwMTI3ODhkYjNkYzY0NjQ3YTU1YTQzY2M1MjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTk1
LDM1ICs5NSwzNSBAQCBib29sIG1hdGNoZXNDVVJTaWduYXR1cmUoY2hhciogY29udGVudHMpCiAK
IH0KIAotSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZm
ZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29u
c3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRp
b24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKIHsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGVuZ3RoT2ZMb25n
ZXN0U2lnbmF0dXJlID0gMTQ7IC8vIFRvIHdpdDogIlJJRkY/Pz8/V0VCUFZQIgogICAgIGNoYXIg
Y29udGVudHNbbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJlXTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJl
LCBkYXRhLCAwKTsKICAgICBpZiAobGVuZ3RoIDwgbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJlKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAobWF0
Y2hlc0dJRlNpZ25hdHVyZShjb250ZW50cykpCi0gICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VE
ZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAgICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPihuZXcgR0lGSW1hZ2VEZWNvZGVy
KGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogCiAgICAgaWYgKG1h
dGNoZXNQTkdTaWduYXR1cmUoY29udGVudHMpKQotICAgICAgICByZXR1cm4gbmV3IFBOR0ltYWdl
RGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4obmV3IFBOR0ltYWdlRGVjb2Rl
cihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKIAogICAgIGlmICht
YXRjaGVzSUNPU2lnbmF0dXJlKGNvbnRlbnRzKSB8fCBtYXRjaGVzQ1VSU2lnbmF0dXJlKGNvbnRl
bnRzKSkKLSAgICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZURlY29kZXI+KG5ldyBJQ09JbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKSk7CiAKICAgICBpZiAobWF0Y2hlc0pQRUdTaWduYXR1cmUoY29u
dGVudHMpKQotICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoYWxwaGFPcHRpb24s
IGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZURlY29kZXI+KG5ldyBKUEVHSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogCiAjaWYgVVNFKFdFQlApCiAgICAgaWYgKG1hdGNo
ZXNXZWJQU2lnbmF0dXJlKGNvbnRlbnRzKSkKLSAgICAgICAgcmV0dXJuIG5ldyBXRUJQSW1hZ2VE
ZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAgICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPihuZXcgV0VCUEltYWdlRGVjb2Rl
cihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKICNlbmRpZgogCiAg
ICAgaWYgKG1hdGNoZXNCTVBTaWduYXR1cmUoY29udGVudHMpKQotICAgICAgICByZXR1cm4gbmV3
IEJNUEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
OworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4obmV3IEJNUElt
YWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKIAot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBJbWFnZUZyYW1lOjpJbWFn
ZUZyYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggYjM1NDdkOTRlODA4Zjg3NGFlZDlkYTBmMjkxYmVjZTIw
YTY0NjQzNy4uNTM0N2E0N2I3MjNjZDVmMDNiNjJkM2IzNTJjZjk0NTE0N2RhMGVhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgKQEAgLTI0OCw3ICsyNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8v
IFJldHVybnMgYSBjYWxsZXItb3duZWQgZGVjb2RlciBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4g
IFJldHVybnMgMCBpZgogICAgICAgICAvLyB3ZSBjYW4ndCBzbmlmZiBhIHN1cHBvcnRlZCB0eXBl
IGZyb20gdGhlIHByb3ZpZGVkIGRhdGEgKHBvc3NpYmx5CiAgICAgICAgIC8vIGJlY2F1c2UgdGhl
cmUgaXNuJ3QgZW5vdWdoIGRhdGEgeWV0KS4KLSAgICAgICAgc3RhdGljIEltYWdlRGVjb2Rlciog
Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9u
LCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZl
ciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pOwogCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRHJhZ0ltYWdlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJ
bWFnZU1hYy5tbQppbmRleCBiYmFlOTFmYThlM2MwNjY0NDdjNDY0ZDZlMzEyMDBkZTI0OGNlODNm
Li45MWM5MmU5MTJjYzIxODkyZjY1OWU2N2E5NTk1NzFmYmRkMDAyN2I4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KQEAgLTkxLDcgKzkxLDcgQEAgUmV0
YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIElt
YWdlT3JpZW50YXRpb25EZXNjcmkKICAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCppbWFnZSkpIHsK
ICAgICAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKICAgICAgICAgQml0bWFwSW1h
Z2UmIGJpdG1hcEltYWdlID0gZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KCppbWFnZSk7Ci0gICAgICAg
IEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLnNpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24oZGVzY3JpcHRpb24pOworICAgICAgICBJbnRTaXplIHNpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBiaXRtYXBJbWFnZS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9u
KCk7CiAKICAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkg
PT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCiAgICAgICAgICAgICBvcmllbnRhdGlvbiA9IGJp
dG1hcEltYWdlLm9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275066</attachid>
            <date>2016-03-28 16:51:28 -0700</date>
            <delta_ts>2016-03-29 09:18:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155422-20160328165131.patch</filename>
            <type>text/plain</type>
            <size>65421</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiYjdjMTYwZDYxYjgx
MDk3OWNkZTU4OWVkMGNlODY2M2RiNDQ3ZC4uNzQzOGIxOTk3ZmE3NTY2ZTZjMWY3NTgzMDM4Zjdk
MDQ1ZjZhYWU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NCBAQAorMjAxNi0wMy0yOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0
ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBpbnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1h
Z2VTb3VyY2VSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTQyMgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAg
ICBNb3ZlIHRoZSBpbWFnZSBDRyBkZWNvZGluZyBjb2RlIGZyb20gdGhlIGNsYXNzIEltYWdlU291
cmNlIG91dCB0byBhIG5ldworICAgICAgICBjbGFzcyBuYW1lZCBJbWFnZURlY29kZXIuIFRoZSBw
dXJwb3NlIG9mIHRoaXMgc3BsaXQgaXMgdG8gdW5pZnkgdGhlIGNvZGUKKyAgICAgICAgb2YgdGhl
IEltYWdlU291cmNlIGZvciBhbGwgcGxhdGZvcm1zLiBUaGlzIGNsYXNzIHNob3VsZCBiZSBhIGNv
bnRhaW5lcgorICAgICAgICBmb3IgdGhlIEltYWdlRGVjb2Rlci4gQWxsIHRoZSBkaXJlY3QgZnJh
bWUgbWFuaXB1bGF0aW9uIGxpa2UgcXVlcnlpbmcgdGhlCisgICAgICAgIGZyYW1lIG1ldGFkYXRh
IG9yIGNyZWF0aW5nIGEgZnJhbWUgaW1hZ2Ugc2hvdWxkIGJlIHRoZSByZXNwb25zaWJpbGl0eSBv
ZgorICAgICAgICB0aGUgSW1hZ2VEZWNvZGVyLiBUaGUgSW1hZ2VTb3VyY2Ugd2lsbCBiZSByZXNw
b25zaWJsZSBvZiB0aGUgaW1hZ2UgZnJhbWUKKyAgICAgICAgY2FjaGluZy4gV2hlbiByZXNwb25k
aW5nIHRvIGEgZnJhbWUgbWV0YWRhdGEgcXVlcnksIGZvciBleGFtcGxlLiB0aGUKKyAgICAgICAg
SW1hZ2VTb3VyY2UgY2hlY2tzIGl0cyBjYWNoZSBmaXJzdC4gSWYgYW4gZW50cnkgZG9lcyBub3Qg
ZXhpc3QgZm9yIHRoZQorICAgICAgICByZXF1ZXN0ZWQgZnJhbWUsIHRoZSBJbWFnZVNvdXJjZSB3
aWxsIGNhY2hlIHRoZSBpbWFnZSBhbmQgdGhlIG1ldGFkYXRhCisgICAgICAgIG9mIHRoaXMgZnJh
bWUuIFRoZSBJbWFnZVNvdXJjZSB3aWxsIHJlc3BvbmQgYXQgdGhlIGVuZCBmcm9tIHRoZSBpbWFn
ZQorICAgICAgICBmcmFtZSBjYWNoZS4KKyAKKyAgICAgICAgVGhlIHBsYW4gYWZ0ZXIgdGhpcyBw
YXRjaCBpcyBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgLS0gTW92ZSB0aGUgbmV3IGNs
YXNzIHRvIHNlcGFyYXRlIGZpbGVzCisgICAgICAgICAgICAtLSBNZXJnZSB0aGUgSW1hZ2VTb3Vy
Y2UuY3BwIGFuZCBJbWFnZVNvdXJjZUNHLmNwcC4gaW4gb25lIGZpbGUKKyAgICAgICAgICAgIC0t
IE1vdmUgY2FjaGluZyB0aGUgRnJhbWVEYXRhIGZyb20gQml0bWFwSW1hZ2UgdG8gSW1hZ2VTb3Vy
Y2UuCisgCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcik6CisgICAgICAgIEJp
dG1hcEltYWdlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgZG9lcyBub3QgdGFrZSBhbnkg
YXJndW1lbnQgbm93LgorICAgICAgICBGaXggdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBhbmQg
ZGVsZXRlIHRoZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGNvZGUgCisgICAgICAgIHNpbmNlIHRo
ZSBjb2RlIGlzIHRoZSBzYW1lIGZvciB0aGUgdHdvIGNhc2VzLgorIAorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjp1cGRhdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaXplUmVz
cGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1h
Z2UpOgorICAgICAgICBBbiBpbWFnZSBjYW4gaGF2ZSB0d28gc2l6ZXM6IHNpemUoKSBhbmQgc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpLiBUaGUKKyAgICAgICAgc2l6ZVJlc3BlY3RpbmdPcmll
bnRhdGlvbigpIGlzIHRoZSB0cmFuc3Bvc2Ugb2Ygc2l6ZSgpIGlmZiB0aGUgaW1hZ2UKKyAgICAg
ICAgb3JpZW50YXRpb24gaGFzIHVzZXNXaWR0aEFzSGVpZ2h0KCkgaXMgdHJ1ZS4gU28gdGhlcmUg
aXMgbm8gbmVlZCBmb3IgdGhlCisgICAgICAgIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBh
cmd1bWVudC4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIG1lbWJlcnMKKyAgICAgICAgbV9p
bWFnZU9yaWVudGF0aW9uIG9yIG1fc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24uIEFsc28g
bW92ZQorICAgICAgICBtX2FsbG93U3Vic2FtcGxpbmcgYW5kIG1fbWluaW11bVN1YnNhbXBsaW5n
TGV2ZWwgKHdoaWNoIHNob3VsZCBiZSBuYW1lZAorICAgICAgICBtX21heGltdW1TdWJzYW1wbGlu
Z0xldmVsKSB0byBJbWFnZVNvdXJjZSBpbnN0ZWFkLgorCisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOiBSZXBsYWNlIERlZmF1bHRJbWFnZU9y
aWVudGF0aW9uCisgICAgICAgIGJ5IEltYWdlT3JpZW50YXRpb24oKS4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHVtcCk6IE1vdmUgZHVtcGluZyB0aGUgaW1hZ2Ug
bWV0YWRhdGEgdG8gdGhlCisgICAgICAgIEltYWdlU291cmNlLgorICAgICAgICAKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZU9yaWVu
dGF0aW9uOjpJbWFnZU9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlT3JpZW50
YXRpb246OmZyb21FWElGVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VPcmllbnRhdGlv
bjo6b3BlcmF0b3IgSW1hZ2VPcmllbnRhdGlvbkVudW0pOgorICAgICAgICBBZGQgYSBjYXN0aW5n
IG9wZXJhdG9yIHRvIEltYWdlT3JpZW50YXRpb24gc28gaXQgY2FuIGJlIGR1bXBlZCBhcyBlbnVt
CisgICAgICAgIHZhbHVlLiBBbHNvIGFkZCBhIGRlZmF1bHQgY29uc3RydWN0b3IgYW5kIG1ha2Ug
dGhlIG90aGVyIGNvbnN0cnVjdG9yIGJlCisgICAgICAgIGV4cGxpY2l0LiBBbGwgdGhlIHJ2YWx1
ZXMgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gc2hvdWxkIGJlIHJlcGxhY2VkIGJ5CisgICAgICAg
IEltYWdlT3JpZW50YXRpb24oKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICBtX2RlY29k
ZXIgaXMgbm93IGEgdW5pcXVlX3B0ci4gVG8gcmVsZWFzZSBpdCwgYXNzaWduIGl0IHRvIG51bGxw
dHIuCisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVh
dGVkKTogRW5zdXJlIG1fZGVjb2RlciBpcyBjcmVhdGVkLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKTogQ2FsbCBlbnN1cmVEZWNvZGVySXNDcmVhdGVk
KCkgYmVmb3JlCisgICAgICAgIGFjdHVhbGx5IHNldHRpbmcgdGhlIGRhdGEuCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6IFVzZSBpbml0
aWFsaXplZCgpOworICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToK
KyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCisg
ICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6Om9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZy
YW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgQ2hlY2sgZm9yIGluaXRpYWxpemVkKCkgaW5zdGVh
ZCBvZiBjaGVja2luZyBtX2RlY29kZXIuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OmR1bXApOiBEdW1wIHRoZSBpbWFnZSBtZXRhZGF0YS4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOiBEZWxldGVkLgorICAgICAg
ICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOiBUaGUgaW1hZ2Ug
ZGVjb2RlciBpcyBub3cgbmFtZWQKKyAgICAgICAgSW1hZ2VEZWNvZGVyIGZvciBhbGwgcGxhdGZv
cm1zLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXpl
ZCk6IE1vdmVkIHRvIHRoZSBoZWFkZXIgZmlsZS4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNldEFsbG93U3Vic2FtcGxpbmcpOiBNb3ZlZCBmcm9tIEJpdG1hcEltYWdlLgorICAg
ICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2
ZWwpOiBEZWxldGVkLgorICAgICAgICBEZWxldGUgaW5pdGlhbGl6aW5nIG1fbWluaW11bVN1YnNh
bXBsaW5nTGV2ZWwgYW5kIGRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKCkKKyAgICAg
ICAgc2luY2UgdGhleSBhcmUgbW92ZWQgdG8gSW1hZ2VTb3VyY2UuCisgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk6IERlbGV0ZWQuCisgICAg
ICAgIERlbGV0ZSBtZW1iZXJzIGFuZCBtZXRob2RzIHdoaWNoIGFyZSBub3cgb3duZWQgYW5kIGNh
bGN1bGF0ZWQgYnkgSW1hZ2VTb3VyY2UuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpjcmVhdGUpOiBSZXR1cm5zIGEgQ0cgSW1hZ2VEZWNvZGVyIG9iamVjdC4KKyAgICAgICAg
CisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkZyb21Qcm9wZXJ0aWVzKTogIFJlcGxhY2Ug
RGVmYXVsdEltYWdlT3JpZW50YXRpb24KKyAgICAgICAgYnkgSW1hZ2VPcmllbnRhdGlvbigpLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKTog
Q3JlYXRlcyBhIG5hdGl2ZSBDRyBpbWFnZSBkZWNvZGVyLgorICAgICAgICAKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6fkltYWdlRGVjb2Rlcik6IFJlbGVhc2VzIHRoZSBuYXRpdmUg
Q0cgaW1hZ2UgZGVjb2Rlci4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZSk6IE1vdmVkIGZyb20gSW1hZ2VTb3VyY2UuCisg
ICAgICAgIEEgbmV3IGFyZ3VtZW50IG5hbWVkICdtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCcgaXMg
YWRkZWQgdG8gbG93IGZpbHRlciB0aGUKKyAgICAgICAgcmV0dXJuIHZhbHVlLgorICAgICAgICAK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRl
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6Om9yaWVudGF0aW9uQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6YWxsb3dTdWJzYW1wbGluZ09mRnJh
bWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAg
ICAgIFRoZSBjb2RlIG9mIHRoZXNlIGZ1bmN0aW9uIHdhcyBtb3ZlZCBmcm9tIHRoZSBmdW5jdGlv
bnMgb2YgSW1hZ2VTb3VyY2UuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjp+SW1hZ2VT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6Y2FsY3VsYXRlTWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6Om1heGltdW1TdWJzYW1wbGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0
aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmdldEhvdFNw
b3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJt
aW5lUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlv
bkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIENh
bGwgbV9kZWNvZGVyJ3MgZnVuY3Rpb24gdG8gZG8gdGhlIHJlYWwgd29yay4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZHVtcCk6IER1bXAgdGhlIGltYWdlIG1ldGFk
YXRhLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXpl
ZCk6IERlbGV0ZWQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6Cisg
ICAgICAgIENoYW5nZSB0aGUgcmV0dXJuIG9mIEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCkgdG8gYmUg
dW5pcXVlX3B0ci4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6IERlbGV0
ZSB1bm5lZWRlZCBhcmd1bWVudC4KKwogMjAxNi0wMy0yNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBJbXByb3ZlIENNYWtlIGJ1aWxkIHBlcmZv
cm1hbmNlIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZElt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5k
ZXggMTZkZDY1Y2JiMzRlM2JmYjk5NmZiYmZhZjA2N2FjNzEzN2EwMTljYi4uMDhjNWY2OTU1YWQ1
YTkzMzFhZmRkNTI4OWVjNTBhYTQ2YjE2Y2IxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCkBAIC0yNzIsMjIgKzI3MiwxNCBAQCBMYXlvdXRTaXplIENh
Y2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBmbG9hdAogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIExheW91dFNpemUo
KTsKIAotICAgIExheW91dFNpemUgaW1hZ2VTaXplKG1faW1hZ2UtPnNpemUoKSk7CisgICAgTGF5
b3V0U2l6ZSBpbWFnZVNpemU7CiAKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQot
ICAgIGlmIChyZW5kZXJlciAmJiBpczxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpKSB7Ci0gICAgICAg
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9uKHJlbmRl
cmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCByZW5kZXJlci0+c3R5bGUoKS5p
bWFnZU9yaWVudGF0aW9uKCkpOwotICAgICAgICBpZiAob3JpZW50YXRpb25EZXNjcmlwdGlvbi5y
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAg
ICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFnZT4oKm1f
aW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24ob3JpZW50YXRpb25EZXNjcmlwdGlvbikp
OwotICAgIH0KLSNlbHNlCi0gICAgaWYgKGlzPEJpdG1hcEltYWdlPigqbV9pbWFnZSkgJiYgKHJl
bmRlcmVyICYmIHJlbmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKSkKKyAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCptX2ltYWdl
KSAmJiByZW5kZXJlciAmJiByZW5kZXJlci0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24o
KSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0
U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50
YXRpb24oKSk7Ci0jZW5kaWYgLy8gRU5BQkxFKENTU19JTUFHRV9PUklFTlRBVElPTikKLQotICAg
IGVsc2UgaWYgKGlzPFNWR0ltYWdlPigqbV9pbWFnZSkgJiYgc2l6ZVR5cGUgPT0gVXNlZFNpemUp
IHsKKyAgICBlbHNlIGlmIChpczxTVkdJbWFnZT4oKm1faW1hZ2UpICYmIHNpemVUeXBlID09IFVz
ZWRTaXplKQogICAgICAgICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKG1fc3ZnSW1hZ2VDYWNoZS0+
aW1hZ2VTaXplRm9yUmVuZGVyZXIocmVuZGVyZXIpKTsKLSAgICB9CisgICAgZWxzZQorICAgICAg
ICBpbWFnZVNpemUgPSBMYXlvdXRTaXplKG1faW1hZ2UtPnNpemUoKSk7CiAKICAgICBpZiAobXVs
dGlwbGllciA9PSAxLjBmKQogICAgICAgICByZXR1cm4gaW1hZ2VTaXplOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IDRhNWM2MWE1
ZDI3YmE4NTU0M2MwMDY0NWRmOGVhMjAzMzUwYTllMWMuLmE0N2E5NzI5NTI4NTFhYTU0ZDM2MTll
NjhhNmUwOTYwMzAzNjUzZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTQ3LDkgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAg
ICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoMCkK
LSAgICAsIG1faW1hZ2VPcmllbnRhdGlvbihPcmlnaW5Ub3BMZWZ0KQotICAgICwgbV9zaG91bGRS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAg
ICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1fcmVwZXRpdGlv
bkNvdW50U3RhdHVzKFVua25vd24pCkBAIC02Miw5ICs1OSw2IEBAIEJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGluZyBy
ZW1vdmUgdGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCiAgICAgLCBtX3Byb2dyZXNzaXZlTG9hZENo
dW5rVGltZSgwKQogICAgICwgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50KDApCi0gICAgLCBt
X2FsbG93U3Vic2FtcGxpbmcodHJ1ZSkKLSNlbHNlCi0gICAgLCBtX2FsbG93U3Vic2FtcGxpbmco
ZmFsc2UpCiAjZW5kaWYKICAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9jaGVj
a2VkRm9yU29saWRDb2xvcihmYWxzZSkKQEAgLTIzNiwyMCArMjMwLDE1IEBAIHZvaWQgQml0bWFw
SW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKIH0KIAotdm9pZCBCaXRt
YXBJbWFnZTo6dXBkYXRlU2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24pIGNvbnN0Cit2b2lkIEJpdG1hcEltYWdlOjp1cGRhdGVTaXplKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fc2l6ZUF2YWlsYWJsZSB8fCBtX2hhdmVTaXplKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3NpemUgPSBtX3NvdXJjZS5zaXplKGRlc2NyaXB0aW9uKTsKLSAgICBtX3NpemVSZXNwZWN0
aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlv
bihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigp
KSk7Ci0KLSAgICBtX2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVz
Y3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBtX3Nob3VsZFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkpOworICAgIG1fc2l6ZSA9IG1fc291cmNlLnNpemUoKTsKKyAgICBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplUmVzcGVjdGluZ09yaWVudGF0
aW9uKCk7CiAKICAgICBtX2hhdmVTaXplID0gdHJ1ZTsKLQotICAgIGRldGVybWluZU1pbmltdW1T
dWJzYW1wbGluZ0xldmVsKCk7CiAgICAgZGlkRGVjb2RlUHJvcGVydGllcygpOwogfQogCkBAIC0y
NTksOSArMjQ4LDkgQEAgRmxvYXRTaXplIEJpdG1hcEltYWdlOjpzaXplKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9zaXplOwogfQogCi1JbnRTaXplIEJpdG1hcEltYWdlOjpzaXplUmVzcGVjdGluZ09y
aWVudGF0aW9uKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QK
K0ludFNpemUgQml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAog
ewotICAgIHVwZGF0ZVNpemUoZGVzY3JpcHRpb24pOworICAgIHVwZGF0ZVNpemUoKTsKICAgICBy
ZXR1cm4gbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwogfQogCkBAIC0zOTEsNyArMzgwLDcg
QEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2Ft
cGxpbmdMZXZlbCA9IHN0ZDo6bWluKG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShw
cmVzZW50YXRpb25TY2FsZUhpbnQpLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKTsKKyAgICBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBtX3NvdXJjZS5zdWJzYW1wbGluZ0xl
dmVsRm9yU2NhbGUocHJlc2VudGF0aW9uU2NhbGVIaW50KTsKIAogICAgIC8vIFdlIG1heSBoYXZl
IGNhY2hlZCBhIGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNo
IGNhc2Ugd2UgbmVlZCB0bwogICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCkBA
IC00NTIsNyArNDQxLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCkKIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5k
ZXgsIENhY2hlTWV0YWRhdGFPbmx5KSkKLSAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVu
dGF0aW9uOworICAgICAgICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogCiAgICAgaWYgKG1f
ZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5tX29yaWVudGF0aW9uOwpAQCAtNzEwLDEzICs2OTksMTAgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJj
dXJyZW50LWZyYW1lIiwgbV9jdXJyZW50RnJhbWUpOwogICAgIH0KICAgICAKLSAgICBpZiAoYWxs
b3dTdWJzYW1wbGluZygpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93LXN1YnNhbXBs
aW5nIiwgYWxsb3dTdWJzYW1wbGluZygpKTsKICAgICBpZiAobV9pc1NvbGlkQ29sb3IpCiAgICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgic29saWQtY29sb3IiLCBtX2lzU29saWRDb2xvcik7CiAgICAg
Ci0gICAgaWYgKG1faW1hZ2VPcmllbnRhdGlvbiAhPSBPcmlnaW5Ub3BMZWZ0KQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm9yaWVudGF0aW9uIiwgbV9pbWFnZU9yaWVudGF0aW9uKTsKKyAgICBt
X3NvdXJjZS5kdW1wKHRzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDBmYmEzM2JhNDE5YzEyNDE1NDE2NTMzMDFlMjk1
Y2VmODZkMTc3OS4uNTExM2Q1ZDUyNzc4MTU0ZWFmY2Y5YTM0MjdiNTJlYjE1Y2ZlOTY5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0x
MjMsNyArMTIzLDcgQEAgcHVibGljOgogCiAgICAgLy8gRmxvYXRTaXplIGR1ZSB0byBvdmVycmlk
ZS4KICAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEludFNpemUgc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uKCkgY29uc3Q7CiAKICAgICBib29sIGdldEhvdFNwb3QoSW50UG9pbnQm
KSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTc5LDE2ICsxNzksMTQgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgY2FuQW5pbWF0ZSgpOwogCi0gICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9hbGxvd1N1YnNhbXBsaW5nOyB9Ci0gICAgdm9pZCBzZXRBbGxvd1N1YnNh
bXBsaW5nKGJvb2wgYWxsb3dTdWJzYW1wbGluZykgeyBtX2FsbG93U3Vic2FtcGxpbmcgPSBhbGxv
d1N1YnNhbXBsaW5nOyB9CisgICAgdm9pZCBzZXRBbGxvd1N1YnNhbXBsaW5nKGJvb2wgYWxsb3dT
dWJzYW1wbGluZykgeyBtX3NvdXJjZS5zZXRBbGxvd1N1YnNhbXBsaW5nKGFsbG93U3Vic2FtcGxp
bmcpOyB9CiAKICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50RnJhbWU7IH0KICAgICAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCB1cGRhdGVTaXplKEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSBj
b25zdDsKLSAgICB2b2lkIGRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKCkgY29uc3Q7
CisgICAgdm9pZCB1cGRhdGVTaXplKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIFJl
cGV0aXRpb25Db3VudFN0YXR1cyB7CkBAIC0yOTUsMTEgKzI5Myw2IEBAIHByaXZhdGU6CiAgICAg
bXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsgLy8gVGhlIHNpemUgdG8gdXNlIGZvciB0aGUgb3ZlcmFs
bCBpbWFnZSAod2lsbCBqdXN0IGJlIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBpbWFnZSkuCiAgICAg
bXV0YWJsZSBJbnRTaXplIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKIAotICAgIG11dGFi
bGUgU3Vic2FtcGxpbmdMZXZlbCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsOwotCi0gICAgbXV0
YWJsZSB1bnNpZ25lZCBtX2ltYWdlT3JpZW50YXRpb24gOiA0OyAvLyBJbWFnZU9yaWVudGF0aW9u
RW51bQotICAgIG11dGFibGUgdW5zaWduZWQgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
biA6IDE7IC8vIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bQotCiAgICAgc2l6ZV90IG1fY3Vy
cmVudEZyYW1lOyAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgZnJhbWUgb2YgYW5pbWF0aW9u
LgogICAgIFZlY3RvcjxGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAvLyBBbiBhcnJheSBvZiB0aGUg
Y2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZlIHRvIHJlZiBmcmFtZXMgdG8g
cGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCkBAIC0zMjcsOCArMzIwLDYgQEAgcHJpdmF0ZToKICAg
ICBkb3VibGUgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWU7CiAgICAgdWludDE2X3QgbV9wcm9n
cmVzc2l2ZUxvYWRDaHVua0NvdW50OwogI2VuZGlmCi0KLSAgICBib29sIG1fYWxsb3dTdWJzYW1w
bGluZyA6IDE7IC8vIFdoZXRoZXIgd2Ugc2hvdWxkIGF0dGVtcHQgc3Vic2FtcGxpbmcgaWYgdGhp
cyBpbWFnZSBpcyB2ZXJ5IGxhcmdlLgogICAgIGJvb2wgbV9pc1NvbGlkQ29sb3IgOiAxOyAvLyBX
aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYSAxeDEgc29saWQgaW1hZ2UuCiAgICAgYm9vbCBtX2NoZWNr
ZWRGb3JTb2xpZENvbG9yIDogMTsgLy8gV2hldGhlciB3ZSd2ZSBjaGVja2VkIHRoZSBmcmFtZSBm
b3Igc29saWQgY29sb3IuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggYzUyNGJhMTlkNWRkYTQwNWM2MGMxNDc4MjE2Mjc5
YzBjODU5NjY4YS4uYjk1ODI3NzAyMzI4MTkzZjJiNWE5NDE4YTM0ZGY1ZmM3MDFjM2JhMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKQEAgLTMwMiw3ICszMDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogCiAjaWYgVVNFKENHKSB8
fCBVU0UoQ0FJUk8pCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29u
c3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFsLCBJ
bWFnZU9yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3Qg
RmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIs
IEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCwgSW1hZ2VPcmllbnRhdGlvbiA9IEltYWdlT3Jp
ZW50YXRpb24oKSk7CiAjZW5kaWYKIAogI2lmIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaAppbmRleCA0NjMwZGM2YzAx
Y2QzM2UzMjlhYThhNjhhNWViODRkNTdlN2I1MDRhLi4yYjM5MTA2OTAxZjJmMWRhZmFhZGEwMWJh
ZDFiZmI1ZDUyYzRjM2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZU9yaWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oCkBAIC04NCw3ICs4NCwxMiBAQCBzdHJ1Y3QgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIHsKIAogY2xhc3MgSW1hZ2VPcmllbnRhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgSW1hZ2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uRW51bSBvcmllbnRhdGlv
biA9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uKQorICAgIEltYWdlT3JpZW50YXRpb24oKQorICAg
ICAgICA6IG1fb3JpZW50YXRpb24oRGVmYXVsdEltYWdlT3JpZW50YXRpb24pCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IEltYWdlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbkVudW0g
b3JpZW50YXRpb24pCiAgICAgICAgIDogbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKICAgICB7
CiAgICAgfQpAQCAtMTAxLDE0ICsxMDYsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8g
VmFsdWVzIGRpcmVjdCBmcm9tIGltYWdlcyBtYXkgYmUgaW52YWxpZCwgaW4gd2hpY2ggY2FzZSB3
ZSB1c2UgdGhlIGRlZmF1bHQuCiAgICAgICAgIGlmIChleGlmVmFsdWUgPCBPcmlnaW5Ub3BMZWZ0
IHx8IGV4aWZWYWx1ZSA+IE9yaWdpbkxlZnRCb3R0b20pCi0gICAgICAgICAgICByZXR1cm4gRGVm
YXVsdEltYWdlT3JpZW50YXRpb247Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZU9y
aWVudGF0aW9uRW51bT4oZXhpZlZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBJbWFnZU9yaWVu
dGF0aW9uKCk7CisgICAgICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uKHN0YXRpY19jYXN0PElt
YWdlT3JpZW50YXRpb25FbnVtPihleGlmVmFsdWUpKTsKICAgICB9CiAKICAgICAvLyBUaGlzIHRy
YW5zZm9ybSBjYW4gYmUgdXNlZCBmb3IgZHJhd2luZyBhbiBpbWFnZSBhY2NvcmRpbmcgdG8gdGhl
IG9yaWVudGF0aW9uLgogICAgIC8vIEl0IHNob3VsZCBiZSB1c2VkIGluIGEgcmlnaHQtaGFuZGVk
IGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1Gcm9tRGVm
YXVsdChjb25zdCBGbG9hdFNpemUmIGRyYXduU2l6ZSkgY29uc3Q7CiAKKyAgICBpbmxpbmUgb3Bl
cmF0b3IgSW1hZ2VPcmllbnRhdGlvbkVudW0oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9u
OyB9CisgICAgCiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbWFnZU9yaWVudGF0
aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIubV9vcmllbnRhdGlvbiA9PSBtX29yaWVu
dGF0aW9uOyB9CiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbWFnZU9yaWVudGF0
aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IGFl
MzFjOTgzNTIxZDUwMDgyMjVjMWZjMzQyOWMyYzQwYTAzN2U0ODguLjBkMTAwOTYxZmYyNzYxNTM2
OTk1MGZjYmJmZTFlYzVlYzgzMTg0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTQzLDggKzQzLDcgQEAgdW5zaWduZWQgSW1h
Z2VTb3VyY2U6OnNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlID0gMTAyNCAqIDEwMjQ7CiAjZW5k
aWYKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBh
bHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIDogbV9kZWNvZGVyKDApCi0gICAgLCBtX2FscGhh
T3B0aW9uKGFscGhhT3B0aW9uKQorICAgIDogbV9hbHBoYU9wdGlvbihhbHBoYU9wdGlvbikKICAg
ICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pCiB7CiB9CkBAIC02MiwyOSArNjEsMzggQEAgdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9v
bCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSwgU2hhcmVkQnVmZmVyKgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZGVsZXRlIG1fZGVjb2RlcjsKLSAgICBtX2RlY29k
ZXIgPSAwOworICAgIG1fZGVjb2RlciA9IG51bGxwdHI7CisKICAgICBpZiAoZGF0YSkKICAgICAg
ICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1ib29sIEltYWdlU291cmNl
Ojppbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2RlcjsKLX0KLQotdm9p
ZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQordm9pZCBJbWFnZVNvdXJjZTo6ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZChTaGFyZWRC
dWZmZXIqIGRhdGEpCiB7CisgICAgaWYgKGluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKICAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KICAg
ICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFu
IGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KICAgICAvLyBJZiBp
bnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5
cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgotICAgIGlmICghbV9k
ZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlRGVj
b2RlclB0cj4oTmF0aXZlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24s
IG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKKyAgICBtX2RlY29kZXIgPSBJbWFnZURl
Y29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbik7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICAg
ICAgaWYgKG1fZGVjb2RlciAmJiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSkKLSAgICAgICAg
ICAgIG1fZGVjb2Rlci0+c2V0TWF4TnVtUGl4ZWxzKHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdl
KTsKKyAgICBpZiAobV9kZWNvZGVyICYmIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQorICAg
ICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRlY29kZWRJbWFn
ZSk7CiAjZW5kaWYKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghZGF0YSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGVuc3VyZURlY29kZXJJc0NyZWF0ZWQoZGF0YSk7CisgICAgCisg
ICAgaWYgKCFpbml0aWFsaXplZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fZGVjb2RlcikKQEAgLTEwOCwyOSAr
MTE2LDMzIEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRl
eChzaXplX3QpIGNvbnN0CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7
Ci0gICAgcmV0dXJuIG1fZGVjb2RlciAmJiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOwor
ICAgIHJldHVybiBpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7
CiB9CiAKLUludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0
aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZUF0SW5kZXgoMCwgMCwgZGVzY3JpcHRpb24pOworICAg
IHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDApOwogfQogCi1JbnRTaXplIEltYWdlU291cmNl
OjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSBjb25zdAorSW50U2l6ZSBJbWFnZVNv
dXJjZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Rl
Y29kZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgcmV0dXJuIGZyYW1lU2l6ZUF0
SW5kZXgoMCwgMCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb24pOworfQogCi0gICAgSW50U2l6ZSBz
aXplID0gbV9kZWNvZGVyLT5mcmFtZVNpemVBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoKGRlc2Ny
aXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRp
b24pICYmIG1fZGVjb2Rlci0+b3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpKQotICAg
ICAgICByZXR1cm4gSW50U2l6ZShzaXplLmhlaWdodCgpLCBzaXplLndpZHRoKCkpOworSW50U2l6
ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5n
TGV2ZWwsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICByZXR1cm4gc2l6ZTsKKyAgICBJbnRTaXplIHNpemUgPSBtX2RlY29kZXIt
PmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpOworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24gPSBtX2RlY29kZXItPm9yaWVudGF0aW9uKCk7CisgICAgCisgICAgcmV0dXJuIHNob3VsZFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uICYmIG9yaWVu
dGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkgPyBzaXplLnRyYW5zcG9zZWRTaXplKCkgOiBzaXpl
OwogfQogCiBib29sIEltYWdlU291cmNlOjpnZXRIb3RTcG90KEludFBvaW50JiBob3RTcG90KSBj
b25zdAogewotICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmhvdFNwb3QoaG90U3Bv
dCkgOiBmYWxzZTsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmhvdFNw
b3QoaG90U3BvdCk7CiB9CiAKIHNpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRl
cm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKQEAgLTE0MCwyMSArMTUyLDE3IEBAIHNpemVfdCBJbWFn
ZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKIAogaW50
IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQoKQogewotICAgIHJldHVybiBtX2RlY29kZXIg
PyBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpIDogY0FuaW1hdGlvbk5vbmU7CisgICAgcmV0
dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpIDogY0FuaW1h
dGlvbk5vbmU7CiB9CiAKIHNpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKKyAg
ICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKIH0K
IAogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVy
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQorICAgIGlmICghaW5pdGlhbGl6
ZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBaZXJvLWhlaWdodCBpbWFn
ZXMgY2FuIGNhdXNlIHByb2JsZW1zIGZvciBzb21lIHBvcnRzLiAgSWYgd2UgaGF2ZSBhbgpAQCAt
MTYyLDYgKzE3MCwxMCBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJ
bWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogICAgIGlmIChzaXplKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIEltYWdlRnJhbWUqIGJ1
ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1
ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCiAgICAgLy8gUmV0dXJuIHRoZSBidWZmZXIgY29udGVudHMg
YXMgYSBuYXRpdmUgaW1hZ2UuICBGb3Igc29tZSBwb3J0cywgdGhlIGRhdGEKICAgICAvLyBpcyBh
bHJlYWR5IGluIGEgbmF0aXZlIGNvbnRhaW5lciwgYW5kIHRoaXMganVzdCBpbmNyZW1lbnRzIGl0
cyByZWZjb3VudC4KICAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CkBAIC0x
NjksNyArMTgxLDcgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXYKIAogZmxvYXQgSW1hZ2VTb3Vy
Y2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVj
b2RlcikKKyAgICBpZiAoIWluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
SW1hZ2VGcmFtZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
OwpAQCAtMTg4LDE5ICsyMDAsMTcgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkKIAogSW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3Jp
ZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZWNvZGVyID8g
bV9kZWNvZGVyLT5vcmllbnRhdGlvbigpIDogRGVmYXVsdEltYWdlT3JpZW50YXRpb247CisgICAg
cmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPm9yaWVudGF0aW9uKCkgOiBJbWFnZU9y
aWVudGF0aW9uKCk7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwor
ICAgIHJldHVybiAhaW5pdGlhbGl6ZWQoKSB8fCBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdElu
ZGV4KGluZGV4KTsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCisgICAgaWYgKCFpbml0aWFs
aXplZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbWFnZUZyYW1lKiBidWZmZXIg
PSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CkBAIC0yMDksMTEgKzIxOSwx
OSBAQCBib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRl
eCkKIAogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5k
ZXgpOworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5mcmFtZUJ5dGVzQXRJ
bmRleChpbmRleCkgOiAwOwogfQogCit2b2lkIEltYWdlU291cmNlOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAoreworICAgIGlmIChtX2FsbG93U3Vic2FtcGxpbmcpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYWxsb3ctc3Vic2FtcGxpbmciLCBtX2FsbG93U3Vic2FtcGxpbmcpOworICAg
IAorICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbkF0SW5kZXgo
MCk7CisgICAgaWYgKG9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7Cit9CisgICAgCiB9CiAKICNl
bmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaAppbmRleCBjMTFmN2JlNDgyOWU0ZTZiYzQwMTc4OTYzYzFkNTFhMTg2NjBhMGEw
Li5jZDliMzlkYWExYzg1ZTE4MGYyYzY0MTVhMGVkMjNmM2U0ZDc3N2E0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJOYXRpdmVJbWFn
ZVB0ci5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC00NSwxOSArNDYsNyBAQCBjbGFz
cyBJbWFnZU9yaWVudGF0aW9uOwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRTaXplOwogY2xh
c3MgU2hhcmVkQnVmZmVyOwotCi0jaWYgVVNFKENHKQotdHlwZWRlZiBDR0ltYWdlU291cmNlUmVm
IE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKLSNlbHNlCiBjbGFzcyBJbWFnZURlY29kZXI7Ci10eXBl
ZGVmIEltYWdlRGVjb2RlciogTmF0aXZlSW1hZ2VEZWNvZGVyUHRyOwotI2VuZGlmCi0KLSNpZiBV
U0UoQ0cpCi0jZGVmaW5lIE5hdGl2ZUltYWdlRGVjb2RlciBJbWFnZURlY29kZXIKLSNlbHNlCi10
eXBlZGVmIEltYWdlRGVjb2RlciBOYXRpdmVJbWFnZURlY29kZXI7Ci0jZW5kaWYKIAogLy8gUmln
aHQgbm93IEdJRnMgYXJlIHRoZSBvbmx5IHJlY29nbml6ZWQgaW1hZ2UgZm9ybWF0IHRoYXQgc3Vw
cG9ydHMgYW5pbWF0aW9uLgogLy8gVGhlIGFuaW1hdGlvbiBzeXN0ZW0gYW5kIHRoZSBjb25zdGFu
dHMgYmVsb3cgYXJlIGRlc2lnbmVkIHdpdGggdGhpcyBpbiBtaW5kLgpAQCAtODIsNiArNzEsNyBA
QCB0eXBlZGVmIHNob3J0IFN1YnNhbXBsaW5nTGV2ZWw7CiAKIGNsYXNzIEltYWdlU291cmNlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZVNvdXJjZSk7CisgICAgZnJpZW5kIGNsYXNz
IEJpdG1hcEltYWdlOwogcHVibGljOgogICAgIGVudW0gQWxwaGFPcHRpb24gewogICAgICAgICBB
bHBoYVByZW11bHRpcGxpZWQsCkBAIC0xMjIsMTkgKzExMiwyNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSBOVUxMLAogICAgICAgICAgICAgICAgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQgPSBmYWxzZSk7CiAKLSAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3Q7
CisgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsg
fQogCiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOwogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwogCiAgICAgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQpIGNvbnN0OwogICAg
IGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAg
dm9pZCBzZXRBbGxvd1N1YnNhbXBsaW5nKGJvb2wgYWxsb3dTdWJzYW1wbGluZykgeyBtX2FsbG93
U3Vic2FtcGxpbmcgPSBhbGxvd1N1YnNhbXBsaW5nOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBt
YXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0OwogCiAgICAgYm9vbCBpc1NpemVBdmFpbGFi
bGUoKTsKKyAgICAKICAgICAvLyBBbHdheXMgb3JpZ2luYWwgc2l6ZSwgd2l0aG91dCBzdWJzYW1w
bGluZy4KLSAgICBJbnRTaXplIHNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1h
Z2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OworICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0OworICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0OworICAg
IAogICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBzdWJzYW1wbGVkIGZyYW1lLgotICAgIEludFNp
emUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwLCBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERvTm90UmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24pIGNvbnN0OwogCiAgICAgYm9vbCBnZXRIb3RTcG90KEludFBvaW50JikgY29uc3Q7
CiAKQEAgLTE2Myw3ICsxNTgsMTcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAg
TmF0aXZlSW1hZ2VEZWNvZGVyUHRyIG1fZGVjb2RlcjsKKyAgICB2b2lkIGVuc3VyZURlY29kZXJJ
c0NyZWF0ZWQoU2hhcmVkQnVmZmVyKik7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBjYWxjdWxhdGVN
YXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0OworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JikgY29uc3Q7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNv
ZGVyOworICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1fYWxsb3dTdWJzYW1wbGlu
ZyB7IHRydWUgfTsKKyNlbHNlCisgICAgYm9vbCBtX2FsbG93U3Vic2FtcGxpbmcgeyBmYWxzZSB9
OworI2VuZGlmCiAKICNpZiAhVVNFKENHKQogICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb247
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRt
YXBJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCmluZGV4IGJkYTBkYzI4MWM5MzdkY2RmMmRiMTVhYzcxMjhh
MjM5NGQ3NTc0YWYuLjFmNGVlMjA3NjZjMTVkY2Q3ZTBhZTZjYmMwZDRiZDFjNzM0NTE2MDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwCkBAIC00MSw3ICs0MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIG5h
dGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVy
KQogICAgICwgbV9zaXplKGNhaXJvU3VyZmFjZVNpemUobmF0aXZlSW1hZ2UuZ2V0KCkpKQotICAg
ICwgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgwKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkK
ICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0
aW9uQ291bnRTdGF0dXMoVW5rbm93bikKQEAgLTEyMiwxMSArMTIxLDYgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
LCBjb25zdCBGbG8KICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQog
Ci12b2lkIEJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNv
bnN0Ci17Ci0gICAgbV9taW5pbXVtU3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci19Ci0KIHZvaWQgQml0
bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiB7CiAgICAgbV9pc1NvbGlkQ29sb3IgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Jp
dG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0
bWFwSW1hZ2VDRy5jcHAKaW5kZXggMzJiZDBiNWNiNTUzZmNkZWRkYmFhZDJmOTYzNjEzMDFmNWQ0
NmVjZC4uNjkzMmExMmZkZjhjMTE4ZGRiMjRjODkyN2NlYzVjZjFmZDY1ZWJiYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5j
cHAKQEAgLTU1LDcgKzU1LDYgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRh
ZGF0YSkKICAgICBpZiAoY2xlYXJNZXRhZGF0YSkKICAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBm
YWxzZTsKIAotICAgIG1fb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKICAg
ICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSAwOwogCiAgICAgaWYgKG1faW1hZ2UpIHsKQEAgLTcwLDkg
KzY5LDYgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKIAogQml0
bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbWFn
ZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9taW5p
bXVtU3Vic2FtcGxpbmdMZXZlbCgwKQotICAgICwgbV9pbWFnZU9yaWVudGF0aW9uKE9yaWdpblRv
cExlZnQpCi0gICAgLCBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKGZhbHNlKQogICAg
ICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25O
b25lKQogICAgICwgbV9yZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikKQEAgLTEwNSwyOCAr
MTAxLDYgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFJldGFpblB0cjxDR0ltYWdlUmVmPiYm
IGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICBjaGVja0ZvclNvbGlkQ29sb3Io
KTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2
ZWwoKSBjb25zdAotewotICAgIGlmICghbV9hbGxvd1N1YnNhbXBsaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fc291cmNlLmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleCgw
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVmFsdWVzIGNob3NlbiB0byBiZSBhcHByb3By
aWF0ZSBmb3IgaU9TLgotICAgIGNvbnN0IGludCBjTWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNh
bXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OwotICAgIGNvbnN0IFN1YnNhbXBsaW5nTGV2ZWwgbWF4
U3Vic2FtcGxpbmdMZXZlbCA9IDM7Ci0KLSAgICBTdWJzYW1wbGluZ0xldmVsIGN1cnJlbnRMZXZl
bCA9IDA7Ci0gICAgZm9yICggOyBjdXJyZW50TGV2ZWwgPD0gbWF4U3Vic2FtcGxpbmdMZXZlbDsg
KytjdXJyZW50TGV2ZWwpIHsKLSAgICAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBtX3NvdXJjZS5m
cmFtZVNpemVBdEluZGV4KDAsIGN1cnJlbnRMZXZlbCk7Ci0gICAgICAgIGlmIChmcmFtZVNpemUu
YXJlYSgpIDwgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBjdXJyZW50
TGV2ZWw7Ci19Ci0KIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiB7CiAg
ICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCmluZGV4IDUwMTVkZDE1
YWJmYzgyNWRjZWIwMzIwZjEyMDI5Y2JhNTEyMTgyNzkuLjM2MjY4MDAwYzI1ZjIwYTE5NGQ2OTIy
NTFlYWVmZWFkYTMzN2Y4YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCkBAIC01MSw2MSArNTEsNTMgQEAgY29uc3Qg
Q0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTdWJzYW1wbGVGYWN0b3IgPSBDRlNUUigia0NHSW1h
Z2VTb3VyY2VTdWJzYW1wbGUKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitj
bGFzcyBJbWFnZURlY29kZXIgeworcHVibGljOgorICAgIEltYWdlRGVjb2RlcigpOworICAgIAor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW1hZ2VEZWNvZGVyPigpOworICAgIH0K
IAotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNsYW1wZWRE
ZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7Ci1jb25zdCBDRlN0cmluZ1Jl
ZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSA9IENGU1RSKCJEZWxheVRpbWUi
KTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50
ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOworICAgIHN0YXRpYyBzaXplX3QgYnl0ZXNEZWNvZGVkVG9E
ZXRlcm1pbmVQcm9wZXJ0aWVzKCk7CisgICAgc3RhdGljIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2Ft
cGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlLCBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1T
dWJzYW1wbGluZ0xldmVsKTsKIAotY29uc3QgQ0ZTdHJpbmdSZWYga0NHSW1hZ2VTb3VyY2VTaG91
bGRQcmVmZXJSR0IzMiA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyIik7
Ci1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSA9IENGU1RSKCJr
Q0dJbWFnZVNvdXJjZVNraXBNZXRhZGF0YSIpOworICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0OworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgCisgICAg
Ly8gQWx3YXlzIG9yaWdpbmFsIHNpemUsIHdpdGhvdXQgc3Vic2FtcGxpbmcuCisgICAgSW50U2l6
ZSBzaXplKCkgY29uc3Q7CisgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdDsKKyAgICBpbnQg
cmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7CisgICAgYm9vbCBob3RTcG90KEludFBvaW50JiBob3RT
cG90KSBjb25zdDsKIAotI2lmICFQTEFURk9STShDT0NPQSkKLXNpemVfdCBzaGFyZWRCdWZmZXJH
ZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlv
biwgc2l6ZV90IGNvdW50KQotewotICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3Rh
dGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7Ci0gICAgc2l6ZV90IHNvdXJjZVNpemUgPSBz
aGFyZWRCdWZmZXItPnNpemUoKTsKLSAgICBpZiAocG9zaXRpb24gPj0gc291cmNlU2l6ZSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vi
c2FtcGxpbmdMZXZlbCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNp
emVfdCkgY29uc3Q7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6
ZV90KSBjb25zdDsKIAotICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHNoYXJlZEJ1ZmZlci0+ZGF0
YSgpICsgcG9zaXRpb247Ci0gICAgc2l6ZV90IGFtb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oY291
bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlvbik7Ci0gICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBh
bW91bnQpOwotICAgIHJldHVybiBhbW91bnQ7Ci19CisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0
SW5kZXgoc2l6ZV90KSBjb25zdDsKKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVf
dCkgY29uc3Q7CisgICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90
KSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwgPSAwKSBjb25zdDsKIAotdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGlu
Zm8pCi17Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFy
ZWRCdWZmZXIqPihpbmZvKTsKLSAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci19Ci0jZW5kaWYK
KyAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNh
bXBsaW5nTGV2ZWwpIGNvbnN0OwogCi1JbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3Vy
Y2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
Ci0gICAgOiBtX2RlY29kZXIoMCkKLXsKLSAgICAvLyBGSVhNRTogQWxwaGFPcHRpb24gYW5kIEdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGFyZSBpZ25vcmVkLgotfQorICAgIHZvaWQgc2V0RGF0
YShDRkRhdGFSZWYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCi1JbWFnZVNvdXJjZTo6fkltYWdl
U291cmNlKCkKLXsKLSAgICBjbGVhcih0cnVlKTsKLX0KK3Byb3RlY3RlZDoKKyAgICBtdXRhYmxl
IEludFNpemUgbV9zaXplOworICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBtX25hdGl2
ZURlY29kZXI7Cit9OwogCi12b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGxG
cmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkK
LXsKLSAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgSW1hZ2VJTyBkaXNjYXJkIHByZXZpb3VzbHkg
ZGVjb2RlZCBpbWFnZSBmcmFtZXMgaWYgdGhlIGNsaWVudAotICAgIC8vIGFwcGxpY2F0aW9uIG5v
IGxvbmdlciBob2xkcyByZWZlcmVuY2VzIHRvIHRoZW0sIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB0
aHJvdyBhd2F5Ci0gICAgLy8gdGhlIGRlY29kZXIgdW5sZXNzIHdlJ3JlIGV4cGxpY2l0bHkgYXNr
ZWQgdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1lcy4KLSAgICBpZiAoIWRlc3Ryb3lBbGxGcmFt
ZXMpCi0gICAgICAgIHJldHVybjsKK2NvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJv
cGVydHlBUE5HVW5jbGFtcGVkRGVsYXlUaW1lID0gQ0ZTVFIoIlVuY2xhbXBlZERlbGF5VGltZSIp
OworY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUg
PSBDRlNUUigiRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVBy
b3BlcnR5QVBOR0xvb3BDb3VudCA9IENGU1RSKCJMb29wQ291bnQiKTsKIAotICAgIGlmIChtX2Rl
Y29kZXIpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKG1fZGVjb2Rlcik7Ci0gICAgICAgIG1fZGVjb2Rl
ciA9IDA7Ci0gICAgfQotICAgIGlmIChkYXRhKQotICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERh
dGFSZWNlaXZlZCk7Ci19Citjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZFBy
ZWZlclJHQjMyID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIiKTsKK2Nv
bnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhID0gQ0ZTVFIoImtDR0lt
YWdlU291cmNlU2tpcE1ldGFkYXRhIik7CiAKIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBjcmVhdGVJbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsKQogewpAQCAtMTM1LDE1NyArMTI3LDU0IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
CiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmluaXRpYWxpemVk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyOwotfQotCi12b2lkIEltYWdlU291cmNl
OjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIG1fZGVjb2Rl
ciA9IENHSW1hZ2VTb3VyY2VDcmVhdGVJbmNyZW1lbnRhbCgwKTsKLSAgICAvLyBPbiBNYWMgdGhl
IE5TRGF0YSBpbnNpZGUgdGhlIFNoYXJlZEJ1ZmZlciBjYW4gYmUgc2VjcmV0bHkgYXBwZW5kZWQg
dG8gd2l0aG91dCB0aGUgU2hhcmVkQnVmZmVyJ3Mga25vd2xlZGdlLiAgV2UgdXNlIFNoYXJlZEJ1
ZmZlcidzIGFiaWxpdHkKLSAgICAvLyB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdl
dCBhcm91bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzIHJlYWxseSBsb29raW5nIGF0
IHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgQ0dJbWFnZVNvdXJjZVVwZGF0ZURhdGEobV9kZWNvZGVy
LCBkYXRhLT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNlbHNlCi0g
ICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIG1fZGVjb2RlciA9IENHSW1hZ2VTb3VyY2VDcmVh
dGVJbmNyZW1lbnRhbCgwKTsKLSAgICAvLyBDcmVhdGUgYSBDR0RhdGFQcm92aWRlciB0byB3cmFw
IHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgZGF0YS0+cmVmKCk7Ci0gICAgLy8gV2UgdXNlIHRoZSBH
ZXRCeXRlc0F0UG9zaXRpb24gY2FsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIEdldEJ5dGVQb2ludGVy
IG9uZSBiZWNhdXNlIFNoYXJlZEJ1ZmZlcgotICAgIC8vIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkg
dG8gbG9jayBkb3duIHRoZSBieXRlIHBvaW50ZXIgYW5kIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0
IG1vdmUsIHdoaWNoCi0gICAgLy8gaXMgYSByZXF1aXJlbWVudCBmb3IgdXNpbmcgdGhlIEdldEJ5
dGVQb2ludGVyIGNhbGxiYWNrLgotICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHBy
b3ZpZGVyQ2FsbGJhY2tzID0geyAwLCAwLCAwLCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRp
b24sIHNoYXJlZEJ1ZmZlclJlbGVhc2UgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVEaXJlY3QoZGF0
YSwgZGF0YS0+c2l6ZSgpLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKLSAgICBDR0ltYWdlU291cmNl
VXBkYXRlRGF0YVByb3ZpZGVyKG1fZGVjb2RlciwgZGF0YVByb3ZpZGVyLmdldCgpLCBhbGxEYXRh
UmVjZWl2ZWQpOwotI2VuZGlmCi19Ci0KLVN0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdAotewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdl
dFR5cGUobV9kZWNvZGVyKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVkRXh0ZW5zaW9u
Rm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Ci19Ci0KLVN1YnNhbXBsaW5nTGV2
ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSkgY29u
c3QKLXsKLSAgICAvLyBUaGVyZSBhcmUgZm91ciBzdWJzYW1wbGluZyBsZXZlbHM6IDAgPSAxeCwg
MSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1eC4KLSAgICBmbG9hdCBjbGFtcGVkU2NhbGUg
PSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6bWluPGZsb2F0PigxLCBzY2FsZSkpOwotICAg
IGludCByZXN1bHQgPSBjZWlsZihsb2cyZigxIC8gY2xhbXBlZFNjYWxlKSk7Ci0gICAgQVNTRVJU
KHJlc3VsdCA+PTAgJiYgcmVzdWx0IDw9IDMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJv
b2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCi17Ci0gICAgLy8gUmFnbmFyb3MgeWVs
bHM6IFRPTyBTT09OISBZb3UgaGF2ZSBhd2FrZW5lZCBtZSBUT08gU09PTiwgRXhlY3V0dXMhCi0g
ICAgaWYgKENHSW1hZ2VTb3VyY2VHZXRTdGF0dXMobV9kZWNvZGVyKSA8IGtDR0ltYWdlU3RhdHVz
SW5jb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gaW1hZ2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQ
cm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgp
KSk7Ci0gICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQo
KSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCi0gICAgICAgICYmIENGRGljdGlvbmFyeUNv
bnRhaW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhl
aWdodCk7Ci19Ci0KIHN0YXRpYyBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uRnJvbVByb3Bl
cnRpZXMoQ0ZEaWN0aW9uYXJ5UmVmIGltYWdlUHJvcGVydGllcykKIHsKICAgICBBU1NFUlQoaW1h
Z2VQcm9wZXJ0aWVzKTsKICAgICBDRk51bWJlclJlZiBvcmllbnRhdGlvblByb3BlcnR5ID0gKENG
TnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGltYWdlUHJvcGVydGllcywga0NHSW1hZ2VQ
cm9wZXJ0eU9yaWVudGF0aW9uKTsKICAgICBpZiAoIW9yaWVudGF0aW9uUHJvcGVydHkpCi0gICAg
ICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKyAgICAgICAgcmV0dXJuIEltYWdl
T3JpZW50YXRpb24oKTsKIAogICAgIGludCBleGlmVmFsdWU7CiAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShvcmllbnRhdGlvblByb3BlcnR5LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZXhpZlZhbHVlKTsKICAg
ICByZXR1cm4gSW1hZ2VPcmllbnRhdGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOwogfQog
Ci1ib29sIEltYWdlU291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90
KSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBh
ZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCAwLCBp
bWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmICghcHJvcGVydGllcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0g
c3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0
aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJRkRpY3Rpb25hcnkpKTsKLSAgICBpZiAoamZp
ZlByb3BlcnRpZXMpIHsKLSAgICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRp
Y19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMs
IGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOwotICAgICAgICBpZiAoaXNQcm9n
Q0ZCb29sKSB7Ci0gICAgICAgICAgICBib29sIGlzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRW
YWx1ZShpc1Byb2dDRkJvb2wpOwotICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6
Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2
ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQotICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdz
IGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9u
J3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMKLSAgICAgICAgICAgIC8vIHdp
bGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24n
dCBiZSBkZWNvZGVkLgotICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlp
bmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKLSAgICAgICAgICAg
IHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1JbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CisjaWYgIVBMQVRGT1JNKENPQ09BKQorc2l6
ZV90IHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbih2b2lkKiBpbmZvLCB2b2lkKiBidWZm
ZXIsIG9mZl90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpCiB7Ci0gICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0
aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxp
bmdMZXZlbCkuZ2V0KCkpKTsKLQotICAgIGlmICghcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKLQotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IGhlaWdodCA9IDA7Ci0g
ICAgQ0ZOdW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBy
b3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbFdpZHRoKTsKLSAgICBpZiAobnVt
KQotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJndpZHRo
KTsKLSAgICBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGll
cy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKLSAgICBpZiAobnVtKQotICAg
ICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7Ci0K
LSAgICBpZiAoKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVj
dEltYWdlT3JpZW50YXRpb24pICYmIG9yaWVudGF0aW9uRnJvbVByb3BlcnRpZXMocHJvcGVydGll
cy5nZXQoKSkudXNlc1dpZHRoQXNIZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoaGVp
Z2h0LCB3aWR0aCk7CisgICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2Fz
dDxTaGFyZWRCdWZmZXIqPihpbmZvKTsKKyAgICBzaXplX3Qgc291cmNlU2l6ZSA9IHNoYXJlZEJ1
ZmZlci0+c2l6ZSgpOworICAgIGlmIChwb3NpdGlvbiA+PSBzb3VyY2VTaXplKQorICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGNvbnN0
IGNoYXIqIHNvdXJjZSA9IHNoYXJlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb247CisgICAgc2l6
ZV90IGFtb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oY291bnQsIHNvdXJjZVNpemUgLSBwb3NpdGlv
bik7CisgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBhbW91bnQpOworICAgIHJldHVybiBhbW91
bnQ7CiB9CiAKLUltYWdlT3JpZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0Cit2b2lkIHNoYXJlZEJ1ZmZlclJlbGVhc2Uodm9pZCogaW5m
bykKIHsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRD
RihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgsIGlt
YWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAg
ICByZXR1cm4gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0KLSAgICByZXR1cm4gb3JpZW50YXRp
b25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgpKTsKKyAgICBTaGFyZWRCdWZmZXIqIHNo
YXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGluZm8pOworICAgIHNoYXJl
ZEJ1ZmZlci0+ZGVyZWYoKTsKIH0KLQotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0CisjZW5kaWYKKyAgICAKK0lt
YWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKCkKIHsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRl
eCgwLCAwLCBkZXNjcmlwdGlvbik7CisgICAgbV9uYXRpdmVEZWNvZGVyID0gYWRvcHRDRihDR0lt
YWdlU291cmNlQ3JlYXRlSW5jcmVtZW50YWwobnVsbHB0cikpOwogfQotCi1ib29sIEltYWdlU291
cmNlOjpnZXRIb3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAorICAgIAorU3Vic2FtcGxp
bmdMZXZlbCBJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2Fs
ZSwgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKIHsKLSAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCku
Z2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGludCB4ID0gLTEsIHkgPSAtMTsKLSAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RY
IikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50
VHlwZSwgJngpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBudW0gPSAoQ0ZOdW1iZXJS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwgQ0ZTVFIoImhvdHNwb3RZ
IikpOwotICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50
VHlwZSwgJnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoeCA8IDAgfHwgeSA8
IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGhvdFNwb3QgPSBJbnRQb2ludCh4LCB5
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBUaGVyZSBhcmUgZm91ciBzdWJzYW1wbGluZyBs
ZXZlbHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1eC4KKyAgICBmbG9h
dCBjbGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6bWluPGZsb2F0Pigx
LCBzY2FsZSkpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgcmVzdWx0ID0gY2VpbGYobG9nMmYoMSAv
IGNsYW1wZWRTY2FsZSkpOworICAgIEFTU0VSVChyZXN1bHQgPj0wICYmIHJlc3VsdCA8PSAzKTsK
KyAgICByZXR1cm4gc3RkOjptaW4ocmVzdWx0LCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCk7CiB9
CiAKLXNpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVz
KCkgY29uc3QKK3NpemVfdCBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJv
cGVydGllcygpCiB7CiAgICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9jIGNh
bGxzIG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KICAgICAvLyBBIG5vbi16ZXJvIHZhbHVlIGVu
c3VyZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVyCkBA
IC0yOTYsMTIgKzE4NSw0MSBAQCBzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0
ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CiAgICAgcmV0dXJuIDEzMDg4OwogfQogICAgIAotaW50
IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQoKQorU3RyaW5nIEltYWdlRGVjb2Rlcjo6Zmls
ZW5hbWVFeHRlbnNpb24oKSBjb25zdAogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAgICBDRlN0cmluZ1JlZiBpbWFnZVNvdXJj
ZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIuZ2V0KCkpOworICAg
IHJldHVybiBXZWJDb3JlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JJbWFnZVNvdXJjZVR5cGUoaW1h
Z2VTb3VyY2VUeXBlKTsKK30KKworYm9vbCBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
IGNvbnN0Cit7CisgICAgLy8gUmFnbmFyb3MgeWVsbHM6IFRPTyBTT09OISBZb3UgaGF2ZSBhd2Fr
ZW5lZCBtZSBUT08gU09PTiwgRXhlY3V0dXMhCisgICAgaWYgKENHSW1hZ2VTb3VyY2VHZXRTdGF0
dXMobV9uYXRpdmVEZWNvZGVyLmdldCgpKSA8IGtDR0ltYWdlU3RhdHVzSW5jb21wbGV0ZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1h
Z2UwUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRl
eChtX25hdGl2ZURlY29kZXIuZ2V0KCksIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7
CisgICAgaWYgKCFpbWFnZTBQcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQoKSwg
a0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCisgICAgICAgICYmIENGRGljdGlvbmFyeUNvbnRh
aW5zS2V5KGltYWdlMFByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQaXhlbEhlaWdo
dCk7Cit9CisKK0ludFNpemUgSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zaXplID0gZnJhbWVTaXplQXRJbmRleCgwLCAw
KTsKKyAgICByZXR1cm4gbV9zaXplOworfQorCitzaXplX3QgSW1hZ2VEZWNvZGVyOjpmcmFtZUNv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldENvdW50KG1fbmF0aXZl
RGVjb2Rlci5nZXQoKSk7Cit9CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9w
ZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXMobV9kZWNvZGVyLCBp
bWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworaW50IEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlv
bkNvdW50KCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0
aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXMobV9uYXRpdmVEZWNvZGVy
LmdldCgpLCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOwogICAgIGlmICghcHJvcGVydGll
cykKICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKIApAQCAtMzM1LDYxICsyNTMs
NjcgQEAgaW50IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQoKQogICAgIHJldHVybiBjQW5p
bWF0aW9uTm9uZTsKIH0KIAotc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QK
K2Jvb2wgSW1hZ2VEZWNvZGVyOjpob3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAogewot
ICAgIHJldHVybiBtX2RlY29kZXIgPyBDR0ltYWdlU291cmNlR2V0Q291bnQobV9kZWNvZGVyKSA6
IDA7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0Yo
Q0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCks
IDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKCFwcm9wZXJ0aWVzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgeCA9IC0xLCB5ID0gLTE7CisgICAgQ0ZO
dW1iZXJSZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRp
ZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WCIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJH
ZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRp
ZXMuZ2V0KCksIENGU1RSKCJob3RzcG90WSIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJH
ZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHggPCAwIHx8IHkgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBob3RTcG90ID0gSW50UG9pbnQoeCwgeSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJldGFp
blB0cjxDR0ltYWdlUmVmPiBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCitJbnRTaXplIElt
YWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIWluaXRpYWxpemVkKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBy
b3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9u
YXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5n
TGV2ZWwpLmdldCgpKSk7CiAKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBhZG9w
dENGKENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwgaW1h
Z2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwpLmdldCgpKSk7Ci0KLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzExOTg+IC0gQ29yZUdyYXBoaWNzIGNo
YW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIgaW4gaU9TIDQuMCB0byBrQ0dJbWFn
ZUNhY2hpbmdUcmFuc2llbnQKLSAgICAvLyB3aGljaCBjYXVzZWQgYSBwZXJmb3JtYW5jZSByZWdy
ZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0byBiZSByZXNhbXBsZWQvcmVjcmVh
dGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCi0gICAgLy8gQ0dDb250ZXh0RHJhd0ltYWdlLiBXZSBu
b3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2VzLiBTZWUgYWxzbyA8cmRhcjovL3By
b2JsZW0vMTQzNjY3NTU+IC0KLSAgICAvLyBDb3JlR3JhcGhpY3MgbmVlZHMgdG8gdW4tZGVwcmVj
YXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBpdCdzIHN0aWxsIG5vdCB0aGUgZGVm
YXVsdC4KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0
aW9ucyIKLSNlbmRpZgotICAgIENHSW1hZ2VTZXRDYWNoaW5nRmxhZ3MoaW1hZ2UuZ2V0KCksIGtD
R0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisgICAg
aWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgQ0ZTdHJpbmdSZWYg
aW1hZ2VVVEkgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX2RlY29kZXIpOwotICAgIHN0YXRpYyBj
b25zdCBDRlN0cmluZ1JlZiB4Ym1VVEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1hZ2UiKTsK
KyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBoZWlnaHQgPSAwOworICAgIENGTnVtYmVyUmVm
IG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgp
LCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxXaWR0aCk7CisgICAgaWYgKG51bSkKKyAgICAgICAgQ0ZO
dW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7CiAKLSAgICBpZiAo
IWltYWdlVVRJKQotICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgbnVtID0gKENGTnVtYmVyUmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlQ
aXhlbEhlaWdodCk7CisgICAgaWYgKG51bSkKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckludFR5cGUsICZoZWlnaHQpOwogCi0gICAgaWYgKCFDRkVxdWFsKGltYWdlVVRJ
LCB4Ym1VVEkpKQotICAgICAgICByZXR1cm4gaW1hZ2U7Ci0gICAgCi0gICAgLy8gSWYgaXQgaXMg
YW4geGJtIGltYWdlLCBtYXNrIG91dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVt
IHRyYW5zcGFyZW50LgotICAgIGNvbnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUs
IDI1NSwgIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1h
c2tlZEltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2Uu
Z2V0KCksIG1hc2tpbmdDb2xvcnMpKTsKLSAgICByZXR1cm4gbWFza2VkSW1hZ2UgPyBtYXNrZWRJ
bWFnZSA6IGltYWdlOworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwogfQogCi1i
b29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKK2Jv
b2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKIHsKICAgICBBU1NFUlQoZnJhbWVDb3VudCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZVNvdXJj
ZUdldFN0YXR1c0F0SW5kZXgobV9kZWNvZGVyLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21w
bGV0ZTsKKyAgICByZXR1cm4gQ0dJbWFnZVNvdXJjZUdldFN0YXR1c0F0SW5kZXgobV9uYXRpdmVE
ZWNvZGVyLmdldCgpLCBpbmRleCkgPT0ga0NHSW1hZ2VTdGF0dXNDb21wbGV0ZTsKIH0KIAotZmxv
YXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKK0ltYWdl
T3JpZW50YXRpb24gSW1hZ2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAogewotICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFn
ZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIuZ2V0KCksIGluZGV4
LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAg
ICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAorICAgIHJldHVybiBvcmllbnRhdGlv
bkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOworfQorCitmbG9hdCBJbWFnZURlY29k
ZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKICAgICBmbG9h
dCBkdXJhdGlvbiA9IDA7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGll
cyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIs
IGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVy
dGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRp
b25zKCkuZ2V0KCkpKTsKICAgICBpZiAocHJvcGVydGllcykgewogICAgICAgICBDRkRpY3Rpb25h
cnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOwogICAg
ICAgICBpZiAoZ2lmUHJvcGVydGllcykgewpAQCAtNDIwLDE1ICszNDQsMzQgQEAgZmxvYXQgSW1h
Z2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKICAgICByZXR1cm4g
ZHVyYXRpb247CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNp
emVfdCBpbmRleCkKK2Jvb2wgSW1hZ2VEZWNvZGVyOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0
SW5kZXgoc2l6ZV90KSBjb25zdAogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIEZJWE1FOiB3aHkgZG9lc24ndCB0aGlzIHJldHVybiB0cnVlPworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1hZ2VTb3Vy
Y2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLmdldCgpLCAwLCBpbWFnZVNv
dXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGlj
X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdl
dCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJRkRpY3Rpb25hcnkpKTsKKyAgICBpZiAoamZpZlByb3Bl
cnRpZXMpIHsKKyAgICAgICAgQ0ZCb29sZWFuUmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0
PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0lt
YWdlUHJvcGVydHlKRklGSXNQcm9ncmVzc2l2ZSkpOworICAgICAgICBpZiAoaXNQcm9nQ0ZCb29s
KSB7CisgICAgICAgICAgICBib29sIGlzUHJvZ3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShp
c1Byb2dDRkJvb2wpOworICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9i
bGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJpbmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVH
LiBEZWNvZGluZyBwcm9ncmVzc2l2ZQorICAgICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBh
IHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4gVW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3Vi
LXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMuIFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1
c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBpbWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBk
ZWNvZGVkLgorICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNz
dWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxlbS81MTkxNDE4PikKKyAgICAgICAgICAgIHJldHVy
biAhaXNQcm9ncmVzc2l2ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdAorewogICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJbWFnZVNv
dXJjZUdldFR5cGUobV9kZWNvZGVyKTsKKyAgICBDRlN0cmluZ1JlZiBpbWFnZVR5cGUgPSBDR0lt
YWdlU291cmNlR2V0VHlwZShtX25hdGl2ZURlY29kZXIuZ2V0KCkpOwogCiAgICAgLy8gUmV0dXJu
IGZhbHNlIGlmIHRoZXJlIGlzIG5vIGltYWdlIHR5cGUgb3IgdGhlIGltYWdlIHR5cGUgaXMgSlBF
RywgYmVjYXVzZQogICAgIC8vIEpQRUcgZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSB0cmFuc3BhcmVu
Y3kuCkBAIC00NDEsMTAgKzM4NCwyNDQgQEAgYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIHJldHVybiB0cnVlOwogfQogCit1bnNpZ25lZCBJ
bWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIEludFNpemUgZnJhbWVTaXplID0g
ZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgcmV0dXJuIGZy
YW1lU2l6ZS5hcmVhKCkgKiA0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZURlY29kZXI6OmNy
ZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKSBjb25zdAoreworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUltYWdlQXRJbmRleChtX25hdGl2ZURlY29kZXIu
Z2V0KCksIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkp
KTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzM3MTE5OD4g
LSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUgZGVmYXVsdCBjYWNoaW5nIGJlaGF2aW91ciBpbiBp
T1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1RyYW5zaWVudAorICAgIC8vIHdoaWNoIGNhdXNlZCBh
IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9yIHVzIHNpbmNlIHRoZSBpbWFnZXMgaGFkIHRvIGJl
IHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkgdGltZSB3ZSBjYWxsZWQKKyAgICAvLyBDR0NvbnRl
eHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENHIHRvIGNhY2hlIHRoZSBkcmF3biBpbWFnZXMuIFNl
ZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2Njc1NT4gLQorICAgIC8vIENvcmVHcmFwaGljcyBu
ZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1hZ2VDYWNoaW5nVGVtcG9yYXJ5IHNpbmNlIGl0J3Mg
c3RpbGwgbm90IHRoZSBkZWZhdWx0LgorI2lmIENPTVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorI2VuZGlmCisgICAgICAgIENHSW1hZ2VTZXRDYWNoaW5n
RmxhZ3MoaW1hZ2UuZ2V0KCksIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSk7CisjaWYgQ09NUElM
RVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCisKKyAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3Vy
Y2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlci5nZXQoKSk7CisgICAgc3RhdGljIGNvbnN0IENGU3Ry
aW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFnZSIpOworCisgICAgaWYg
KCFpbWFnZVVUSSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAgaWYgKCFDRkVxdWFsKGlt
YWdlVVRJLCB4Ym1VVEkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisKKyAgICAvLyBJZiBpdCBp
cyBhbiB4Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJlYXMgdG8gcmVuZGVyIHRo
ZW0gdHJhbnNwYXJlbnQuCisgICAgY29uc3QgQ0dGbG9hdCBtYXNraW5nQ29sb3JzWzZdID0gezI1
NSwgMjU1LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
bWFza2VkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9ycyhpbWFn
ZS5nZXQoKSwgbWFza2luZ0NvbG9ycykpOworICAgIHJldHVybiBtYXNrZWRJbWFnZSA/IG1hc2tl
ZEltYWdlIDogaW1hZ2U7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKENGRGF0YVJl
ZiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBDR0ltYWdlU291cmNlVXBkYXRl
RGF0YShtX25hdGl2ZURlY29kZXIuZ2V0KCksIGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisK
K3ZvaWQgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8gT24gTWFjIHRoZSBO
U0RhdGEgaW5zaWRlIHRoZSBTaGFyZWRCdWZmZXIgY2FuIGJlIHNlY3JldGx5IGFwcGVuZGVkIHRv
IHdpdGhvdXQgdGhlIFNoYXJlZEJ1ZmZlcidzIGtub3dsZWRnZS4KKyAgICAvLyBXZSB1c2UgU2hh
cmVkQnVmZmVyJ3MgYWJpbGl0eSB0byB3cmFwIGl0c2VsZiBpbnNpZGUgQ0ZEYXRhIHRvIGdldCBh
cm91bmQgdGhpcywgZW5zdXJpbmcgdGhhdCBJbWFnZUlPIGlzCisgICAgLy8gcmVhbGx5IGxvb2tp
bmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBzZXREYXRhKGRhdGEtPmNyZWF0ZUNGRGF0YSgp
LmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhKG1f
bmF0aXZlRGVjb2Rlci5nZXQoKSwgZGF0YS0+Y3JlYXRlQ0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFS
ZWNlaXZlZCk7CisjZWxzZQorICAgIC8vIENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAg
dGhlIFNoYXJlZEJ1ZmZlci4KKyAgICBkYXRhLT5yZWYoKTsKKyAgICAvLyBXZSB1c2UgdGhlIEdl
dEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFjayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIg
b25lIGJlY2F1c2UgU2hhcmVkQnVmZmVyCisgICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0
byBsb2NrIGRvd24gdGhlIGJ5dGUgcG9pbnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3Qg
bW92ZSwgd2hpY2gKKyAgICAvLyBpcyBhIHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0
ZVBvaW50ZXIgY2FsbGJhY2suCisgICAgQ0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJv
dmlkZXJDYWxsYmFja3MgPSB7IDAsIDAsIDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlv
biwgc2hhcmVkQnVmZmVyUmVsZWFzZSB9OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJl
Zj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRh
LCBkYXRhLT5zaXplKCksICZwcm92aWRlckNhbGxiYWNrcykpOworICAgIENHSW1hZ2VTb3VyY2VV
cGRhdGVEYXRhUHJvdmlkZXIobV9uYXRpdmVEZWNvZGVyLmdldCgpLCBkYXRhUHJvdmlkZXIuZ2V0
KCksIGFsbERhdGFSZWNlaXZlZCk7CisjZW5kaWYKK30KKworSW1hZ2VTb3VyY2U6OkltYWdlU291
cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKQoreworICAgIC8vIEZJWE1FOiBBbHBoYU9wdGlvbiBhbmQgR2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24gYXJlIGlnbm9yZWQuCit9CisKK0ltYWdlU291cmNlOjp+SW1hZ2VT
b3VyY2UoKQoreworICAgIGNsZWFyKHRydWUpOworfQorCit2b2lkIEltYWdlU291cmNlOjpjbGVh
cihib29sIGRlc3Ryb3lBbGxGcmFtZXMsIHNpemVfdCwgU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBSZWNlbnQgdmVyc2lvbnMgb2YgSW1hZ2VJTyBk
aXNjYXJkIHByZXZpb3VzbHkgZGVjb2RlZCBpbWFnZSBmcmFtZXMgaWYgdGhlIGNsaWVudAorICAg
IC8vIGFwcGxpY2F0aW9uIG5vIGxvbmdlciBob2xkcyByZWZlcmVuY2VzIHRvIHRoZW0sIHNvIHRo
ZXJlJ3Mgbm8gbmVlZCB0byB0aHJvdyBhd2F5CisgICAgLy8gdGhlIGRlY29kZXIgdW5sZXNzIHdl
J3JlIGV4cGxpY2l0bHkgYXNrZWQgdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1lcy4KKyAgICBp
ZiAoIWRlc3Ryb3lBbGxGcmFtZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVjb2RlciA9
IG51bGxwdHI7CisgICAgCisgICAgaWYgKGRhdGEpCisgICAgICAgIHNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKK30KKyAgICAKK3ZvaWQgSW1hZ2VTb3VyY2U6OmVuc3VyZURlY29kZXJJ
c0NyZWF0ZWQoU2hhcmVkQnVmZmVyKikKK3sKKyAgICBpZiAoaW5pdGlhbGl6ZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCk7Cit9CisK
K3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkKK3sKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBlbnN1cmVEZWNvZGVySXNDcmVhdGVkKGRhdGEpOworICAgIAorICAgIGlmICghaW5pdGlhbGl6
ZWQoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBtX2RlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVk
KTsKK30KKworU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9u
KCkgOiBTdHJpbmcoKTsKK30KKyAgICAKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OmNh
bGN1bGF0ZU1heGltdW1TdWJzYW1wbGluZ0xldmVsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYWxs
b3dTdWJzYW1wbGluZyB8fCAhYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KDApKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIFZhbHVlcyBjaG9zZW4gdG8gYmUgYXBwcm9wcmlhdGUg
Zm9yIGlPUy4KKyAgICBjb25zdCBpbnQgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGlu
ZyA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICBjb25zdCBTdWJzYW1wbGluZ0xldmVsIG1heFN1YnNh
bXBsaW5nTGV2ZWwgPSAzOworCisgICAgU3Vic2FtcGxpbmdMZXZlbCBjdXJyZW50TGV2ZWwgPSAw
OworICAgIGZvciAoIDsgY3VycmVudExldmVsIDw9IG1heFN1YnNhbXBsaW5nTGV2ZWw7ICsrY3Vy
cmVudExldmVsKSB7CisgICAgICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRl
eCgwLCBjdXJyZW50TGV2ZWwpOworICAgICAgICBpZiAoZnJhbWVTaXplLmFyZWEoKSA8IGNNYXhp
bXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gY3VycmVudExldmVsOworfQorICAgIAorU3Vic2FtcGxpbmdMZXZlbCBJ
bWFnZVNvdXJjZTo6bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdAoreworI2lmIFBMQVRG
T1JNKElPUykKKyAgICByZXR1cm4gY2FsY3VsYXRlTWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKTsK
KyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitTdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNl
OjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQgc2NhbGUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKHNjYWxlLCBtYXhpbXVt
U3Vic2FtcGxpbmdMZXZlbCgpKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxh
YmxlKCkKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2RlY29kZXItPmlzU2l6ZUF2
YWlsYWJsZSgpOworfQorCitib29sIEltYWdlU291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFt
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBpbml0aWFsaXplZCgp
ICYmIG1fZGVjb2Rlci0+YWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KGluZGV4KTsKK30K
KworSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25F
bnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdAoreworICAgIGlmICghaW5p
dGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICBJbnRTaXplIHNpemUg
PSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwor
ICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBtX2RlY29kZXItPm9yaWVudGF0aW9u
QXRJbmRleChpbmRleCk7CisgICAgCisgICAgcmV0dXJuIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uICYmIG9yaWVudGF0aW9uLnVzZXNXaWR0
aEFzSGVpZ2h0KCkgPyBzaXplLnRyYW5zcG9zZWRTaXplKCkgOiBzaXplOworfQorCitJbWFnZU9y
aWVudGF0aW9uIEltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdAoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5vcmllbnRhdGlv
bkF0SW5kZXgoaW5kZXgpIDogSW1hZ2VPcmllbnRhdGlvbigpOworfQorCitJbnRTaXplIEltYWdl
U291cmNlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAw
KTsKK30KKyAgICAKK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBmcmFtZVNpemVBdEluZGV4KDAsIDAsIFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6Z2V0SG90U3BvdChJbnRQ
b2ludCYgaG90U3BvdCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSAmJiBtX2Rl
Y29kZXItPmhvdFNwb3QoaG90U3BvdCk7Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6Ynl0ZXNE
ZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VE
ZWNvZGVyOjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKTsKK30KKyAgICAKK2lu
dCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6
ZWQoKSA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTG9vcE9uY2U7
Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1lQ291bnQoKSA6IDA7Cit9CisKK1Jl
dGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCit7CisgICAg
cmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VTb3Vy
Y2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiBp
bml0aWFsaXplZCgpICYmIG1fZGVjb2Rlci0+ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCk7
Cit9CisKK2Zsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5k
ZXgpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmZyYW1lRHVyYXRp
b25BdEluZGV4KGluZGV4KSA6IDA7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxw
aGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gIWluaXRpYWxpemVkKCkgfHwg
bV9kZWNvZGVyLT5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7Cit9CisKIHVuc2lnbmVkIElt
YWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
ZWwgc3Vic2FtcGxpbmdMZXZlbCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IGZy
YW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbihSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikpOwotICAgIHJldHVybiBmcmFtZVNp
emUud2lkdGgoKSAqIGZyYW1lU2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAgSW50U2l6ZSBmcmFtZVNp
emUgPSBmcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICByZXR1
cm4gZnJhbWVTaXplLmFyZWEoKSAqIDQ7Cit9CisgICAgCit2b2lkIEltYWdlU291cmNlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGlmIChtX2FsbG93U3Vic2FtcGxpbmcpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3ctc3Vic2FtcGxpbmciLCBtX2FsbG93U3Vic2Ft
cGxpbmcpOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBvcmllbnRh
dGlvbkF0SW5kZXgoMCk7CisgICAgaWYgKG9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwCmluZGV4IGI5NjU2NTUyZjI3ZTM2ODJmNmExNDM4MGZhNWVkMzNjNTcx
NTRkNmQuLjZmZTI5MGUyMjYxOGZiZDc2Yzc1Yzg0NDkyNDQ3MmUzMTk3ZmZmODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtOTUsMzUgKzk1LDM1IEBAIGJvb2wgbWF0Y2hlc0NVUlNpZ25hdHVyZShjaGFy
KiBjb250ZW50cykKIAogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNv
bnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0
aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBJbWFnZURlY29k
ZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9w
dGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
IGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmUgPSAxNDsgLy8gVG8gd2l0OiAiUklGRj8/Pz9XRUJQ
VlAiCiAgICAgY2hhciBjb250ZW50c1tsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmVdOwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNvbnRlbnRzLCBsZW5ndGhPZkxv
bmdlc3RTaWduYXR1cmUsIGRhdGEsIDApOwogICAgIGlmIChsZW5ndGggPCBsZW5ndGhPZkxvbmdl
c3RTaWduYXR1cmUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGlmIChtYXRjaGVzR0lGU2lnbmF0dXJlKGNvbnRlbnRzKSkKLSAgICAgICAgcmV0dXJu
IG5ldyBHSUZJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURlY29kZXI+IHsgc3Rk
OjptYWtlX3VuaXF1ZTxHSUZJbWFnZURlY29kZXI+KGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikgfTsKIAogICAgIGlmIChtYXRjaGVzUE5HU2lnbmF0dXJlKGNvbnRlbnRz
KSkKLSAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZURlY29kZXI+IHsgc3RkOjptYWtlX3VuaXF1ZTxQTkdJbWFnZURlY29kZXI+KGFscGhhT3B0
aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikgfTsKIAogICAgIGlmIChtYXRjaGVzSUNP
U2lnbmF0dXJlKGNvbnRlbnRzKSB8fCBtYXRjaGVzQ1VSU2lnbmF0dXJlKGNvbnRlbnRzKSkKLSAg
ICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZURl
Y29kZXI+IHsgc3RkOjptYWtlX3VuaXF1ZTxJQ09JbWFnZURlY29kZXI+KGFscGhhT3B0aW9uLCBn
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikgfTsKIAogICAgIGlmIChtYXRjaGVzSlBFR1NpZ25h
dHVyZShjb250ZW50cykpCi0gICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcihhbHBo
YU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4geyBzdGQ6Om1ha2VfdW5pcXVlPEpQRUdJbWFnZURl
Y29kZXI+KGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikgfTsKIAogI2lm
IFVTRShXRUJQKQogICAgIGlmIChtYXRjaGVzV2ViUFNpZ25hdHVyZShjb250ZW50cykpCi0gICAg
ICAgIHJldHVybiBuZXcgV0VCUEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVj
b2Rlcj4geyBzdGQ6Om1ha2VfdW5pcXVlPFdFQlBJbWFnZURlY29kZXI+KGFscGhhT3B0aW9uLCBn
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikgfTsKICNlbmRpZgogCiAgICAgaWYgKG1hdGNoZXNC
TVBTaWduYXR1cmUoY29udGVudHMpKQotICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2Rl
cihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgICAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlRGVjb2Rlcj4geyBzdGQ6Om1ha2VfdW5pcXVlPEJNUElt
YWdlRGVjb2Rlcj4oYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSB9Owog
Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEltYWdlRnJhbWU6Oklt
YWdlRnJhbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAppbmRleCBiMzU0N2Q5NGU4MDhmODc0YWVkOWRhMGYyOTFiZWNl
MjBhNjQ2NDM3Li41MzQ3YTQ3YjcyM2NkNWYwM2I2MmQzYjM1MmNmOTQ1MTQ3ZGEwZWFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaApAQCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBkZWNvZGVyIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBl
LiAgUmV0dXJucyAwIGlmCiAgICAgICAgIC8vIHdlIGNhbid0IHNuaWZmIGEgc3VwcG9ydGVkIHR5
cGUgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAocG9zc2libHkKICAgICAgICAgLy8gYmVjYXVzZSB0
aGVyZSBpc24ndCBlbm91Z2ggZGF0YSB5ZXQpLgotICAgICAgICBzdGF0aWMgSW1hZ2VEZWNvZGVy
KiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRp
b24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAgICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoY29uc3QgU2hhcmVkQnVm
ZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9EcmFnSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJh
Z0ltYWdlTWFjLm1tCmluZGV4IGJiYWU5MWZhOGUzYzA2NjQ0N2M0NjRkNmUzMTIwMGRlMjQ4Y2U4
M2YuLjkxYzkyZTkxMmNjMjE4OTJmNjU5ZTY3YTk1OTU3MWZiZGQwMDI3YjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQpAQCAtOTEsNyArOTEsNyBAQCBS
ZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwg
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaQogICAgIGlmIChpczxCaXRtYXBJbWFnZT4oKmltYWdlKSkg
ewogICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwogICAgICAgICBCaXRtYXBJ
bWFnZSYgYml0bWFwSW1hZ2UgPSBkb3duY2FzdDxCaXRtYXBJbWFnZT4oKmltYWdlKTsKLSAgICAg
ICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uuc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbihkZXNjcmlwdGlvbik7CisgICAgICAgIEludFNpemUgc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbiA9IGJpdG1hcEltYWdlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24oKTsKIAogICAgICAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24o
KSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAgICAgICAgIG9yaWVudGF0aW9uID0g
Yml0bWFwSW1hZ2Uub3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>