<?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>225584</bug_id>
          
          <creation_ts>2021-05-09 18:43:38 -0700</creation_ts>
          <short_desc>Use PixelBuffer rather than ImageData in platform/ code to fix layering violation</short_desc>
          <delta_ts>2021-05-10 18:35:17 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1758406</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-09 18:43:38 -0700</bug_when>
    <thetext>Use PixelBuffer rather than ImageData in platform/ code to fix layering violation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758415</commentid>
    <comment_count>1</comment_count>
      <attachid>428149</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-09 19:17:06 -0700</bug_when>
    <thetext>Created attachment 428149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758416</commentid>
    <comment_count>2</comment_count>
      <attachid>428150</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-09 20:10:50 -0700</bug_when>
    <thetext>Created attachment 428150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758418</commentid>
    <comment_count>3</comment_count>
      <attachid>428151</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-09 20:15:01 -0700</bug_when>
    <thetext>Created attachment 428151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758499</commentid>
    <comment_count>4</comment_count>
      <attachid>428174</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 08:44:31 -0700</bug_when>
    <thetext>Created attachment 428174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758531</commentid>
    <comment_count>5</comment_count>
      <attachid>428180</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 10:17:15 -0700</bug_when>
    <thetext>Created attachment 428180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758543</commentid>
    <comment_count>6</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-05-10 10:56:42 -0700</bug_when>
    <thetext>Can&apos;t we keep ImageData in platform code and use something like DOMImageData in the binding code? I see many idl files have names like DOM&lt;interface&gt;.idl: DOMWindow.idl, DOMCache.idl, DOMFileSystem.idl, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758550</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 11:01:24 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #6)
&gt; Can&apos;t we keep ImageData in platform code and use something like DOMImageData
&gt; in the binding code? I see many idl files have names like
&gt; DOM&lt;interface&gt;.idl: DOMWindow.idl, DOMCache.idl, DOMFileSystem.idl, etc.

We could, but what benefit would there be? There doesn&apos;t seem to be a need for RefCounted object here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758552</commentid>
    <comment_count>8</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-05-10 11:06:25 -0700</bug_when>
    <thetext>The benefit is we do not have to invent a new name &apos;PixelBuffer&apos;. Relating ImageData and DOMImageData is trivial and this name convention has precedent in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758565</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 11:29:37 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #8)
&gt; The benefit is we do not have to invent a new name &apos;PixelBuffer&apos;. Relating
&gt; ImageData and DOMImageData is trivial and this name convention has precedent
&gt; in the code.

I think the new name is better and more descriptive. I&apos;d rather not conflate DOM names and platform names if we can avoid it and it seems easy to do so here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758634</commentid>
    <comment_count>10</comment_count>
      <attachid>428201</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 14:27:41 -0700</bug_when>
    <thetext>Created attachment 428201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758637</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 14:29:30 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #9)
&gt; (In reply to Said Abou-Hallawa from comment #8)
&gt; &gt; The benefit is we do not have to invent a new name &apos;PixelBuffer&apos;. Relating
&gt; &gt; ImageData and DOMImageData is trivial and this name convention has precedent
&gt; &gt; in the code.
&gt; 
&gt; I think the new name is better and more descriptive. I&apos;d rather not conflate
&gt; DOM names and platform names if we can avoid it and it seems easy to do so
&gt; here.

I&apos;m also up for other names if you have any that you prefer, but I think tying to DOM concepts is the opposite of what we want to do in the platform layer.

Other names I considered were:

- PixelData
- ImageBufferDirect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758658</commentid>
    <comment_count>12</comment_count>
      <attachid>428201</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-10 14:49:25 -0700</bug_when>
    <thetext>Comment on attachment 428201
Patch

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

&gt; Source/WebCore/platform/graphics/PixelBuffer.cpp:39
&gt; +    static constexpr unsigned bytesPerPixel = 4;

No need for &quot;static&quot; here.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:575
&gt; +    ASSERT(m_unmultipliedImageResult == WTF::nullopt);

I might use &quot;!&quot; or &quot;!x.hasValue()&quot; instead.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:593
&gt; +    ASSERT(m_premultipliedImageResult == WTF::nullopt);

Ditto.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:30
&gt; +#include &quot;PixelBuffer.h&quot;

Don’t need to both include and forward-declare PixelBuffer.

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:587
&gt; +    case DisplayList::ItemType::GetPixelBuffer: {
&gt;          ASSERT_NOT_REACHED();
&gt;          break;
&gt;      }

No need for these braces. Also seems like we want &quot;return WTF::nullopt&quot; or maybe not even bother with &quot;break&quot;.

&gt; Source/WebKit/Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h:54
&gt; +    void putPixelBuffer(WebCore::AlphaPremultiplication inputFormat, const WebCore::WebCore::PixelBuffer&amp;, const WebCore::IntRect&amp; srcRect, const WebCore::IntPoint&amp; destPoint, WebCore::AlphaPremultiplication destFormat) override;

Does this compile? WebCore::WebCore::PixelBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758726</commentid>
    <comment_count>13</comment_count>
      <attachid>428221</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 16:58:10 -0700</bug_when>
    <thetext>Created attachment 428221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758734</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-10 17:04:33 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 428201 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428201&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PixelBuffer.cpp:39
&gt; &gt; +    static constexpr unsigned bytesPerPixel = 4;
&gt; 
&gt; No need for &quot;static&quot; here.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:575
&gt; &gt; +    ASSERT(m_unmultipliedImageResult == WTF::nullopt);
&gt; 
&gt; I might use &quot;!&quot; or &quot;!x.hasValue()&quot; instead.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:593
&gt; &gt; +    ASSERT(m_premultipliedImageResult == WTF::nullopt);
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:30
&gt; &gt; +#include &quot;PixelBuffer.h&quot;
&gt; 
&gt; Don’t need to both include and forward-declare PixelBuffer.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:587
&gt; &gt; +    case DisplayList::ItemType::GetPixelBuffer: {
&gt; &gt;          ASSERT_NOT_REACHED();
&gt; &gt;          break;
&gt; &gt;      }
&gt; 
&gt; No need for these braces. Also seems like we want &quot;return WTF::nullopt&quot; or
&gt; maybe not even bother with &quot;break&quot;.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.h:54
&gt; &gt; +    void putPixelBuffer(WebCore::AlphaPremultiplication inputFormat, const WebCore::WebCore::PixelBuffer&amp;, const WebCore::IntRect&amp; srcRect, const WebCore::IntPoint&amp; destPoint, WebCore::AlphaPremultiplication destFormat) override;
&gt; 
&gt; Does this compile? WebCore::WebCore::PixelBuffer

It did not. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758778</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-10 18:34:54 -0700</bug_when>
    <thetext>Committed r277313 (237573@main): &lt;https://commits.webkit.org/237573@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428221.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758779</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-10 18:35:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/77799571&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428149</attachid>
            <date>2021-05-09 19:17:06 -0700</date>
            <delta_ts>2021-05-09 20:38:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225584-20210509191705.patch</filename>
            <type>text/plain</type>
            <size>226032</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBAQAorMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhl
ciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIHVzZSBvZiB0aGUgRE9NIGxheWVyICYgcmVmLWNvdW50ZWQgSW1hZ2VEYXRhIGNsYXNzIHdp
dGggdGhlIG5ldyAKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgUGl4ZWxCdWZmZXIgY2xhc3MsIHdo
aWNoIEltYWdlRGF0YSBub3cgdXNlcyBpbnRlcm5hbGx5LgorCisgICAgICAgIFNpbmNlIFBpeGVs
QnVmZmVyIGlzIG5vdC1yZWZlcmVuY2UgY291bnRlZCBvciBoZWFwLWFsbG9jYXRlZCBpbiBtb3N0
IGNhc2VzLAorICAgICAgICBtYW55IHVzZXMgb2YgUmVmUHRyPEltYWdlRGF0YT4gdG8gaW5kaWNh
dGUgYSBwb3RlbnRpYWxseSBudWxsIEltYWdlRGF0YSBoYXZlCisgICAgICAgIGJlZW4gcmVwbGFj
ZWQgd2l0aCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4uIEdlbmVyYWxseSwgdGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gdGhhdCB3YXMgb25s
eSBuZWVkZWQgZm9yIHRoZSBET00gb2JqZWN0LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdG8g
bWFueSBmdW5jdGlvbnMgd2l0aCBJbWFnZURhdGEgaW4gdGhlaXIgbmFtZSBub3cgaGF2ZQorICAg
ICAgICBQaXhlbEJ1ZmZlciBpbiB0aGVpciBuYW1lIGluc3RlYWQsIGUuZy4gSW1hZ2VCdWZmZXI6
OmdldEltYWdlRGF0YSBpcyBub3cKKyAgICAgICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
ICh0aG91Z2ggSSB0aGluayBjaGFuZ2luZyB0aGlzIGluIHRoZSBmdXR1cmUgdG8gCisgICAgICAg
IEltYWdlQnVmZmVyOjpjb3B5UGl4ZWxCdWZmZXIgaXMgYSBnb29kIGlkZWEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ltYWdl
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpwaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0UGl4ZWxCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQnVmZmVyU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBl
bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpk
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZl
Q29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNp
emVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdp
bmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpQdXRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQ
dXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6OkdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcjo6cGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YTo6R2V0SW1hZ2VEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE6Om91
dHB1dEZvcm1hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0SW1hZ2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmlucHV0Rm9ybWF0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE6OmRlc3RQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZXN0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
RGF0YVRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0
c0ZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgcHJvdGVjdGlvbiBv
ZiB0aGUgcGl4ZWwgYnVmZmVyIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSByZW1v
dmVkIGluIHIyNzcyMzcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3NiwxMyArMTA3NiwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSB9KTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgaWYg
KCFwaXhlbEJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFy
ZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHBpeGVsQnVmZmVyLT5kYXRh
KCkucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewog
ICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJy
b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTUwLDYgKzMxNTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICBJbnRTaXplIGltYWdlRGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKICAgICAgICAgaW1h
Z2VEYXRhU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBD
cmVhdGluZyB0aGlzIEltYWdlRGF0YSBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgc2tpcCBy
aWdodCB0byBjcmVhdGluZyBhIFBpeGVsQnVmZmVyIGRpcmVjdGx5LgogICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVNpemUsIGFycmF5LnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgZmFpbCgp
OwpAQCAtMzE2Miw3ICszMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6
ZXJvKCksIGxvZ2ljYWxTaXplIH0pOworICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZm
ZXIoKSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRv
IGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
YnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXph
dGlvblN0YXRlKSkpOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsNyArNzQzLDcgQEAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhU
TUxDYW52YXNFbAogI2lmIFVTRShDRykKICAgICAvLyBUcnkgdG8gZ2V0IEltYWdlRGF0YSBmaXJz
dCwgYXMgdGhhdCBtYXkgYXZvaWQgbG9zc3kgY29udmVyc2lvbnMuCiAgICAgaWYgKGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBVbmNhY2hlZFN0cmluZyB7
IGRhdGFVUkwoKmltYWdlRGF0YSwgZW5jb2RpbmdNSU1FVHlwZSwgcXVhbGl0eSkgfTsKKyAgICAg
ICAgcmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgZGF0YVVSTChpbWFnZURhdGEtPnBpeGVsQnVmZmVy
KCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpIH07CiAjZW5kaWYKIAogICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC03NzQsNyArNzc0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIFVTRShDRykKICAgICBpZiAoYXV0byBp
bWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYjsK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0gZGF0YSgqaW1hZ2VEYXRhLCBlbmNv
ZGluZ01JTUVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRh
ID0gZGF0YShpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxp
dHkpOwogICAgICAgICBpZiAoIWJsb2JEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJsb2Ig
PSBCbG9iOjpjcmVhdGUoJmRvY3VtZW50KCksIFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01J
TUVUeXBlKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgV1RG
TW92ZShibG9iKSk7CkBAIC04MTIsNyArODEyLDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldAogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2Nv
bnRleHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVy
biBJbWFnZURhdGE6OmNyZWF0ZShkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
bV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJp
dG1hcC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDYsMTAgKzgwNiw5IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyBJZiBubyBjcm9wcGluZywgcmVz
aXppbmcsIGZsaXBwaW5nLCBldGMuIGFyZSBuZWVkZWQsIHRoZW4gc2ltcGx5IHVzZSB0aGUKICAg
ICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBhbHBoYVByZW11
bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEo
b3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKLSAgICBpZiAoc291cmNlUmVjdGFuZ2xlLnJldHVy
blZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJuVmFs
dWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkKLSAgICAgICAgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUKLSAgICAgICAgJiYgb3B0aW9u
cy5pbWFnZU9yaWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5v
bmUpIHsKLSAgICAgICAgYml0bWFwRGF0YS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIGlmIChz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5sb2NhdGlvbigpLmlzWmVybygpICYmIHNvdXJj
ZVJlY3RhbmdsZS5yZXR1cm5WYWx1ZSgpLnNpemUoKSA9PSBpbWFnZURhdGEtPnNpemUoKSAmJiBz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZSAmJiBvcHRp
b25zLmltYWdlT3JpZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6
Tm9uZSkgeworICAgICAgICBiaXRtYXBEYXRhLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgc291
cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworICAgICAgICAKICAgICAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSkpOwogICAgICAgICAvLyBUaGUgcmVz
dWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRp
b24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgICAgICBwcm9taXNlLnJlc29sdmUoV1RG
TW92ZShpbWFnZUJpdG1hcCkpOwpAQCAtODIzLDcgKzgyMiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6
OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVm
ZmVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRydWUsIFdURk1vdmUocHJvbWlzZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHRlbXBCaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRSZWN0
KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgdGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhLT5waXhl
bEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGVtcEJpdG1hcERhdGEsIGRlc3RSZWN0LCBzb3VyY2VSZWN0
YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNp
emVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmll
bnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIxICs0MywxNiBAQCBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gSW1hZ2VECiAgICAgcmV0dXJuIGNoZWNrZWREYXRh
U2l6ZTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgaWYgKCFzdyB8fCAhc2gpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIEludFNpemUg
c2l6ZShzdywgc2gpOwotICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNp
emUpOwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoaXMg
c2l6ZSJfcyB9OwotICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOwotICAgIGlmICghYnl0ZUFy
cmF5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhICJyZWFsIiBv
dXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxsZWQgb24gaXQ/
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9mIG1lbW9yeSJf
cyB9OwotICAgIH0KLSAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoV1RGTW92ZShwaXhlbEJ1ZmZlcikpKTsKK30K
KworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKFdURk1vdmUoKnBpeGVs
QnVmZmVyKSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC04MCw2ICs3NSwyMyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZURhdGE6OmNyZWF0ZShjb25zCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdU
Rk1vdmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKK0V4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJ
bWFnZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCit7CisgICAgaWYgKCFz
dyB8fCAhc2gpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owor
ICAgIEludFNpemUgc2l6ZShzdywgc2gpOworICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6
OmRhdGFTaXplKHNpemUpOworICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVm
ZmVyIG9mIHRoaXMgc2l6ZSJfcyB9OworICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOworICAg
IGlmICghYnl0ZUFycmF5KSB7CisgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBi
ZSBhICJyZWFsIiBvdXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBj
YWxsZWQgb24gaXQ/CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0
IG9mIG1lbW9yeSJfcyB9OworICAgIH0KKyAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgp
IH0pKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25h
bDx1bnNpZ25lZD4gc2gpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5n
dGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZURhdGE+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWdu
ZWQgc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SW1hZ2VEYXRhPiBjcmVhdGUo
UGl4ZWxCdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQg
c2gpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gY3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFs
PHVuc2lnbmVkPiBzaCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCkBAIC01
Miw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CiAgICAgUGl4
ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsg
fQogCisgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbEJ1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlRGF0YShQaXhl
bEJ1ZmZlciYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDE0ICsyMTk5LDE0IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAot
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKLSAgICBpZiAoIWltYWdl
RGF0YSkgeworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBidWZmZXItPmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7Cisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8g
Z2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURh
dGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJl
dHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIHsgeyBJbWFnZURhdGE6OmNyZWF0ZShXVEZNb3Zl
KCpwaXhlbEJ1ZmZlcikpIH0gfTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBpbnQgZHgsIGludCBkeSkKQEAgLTIy
NDYsNyArMjI0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW0K
ICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBk
YXRhLmhlaWdodCgpIH0pOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAg
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVz
dE9mZnNldCB9KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzYsMTIgKzEy
MzYsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbgogICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKmJhc2UuYnVmZmVyKCkpOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoQ2xlYXJDYWxsZXJPdGhlcik7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4dHVyZUV4dGVuc2lvbkZs
YWdzKCkgY29uc3QKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgogICAgICAg
ICAgICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC0+ZXh0cmFjdFBpeGVsQnVmZmVyKHBpeGVscy0+cGl4ZWxCdWZmZXIoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBhZGp1c3RlZFNvdXJjZUltYWdl
UmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlbW92ZVNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChX
ZWJHTENvbnRleHRPYmplY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNl
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VC
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b25jcmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMCwyMCArMjMwLDIwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAg
ICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzY0LDEyICs3NjQsMTAgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRh
LCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGlu
dCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFn
ZURhdGEtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IHBpeGVsQnVmZmVyLnNpemUoKS53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBwaXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICB1bnNpZ25lZCBwYWNrZWRTaXplOwogICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCkBAIC03NzksNyArNzc3LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0
YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFn
ZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9O
b3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhwaXhlbEJ1
ZmZlci5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFP
cDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBF
eHRlbnNpb25zR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEFWRk9VTkRBVElPTikKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1Y7CkBAIC0xMjkyLDcg
KzEyOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSBidWZmZXIgYWJzdHJhY3Rpb25zIHRo
YXQgdGhlIGNhbGxlciBzaG91bGQgaG9sZCBzZXBhcmF0ZSB0bwogICAgIC8vIHRoZSBjb250ZXh0
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpID0gMDsK
IAogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgbGF5ZXIgc2hvdWxk
IGJlIG1hcmtlZCBjb21wb3NpdGVkIGJ5CkBAIC0xMzQzLDExICsxMzQzLDExIEBAIHB1YmxpYzoK
ICAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgogICAgIHN0
YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVp
IGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0
ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0
aGUgZ2l2ZW4gUGl4ZWxCdWZmZXIgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNr
aW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBl
LAogICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
cy4gUmV0dXJucyB0cnVlCiAgICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4
dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKICAgICAvLyBk
YXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
OCArMTI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MiwyMjcgKzYyLDIyNyBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
CiAgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwgc291
cmNlUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwot
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHNy
Y1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICB1aW50OF90IGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKICAgICAgICAg
aWYgKCFhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgdWludDhfdCByID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbE9mZnNldCArIDIpOwogCiAgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAotICAgIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2lu
dDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAog
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRh
KSBjb25zdAogewogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXplKCku
YXJlYSgpLnVuc2FmZUdldCgpKTsKLSAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbG9naWNh
bFNpemUoKS53aWR0aCgpICogNDsKLSAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdygpOworICAgIHNpemVfdCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUo
KS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc291cmNlQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOwogCi0gICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpOworICAgIHVpbnQ4X3QqIHNvdXJjZVJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKTsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxv
Z2ljYWxTaXplKCkpOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBwaXhlbEZvcm1hdCgpLCBzb3VyY2VCeXRlc1BlclJvdywgc291cmNlUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2ljYWxTaXpl
KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlQ
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCBj
b25zdCB1aW50OF90KiBzcmNQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVsRm9ybWF0LCB1aW50
OF90KiBkZXN0UGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90
KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAgaWYgKCFhbHBoYSkgewot
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7Cisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9
IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4ZWxGb3JtYXQgPT0g
ZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVs
KVswXTsKKyAgICBpZiAoc291cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhl
bClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlUGl4ZWwpWzBd
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgotICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOwotICAgIGRlc3RQ
aXhlbFsxXSA9IHNyY1BpeGVsWzFdOwotICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOwot
ICAgIGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0g
PSBzb3VyY2VQaXhlbFsyXTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gc291cmNlUGl4ZWxb
MV07CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IHNvdXJjZVBpeGVsWzBdOworICAgIGRlc3Rp
bmF0aW9uUGl4ZWxbM10gPSBzb3VyY2VQaXhlbFszXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNvdXJjZVBpeGVsRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1h
dCwgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCkKIHsKLSAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgdWludDhfdCBhbHBoYSA9IHNvdXJjZVBpeGVsWzNdOwogICAgIGlmICgh
YWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Ci0gICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKHNyY1BpeGVsRm9ybWF0LCBzcmNQaXhlbCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0
UGl4ZWwpOworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzb3VyY2VQ
aXhlbEZvcm1hdCwgc291cmNlUGl4ZWwsIGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0
aW9uUGl4ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyY1BpeGVsRm9y
bWF0ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICBpZiAoc291
cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkgeworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzJdID0gKHNvdXJjZVBpeGVsWzJdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxwaGE7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0g
ICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwotICAgIGRlc3RQ
aXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7
CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IChzb3VyY2VQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFs
cGhhOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMF0gKiAyNTUpIC8g
YWxwaGE7CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IGFscGhhOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChQaXhlbEZvcm1hdCBz
cmNQaXhlbEZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIFBpeGVsRm9ybWF0IGRlc3RQ
aXhlbEZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3Jt
YXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNQaXhlbFszXTsKKyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAg
ICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKLSAgICAgICAgY29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoc3JjUGl4ZWxGb3JtYXQsIHNyY1BpeGVsLCBkZXN0UGl4ZWxGb3Jt
YXQsIGRlc3RQaXhlbCk7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KHNvdXJjZVBpeGVsRm9ybWF0LCBzb3VyY2VQaXhlbCwgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwg
ZGVzdGluYXRpb25QaXhlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3Jj
UGl4ZWxGb3JtYXQgPT0gZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgIGlmIChzb3VyY2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0KSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSAoc291cmNlUGl4ZWxb
MF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAo
c291cmNlUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxbM10gPSBhbHBoYTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KLSAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291cmNlUGl4ZWxbMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IChzb3VyY2VQ
aXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0g
YWxwaGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQo
UGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVs
LCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsKQogewotICAgIGlmIChzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQpIHsK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgIGlmIChzb3Vy
Y2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVsRm9ybWF0KSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2VQaXhlbClbMF07CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAg
ZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Ci0gICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxb
MV07Ci0gICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07Ci0gICAgZGVzdFBpeGVsWzNdID0g
c3JjUGl4ZWxbM107CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOwor
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICBkZXN0aW5hdGlv
blBpeGVsWzJdID0gc291cmNlUGl4ZWxbMF07CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IHNv
dXJjZVBpeGVsWzNdOwogfQogCiB0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKFBpeGVsRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgUGl4ZWxGb3JtYXQsIHVpbnQ4X3QqKT4KIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAotICAgIFBpeGVsRm9ybWF0IHNy
Y1BpeGVsRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywK
LSAgICBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgUGl4ZWxGb3Jt
YXQgc291cmNlUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90
KiBzb3VyY2VSb3dzLAorICAgIFBpeGVsRm9ybWF0IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndp
ZHRoKCkgKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKLSAg
ICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY1BpeGVsRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdFBp
eGVsRm9ybWF0LCAmZGVzdFJvd3NbeF0pOwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBj
b3B5RnVuY3Rvcihzb3VyY2VQaXhlbEZvcm1hdCwgJnNvdXJjZVJvd3NbeF0sIGRlc3RpbmF0aW9u
UGl4ZWxGb3JtYXQsICZkZXN0aW5hdGlvblJvd3NbeF0pOworICAgICAgICBzb3VyY2VSb3dzICs9
IHNvdXJjZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0aW5hdGlvblJvd3MgKz0gZGVzdGluYXRp
b25CeXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc291cmNlUGl4
ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBzb3VyY2VSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25CeXRl
c1BlclJvdywgdWludDhfdCogZGVzdGluYXRpb25Sb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAogewogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldHRpbmcgb3IgcHV0
dGluZyBwaXhlbCBkYXRhIHdpdGggZGVlcCBjb2xvciBidWZmZXJzLgotICAgIEFTU0VSVChzcmNQ
aXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc3JjUGl4ZWxGb3JtYXQgPT0gUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBBU1NFUlQoZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpSR0JBOCB8fCBkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBBU1NFUlQoc291cmNlUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJj
ZVBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGRlc3RpbmF0aW9uUGl4ZWxG
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKLSAgICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0
ID09IGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZUFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3Ms
IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0
aW9uUm93cywgc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgICAgICBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc291
cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlv
blBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIHNp
emUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKGRlc3RpbmF0
aW9uQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZD4oc291cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93
LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVy
Um93LCBkZXN0aW5hdGlvblJvd3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQ
aXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
Pihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRlc3Rp
bmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgc2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0aW5hdGlvbkFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBk
YXRhKSBjb25zdAogewotICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOworICAgIGF1dG8gc291cmNlUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNvdXJjZVJlY3QpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBzb3VyY2VSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBp
bnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgp
LCBzb3VyY2VSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CiAKLSAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQotICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVk
LngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGlu
YXRpb25SZWN0LnNldFgoLXNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0
U2NhbGVkLnkoKSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgp
KTsKKyAgICBpZiAoc291cmNlUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2V0WSgtc291cmNlUmVjdFNjYWxlZC55KCkpOwogCi0gICAgaWYgKGRlc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKLSAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCku
emVyb0ZpbGwoKTsKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSkKKyAgICAgICAgcGl4ZWxCdWZmZXItPmRhdGEoKS56ZXJvRmlsbCgpOwog
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgdW5z
aWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VSZWN0U2NhbGVkLndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5k
YXRhKCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRl
c3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBi
eXRlc1BlclJvdygpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgc291cmNlUmVjdENsaXBwZWQueSgpICogc291cmNlQnl0ZXNQZXJS
b3cgKyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAot
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhl
bEZvcm1hdDo6UkdCQTgsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVs
Rm9ybWF0KCksIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5h
dGlvbkFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci0+Zm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQ
ZXJSb3csIGRlc3RpbmF0aW9uUm93cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiAKLSAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0LCB2b2lkKiBkYXRhKQordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlQWxwaGFGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uUG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRp
b25BbHBoYUZvcm1hdCwgdm9pZCogZGF0YSkKIHsKLSAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRT
Y2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGF1dG8gc291cmNl
UmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworICAgIGF1dG8g
ZGVzdGluYXRpb25Qb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RpbmF0aW9u
UG9pbnQpOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAg
SW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOwotICAgIGRlc3RSZWN0Lm1vdmVCeShk
ZXN0UG9pbnRTY2FsZWQpOworICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBwZWQgPSBpbnRlcnNl
Y3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkgfSwgc291cmNlUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBzb3VyY2VSZWN0Q2xpcHBl
ZDsKKyAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQpOwog
Ci0gICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKLSAgICAgICAgZGVzdFJlY3Quc2V0WChk
ZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2Fs
ZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFgoZGVzdGluYXRpb25SZWN0
LngoKSAtIHNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2NhbGVkLnko
KSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxl
ZC55KCkpOworICAgIGlmIChzb3VyY2VSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5zZXRZKGRlc3RpbmF0aW9uUmVjdC55KCkgLSBzb3VyY2VSZWN0U2NhbGVkLnko
KSk7CiAKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7Ci0gICAgc3JjUmVj
dENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRl
c1BlclJvdyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3Vy
Y2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50
OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RD
bGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICog
NDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCi0gICAgICAgIGRlc3RGb3JtYXQs
IHBpeGVsRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIHNvdXJjZUFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSwgc291
cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsCisgICAgICAgIGRlc3RpbmF0aW9uQWxwaGFGb3Jt
YXQsIHBpeGVsRm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OCArNDMsOCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRH
TDsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKIGNs
YXNzIE5hdGl2ZUltYWdlOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAKIGVudW0gQmFja2luZ1N0b3Jl
Q29weSB7CiAgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgpAQCAtMTA5LDggKzEwOSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE1NCw4ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRh
dGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOwogCiAgICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw1MyBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+IGNvbXB1dGVCdWZmZXJTaXplKFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZvcm1hdHMgYXJl
IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUX1VOVVNFRChmb3JtYXQsIGZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworCisgICAg
cmV0dXJuIHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIGJ5dGVzUGVyUGl4ZWw7Cit9CisK
K09wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdWludDY0X3QgcHJvcG9zZWRCdWZmZXJTaXplKQoreworICAgIEFT
U0VSVChmb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9PSBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghKGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9y
bWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBhdXRvIGNvbXB1dGVkQnVmZmVyU2l6ZSA9IGNvbXB1dGVCdWZmZXJTaXplKGZvcm1h
dCwgc2l6ZSk7CisgICAgaWYgKGNvbXB1dGVkQnVmZmVyU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoY29tcHV0ZWRCdWZmZXJTaXpl
LnVuc2FmZUdldCgpICE9IHByb3Bvc2VkQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisgICAgaWYgKCFwaXhlbEFy
cmF5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgY29sb3JT
cGFjZSwgZm9ybWF0LCBzaXplLCBwaXhlbEFycmF5LnJlbGVhc2VOb25OdWxsKCkgfSB9OworfQor
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIC8vIE5PVEU6IE9ubHkgOC1iaXQgZm9ybWF0cyBhcmUgY3VycmVudGx5
IHN1cHBvcnRlZC4KKyAgICBBU1NFUlQoZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCBm
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGNv
bXB1dGVCdWZmZXJTaXplKGZvcm1hdCwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUuaGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gcGl4ZWxB
cnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNp
emUudW5zYWZlR2V0KCkpOworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgcGl4
ZWxBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKK30KKwogUGl4ZWxCdWZmZXI6OlBpeGVsQnVm
ZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBmb3JtYXQs
IGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiYmIGRhdGEp
CiAgICAgOiBtX2NvbG9yU3BhY2UgeyBjb2xvclNwYWNlIH0KICAgICAsIG1fZm9ybWF0IHsgZm9y
bWF0IH0KQEAgLTQ2LDQgKzkwLDkgQEAgUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9u
ZSgpIGNvbgogICAgIHJldHVybiB7IG1fY29sb3JTcGFjZSwgbV9mb3JtYXQsIG1fc2l6ZSwgVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5sZW5ndGgoKSkg
fTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQoreworICAgIHJldHVybiB0cyA8PCAmcGl4ZWxCdWZmZXIu
ZGF0YSgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
aXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICsz
MCwyMCBAQAogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3Ry
ZWFtOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBpeGVsQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaXhlbEJ1ZmZlcik7CiBwdWJsaWM6CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiB0cnlDcmVhdGUoRGVzdGluYXRp
b25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gdHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIHVpbnQ2
NF90IHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisKICAgICBQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0LCBjb25zdCBJbnRTaXplJiwgUmVmPEpTQzo6VWludDhDbGFt
cGVkQXJyYXk+JiYpOwotICAgIH5QaXhlbEJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Q
aXhlbEJ1ZmZlcigpOwogCiAgICAgUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0
OwogICAgIFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0OwpA
QCAtNDgsNiArNTUsOSBAQCBwdWJsaWM6CiAKICAgICBQaXhlbEJ1ZmZlciBkZWVwQ2xvbmUoKSBj
b25zdDsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6CiAgICAgRGVzdGluYXRpb25D
b2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBQaXhlbEZvcm1hdCBtX2Zvcm1hdDsKQEAgLTU1
LDQgKzY1LDQ2IEBAIHByaXZhdGU6CiAgICAgUmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IG1f
ZGF0YTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBjb25zdCBQaXhlbEJ1ZmZlciYpOworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsKKyAgICBlbmNvZGVyIDw8IG1fZm9ybWF0
OworICAgIGVuY29kZXIgPDwgbV9zaXplOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG1fZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShmb3JtYXQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgSW50U2l6ZSBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICB1aW50NjRfdCBkYXRhQnl0ZUxlbmd0aDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gcmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0
ZUZvckRlY29kaW5nKGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgZGF0YUJ5dGVMZW5ndGgpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+ZGF0YSgpLCBy
ZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTkwNCwxMiArOTA0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cihJbWFnZUIKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2lu
dCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICgh
bGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXllckRh
dGEtPmRhdGEoKS5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQp
OwotICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOworICAgIGxheWVySW1hZ2UucHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5
ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hh
ZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0
ZVNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGlu
Zy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgpAQCAtNzcsMTEgKzc3LDExIEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBo
YUNoYW5uZWxGcm9tUGl4ZWxzKGkKIH0KICNlbmRpZgogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIFNjb3BlZFBpeGVsU3RvcmFnZU1vZGUgcGFj
a0FsaWdubWVudChHTF9QQUNLX0FMSUdOTUVOVCk7CiAgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0
KQogICAgICAgICBwYWNrQWxpZ25tZW50LnBpeGVsU3RvcmUoNCk7CkBAIC05MCwxNiArOTAsMTYg
QEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuRwogICAgIFNjb3BlZFBp
eGVsU3RvcmFnZU1vZGUgcGFja1NraXBQaXhlbHMoR0xfUEFDS19TS0lQX1BJWEVMUywgMCwgbV9p
c0ZvcldlYkdMMik7CiAgICAgU2NvcGVkQnVmZmVyQmluZGluZyBzY29wZWRQaXhlbFBhY2tCdWZm
ZXJSZXNldChHTF9QSVhFTF9QQUNLX0JVRkZFUiwgMCwgbV9pc0ZvcldlYkdMMik7CiAKLSAgICBn
bDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdl
RGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0
YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpKTsKKyAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgp
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7
CiAgICAgLy8gRklYTUU6IFJlbmRlcmluZyB0byBHTF9SR0IgdGV4dHVyZXMgd2l0aCBhIElPU3Vy
ZmFjZSBib3VuZCB0byB0aGUgdGV4dHVyZSBpbWFnZSBsZWF2ZXMKICAgICAvLyB0aGUgYWxwaGEg
aW4gdGhlIElPU3VyZmFjZSBpbiBpbmNvcnJlY3Qgc3RhdGUuIEFsc28gQU5HTEUgZ2w6OlJlYWRQ
aXhlbHMgd2lsbCBpbiBzb21lCiAgICAgLy8gY2FzZXMgZXhwb3NlIHRoZSBub24tMjU1IHZhbHVl
cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1ODA0
CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICghY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhl
bHMoaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRh
dGEoKS5kYXRhKCkpOworICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhwaXhlbEJ1
ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIHBpeGVs
QnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKICNlbmRpZgotICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXgKICNlbmRpZgogfQogCi1SZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQorT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCiB7CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgZmJvQmlu
ZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTyk7CiAgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRH
TENhaXJvLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJJbWFnZS5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2lu
Y2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTEwNiwxNSArMTA2
LDE1IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXgKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZh
cyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1
dGVzLCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJU
KCFpbWFnZURhdGEtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIu
c2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBDb252ZXJ0IFJHQkEgdG8gQkdSQS4gQkdSQSBpcyBDQUlST19G
T1JNQVRfQVJHQjMyIG9uIGxpdHRsZS1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4KLSAgICBzaXplX3Qg
dG90YWxCeXRlcyA9IGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKLSAgICB1aW50OF90
KiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCk7CisgICAgc2l6ZV90IHRvdGFsQnl0
ZXMgPSBwaXhlbEJ1ZmZlci5kYXRhKCkuYnl0ZUxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVs
cyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCiAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOwogCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFRvQ2FuCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOworICAgIGF1dG8gaW1hZ2VTaXplID0gcGl4ZWxCdWZmZXIu
c2l6ZSgpOwogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIGltYWdl
RGF0YS0+ZGF0YSgpLmRhdGEoKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VEYXRhLT53aWR0
aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPndpZHRoKCkgKiA0KSk7CisgICAg
ICAgIHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGltYWdlU2l6ZS53aWR0aCgpICogNCkp
OwogCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVN1
cmZhY2UpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogI2lmIFVTRShDQUlSTykKQEAgLTEy
MCwxNCArMTIwLDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUIK
ICAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1fc3VyZmFjZS5nZXQoKSkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVm
ZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3Jt
YXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IHNy
Y1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKICAgICBJbnRQb2lu
dCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4
IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJiwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xORU9OLmgiCkBAIC01MDYsOSArNTA2LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yOjpleAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFJlZjxJbWFnZURhdGE+JiYgaW1h
Z2VEYXRhLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBBU1NFUlQoIWltYWdlRGF0YS0+c2l6ZSgpLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBp
ZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBJbnB1dCBp
cyBHTF9SR0JBID09IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYSpMYXN0
LgpAQCAtNTIxLDEzICs1MjEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRUb0NhbgogICAgIGVsc2UKICAgICAgICAgYml0bWFwSW5mbyB8PSBrQ0dJbWFnZUFscGhhTGFz
dDsKIAotICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7Ci0gICAgaW50IHJv
d0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OwotICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJv
d0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwotICAgIHVpbnQ4X3QqIGltYWdlUGl4ZWxzID0g
aW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IG1ha2VSZWYo
cGl4ZWxCdWZmZXIuZGF0YSgpKTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLnNp
emUoKTsKKyAgICBhdXRvIHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAgIGF1
dG8gZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICB1aW50OF90
KiBpbWFnZVBpeGVscyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChpbWFnZVBpeGVscywgZGF0YVNpemUpOwotICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZpbWFnZURh
dGEubGVha1JlZigpLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBj
b25zdCB2b2lkKiwgc2l6ZV90KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VEYXRh
Kj4oY29udGV4dCktPmRlcmVmKCk7CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmcGl4ZWxBcnJheS5sZWFrUmVmKCksIGltYWdl
UGl4ZWxzLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3Qp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNDOjpVaW50OENsYW1wZWRBcnJheSo+KGNvbnRleHQp
LT5kZXJlZigpOwogICAgIH0pKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3Jl
YXRlKGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhl
aWdodCgpLCA4LCAzMiwgcm93Qnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8s
IGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0xODcsMTggKzE4NiwxOCBAQCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAg
ICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkK
KyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIXBp
eGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXV0byYg
cGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgICAgICBhdXRvIGRhdGFTaXplID0g
cGl4ZWxBcnJheS5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBpbWFnZURhdGEtPnNpemUoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5ID0gbWFrZVJl
ZihwaXhlbEJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJy
YXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBp
eGVsQnVmZmVyLT5zaXplKCk7CiAKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChwaXhlbEFycmF5LmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZl
cklzQmlnRW5vdWdoKHBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUpOwogCi0gICAgICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKGlt
YWdlRGF0YS5sZWFrUmVmKCksIHBpeGVsQXJyYXkuZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQq
IGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8SW1hZ2VEYXRhKj4oY29udGV4dCktPmRlcmVmKCk7CisgICAgICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhlbEFycmF5
LmxlYWtSZWYoKSwgcGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRl
eHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6
VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICAgICAgfSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTksMTQgKzE1OSwxNCBAQCBWZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlCiAgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
aW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CisgICAg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZm
ZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9kYXRhKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4
IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3Ju
ZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkg
KzI5LDkgQEAKICNpZiBIQVZFKElPU1VSRkFDRSkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC0xNjgsMTEgKzE2OCwxMSBAQCB2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6ZHJhd0NvCiAKIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAogewotICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1hZ2VEYXRhKSB7CisgICAg
aWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikgewogICAgICAgICAvLyBGb3Jj
ZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgogICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFp
bmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCiAgICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChG
bG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotICAgICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1h
Z2VEYXRhID0gZmFsc2U7CisgICAgICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZl
ciA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQpAQCAtMTgzLDE3
ICsxODMsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFjawogICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAg
SU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhl
bEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
OwogfQogCi12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1
cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOwotICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgPSB0cnVlOworICAgIEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IHRydWU7CiB9CiAKIElPU3VyZmFjZSogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzdXJmYWNlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAKICAgICBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
JiYpOwogCisgICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7CisKICAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlOwogCkBAIC02MSw5ICs2Myw4IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0gICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7
CiAKICAgICBib29sIGlzSW5Vc2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHJlbGVhc2VH
cmFwaGljc0NvbnRleHQoKSBvdmVycmlkZTsKQEAgLTc4LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgbXV0YWJsZSBib29sIG1fcmVxdWly
ZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX3Jl
cXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgeyBmYWxzZSB9OwogCiAgICAgbXV0YWJsZSBi
b29sIG1fbmVlZHNTZXR1cENvbnRleHQgeyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksOCArMjksOCBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SW1hZ2VJTy9JbWFn
ZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQmFzZTY0Lmg+CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cgogICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRh
dGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCkBAIC0xMzEs
NyArMTMxLDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiAg
ICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdz
IGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21w
b3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uu
d2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291
cmNlLnNpemUoKS53aWR0aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgaWYg
KCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTU0LDEyICsxNTQsMTIgQEAgc3RhdGljIFJldGFpblB0
cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERh
dGEuZGF0YSgpOwogICAgIH0KIAotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0
YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0
ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCkgKiBzb3Vy
Y2Uuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLnNpemUoKS53aWR0
aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKSwgMCkpOwogICAgIGlmICghZGF0YVByb3ZpZGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBz
b3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVm
YXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKHNvdXJjZS5zaXplKCkud2lkdGgoKSwgc291cmNlLnNpemUoKS5oZWlnaHQoKSwgOCwg
MzIsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0Jp
dG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAKICAgICBhdXRvIGNmRGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CiAgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBj
ZkRhdGEuZ2V0KCkpKQpAQCAtMTc2LDcgKzE3Niw3IEBAIFN0cmluZyBkYXRhVVJMKENGRGF0YVJl
ZiBkYXRhLCBjb25zdCBTdHIKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CiB9CiAKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
CitTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7CiAgICAgaWYgKGF1dG8gZGF0
YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKICAgICAgICAgcmV0dXJuIGRh
dGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIFZlY3Rvcjx1
aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkQKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
VmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKICAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNv
dXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQogICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogCiBXRUJDT1JF
X0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCog
YnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQCBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlCiBib29sIGVuY29kZUltYWdlKENHSW1h
Z2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFi
bGVEYXRhUmVmKTsKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CitTdHJpbmcgZGF0YVVSTChjb25z
dCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CiAKIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7Ci1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3Qg
UGl4ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjYxLDEzICs2NjEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvcgogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsK
IH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21w
b3NpdGVkUmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgYXV0byYgZGlzcGxheUJ1ZmZl
ciA9IG1fc3dhcENoYWluLT5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVy
LnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoZGlzcGxheUJ1ZmZlci5z
dXJmYWNlLT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gTm90
ZTogV2UgYXJlIHVzaW5nIEdMIHRvIHJlYWQgdGhlIElPU3VyZmFjZS4gQXQgdGhlIHRpbWUgb2Yg
d3JpdGluZywgdGhlcmUgYXJlIG5vIGNvbnZpbmllbnQKICAgICAvLyBmdW5jdGlvbnMgdG8gY29u
dmVydCB0aGUgSU9TdXJmYWNlIHBpeGVsIGRhdGEgdG8gSW1hZ2VEYXRhLiBUaGUgaW1hZ2UgZGF0
YSBlbmRzIHVwIGJlaW5nCiAgICAgLy8gZHJhd24gdG8gYSBJbWFnZUJ1ZmZlciwgYnV0IGF0IHRo
ZSB0aW1lIHRoZXJlJ3Mgbm8gZnVuY3Rpb25zIHRvIGNvbnN0cnVjdCBhIE5hdGl2ZUltYWdlCkBA
IC02NzgsNyArNjc4LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
RwogICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5KCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQg
IT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKICAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRh
cmdldCwgdGV4dHVyZSk7CiAgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxheU9iaiwg
ZGlzcGxheUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAg
ICBTY29wZWRGcmFtZWJ1ZmZlciBmYm87CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZl
ckJpbmRpbmcgZmJvQmluZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTywg
ZmJvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUJsZW5kTkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVC
bGVuZE5FT04uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKIAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGFybV9uZW9uLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiwzMyArMTEyLDM0IEBAIHZvaWQgRkVCbGVu
ZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAg
IGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QSA9IGluLT5w
cmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QiA9
IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAotICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7Ci0gICAgQVNT
RVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKKyAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxBcnJh
eUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAotICAg
IGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04o
c3JjUGl4ZWxBcnJheUEtPmRhdGEoKSwgc3JjUGl4ZWxBcnJheUItPmRhdGEoKSwgZHN0UGl4ZWxB
cnJheS0+ZGF0YSgpLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VQaXhl
bEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOworICAgIEFTU0VSVChw
aXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CisKKyAgICBp
ZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CisgICAgICAgIHBsYXRmb3JtQXBwbHlO
RU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCks
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVs
IHdlIGV4cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPiAwKTsK
KyAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwogICAgIHVpbnQzMl90IHNv
dXJjZUFbMl0gPSB7MCwgMH07CiAgICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7MCwg
MH07CiAKLSAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Bp
eGVsQXJyYXlBLT5kYXRhKCkpWzBdOwotICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KHNyY1BpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOworICAgIHNvdXJj
ZUFbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUEtPmRh
dGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSlbMF07CiAgICAgcGxhdGZvcm1BcHBseU5F
T04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291
cmNlQkFuZERlc3QpLCA4KTsKLSAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZHN0UGl4
ZWxBcnJheS0+ZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJj
ZUJBbmREZXN0WzBdOwogfQogCiB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2ln
bmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5Qiwg
dW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDEw
ICsyOTgsMTAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbQogICAg
ICAgICByZXR1cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZl
cj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAg
IHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPihpdGVtLmdldDxNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxHZXRJbWFnZURhdGE+KGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxH
ZXRQaXhlbEJ1ZmZlcj4oaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dFBpeGVsQnVm
ZmVyPihpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJuIGFwcGVu
ZDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsx
ODgsOCBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgogICAg
IGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKLSAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAg
Y2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CiAgICAgICAgIC8vIFNob3VsZCBhbHJlYWR5
IGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgwLDExICsyODAsMTEgQEAgdm9pZCBJdGVtSGFuZGxl
OjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAg
IGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxHZXRJbWFnZURhdGE+Ojp2YWx1ZSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEdldFBpeGVsQnVmZmVyPjo6dmFsdWUp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAg
ICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgZ2V0PFB1dFBpeGVsQnVmZmVyPigpLn5QdXRQ
aXhlbEJ1ZmZlcigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6CiAgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKQEAgLTUw
NCwxMCArNTA0LDEwIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbUhhbmRsZSBkZXMK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAg
ICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88
R2V0SW1hZ2VEYXRhPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88UHV0SW1hZ2VEYXRhPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAg
IHJldHVybiBjb3B5SW50bzxHZXRQaXhlbEJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOworICAg
IGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88
UHV0UGl4ZWxCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVEYXNoPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwogICAgIGNhc2UgSXRlbVR5
cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHZXRJbWFnZURhdGEpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihQdXRJbWFnZURhdGEp
OworICAgIGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdldFBpeGVsQnVmZmVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihQdXRQaXhlbEJ1ZmZlcik7CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJu
IHNpemVvZihQYWludEZyYW1lRm9yTWVkaWEpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgaXNE
cmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6CkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBl
IHR5cGUpCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYToKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICBj
YXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6CkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
OgorICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVBhdGg6CkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
IGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhl
bEJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4
IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGbHVzaENvbnRleHQsCiAg
ICAgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyLAogICAgIE1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlciwKLSAgICBHZXRJbWFnZURhdGEsCi0gICAgUHV0SW1hZ2VEYXRh
LAorICAgIEdldFBpeGVsQnVmZmVyLAorICAgIFB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShW
SURFTykKICAgICBQYWludEZyYW1lRm9yTWVkaWEsCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVw
bGF5ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CkBAIC03NjksMzUgKzc2OCw0NCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR2V0SW1hZ2VEYXRhJiBpdGVtKQorc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdldFBpeGVsQnVmZmVyJiBp
dGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgib3V0cHV0Rm9ybWF0IiwgaXRlbS5vdXRwdXRG
b3JtYXQoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3Jj
UmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQotICAgICwgbV9pbWFn
ZURhdGEoaW1hZ2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVx
dWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KKyAgICAs
IG1fcGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpIC8vIFRoaXMgY29weSBpcyBh
Y3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNzIG9mIHB1dFBpeGVsQnVm
ZmVyKCkuCiAgICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQogICAgICwgbV9kZXN0Rm9y
bWF0KGRlc3RGb3JtYXQpCiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogICAgIDogbV9zcmNSZWN0
KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCi0gICAgLCBtX2ltYWdlRGF0
YShXVEZNb3ZlKGltYWdlRGF0YSkpCisgICAgLCBtX3BpeGVsQnVmZmVyKFdURk1vdmUocGl4ZWxC
dWZmZXIpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZv
cm1hdChkZXN0Rm9ybWF0KQogewogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQorUHV0UGl4ZWxCdWZmZXI6
OlB1dFBpeGVsQnVmZmVyKGNvbnN0IFB1dFBpeGVsQnVmZmVyJiBvdGhlcikKKyAgICA6IG1fc3Jj
UmVjdChvdGhlci5tX3NyY1JlY3QpCisgICAgLCBtX2Rlc3RQb2ludChvdGhlci5tX2Rlc3RQb2lu
dCkKKyAgICAsIG1fcGl4ZWxCdWZmZXIob3RoZXIubV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkK
KyAgICAsIG1faW5wdXRGb3JtYXQob3RoZXIubV9pbnB1dEZvcm1hdCkKKyAgICAsIG1fZGVzdEZv
cm1hdChvdGhlci5tX2Rlc3RGb3JtYXQpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRQaXhlbEJ1ZmZlciYgaXRlbSkKIHsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUo
KSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwaXhlbEJ1ZmZlclNpemUiLCBpdGVtLnBpeGVsQnVm
ZmVyKCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1Jl
Y3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0UG9pbnQiLCBpdGVtLmRlc3RQb2ludCgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3RGb3JtYXQiLCBpdGVtLmRlc3RGb3JtYXQoKSk7
CkBAIC0xMDY0LDggKzEwNzIsOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OiB0cyA8PCAiZmx1c2gtY29u
dGV4dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtZGVzdGluYXRpb24t
aW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFu
Z2VJdGVtQnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5kLWNoYW5nZS1pdGVtLWJ1ZmZlciI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YTogdHMgPDwgImdldC1pbWFnZS1k
YXRhIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB0cyA8PCAicHV0
LWltYWdlLWRhdGEiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjog
dHMgPDwgImdldC1waXhlbC1idWZmZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQ
aXhlbEJ1ZmZlcjogdHMgPDwgInB1dC1waXhlbC1idWZmZXIiOyBicmVhazsKICNpZiBFTkFCTEUo
VklERU8pCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB0cyA8PCAicGFp
bnQtZnJhbWUtZm9yLW1lZGlhIjsgYnJlYWs7CiAjZW5kaWYKQEAgLTEyMzEsMTEgKzEyMzksMTEg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSQogICAgIGNhc2UgSXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1h
Z2VEYXRhPigpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICB0
cyA8PCBpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIkdyYWRpZW50
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllcklkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIFRl
eHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VEYXRhOwogY2xh
c3MgTWVkaWFQbGF5ZXI7CiBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CiAKQEAgLTE5MDAs
MTMgKzE4OTksMTMgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotY2xh
c3MgR2V0SW1hZ2VEYXRhIHsKK2NsYXNzIEdldFBpeGVsQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkdldEltYWdlRGF0
YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6Okdl
dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAK
LSAgICBHZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCisgICAgR2V0UGl4ZWxCdWZm
ZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCiAgICAgICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAg
ICAgICAgICwgbV9vdXRwdXRGb3JtYXQob3V0cHV0Rm9ybWF0KQogICAgIHsKQEAgLTE5MjAsMTcg
KzE5MTksMTkgQEAgcHJpdmF0ZToKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fb3V0cHV0
Rm9ybWF0OwogfTsKIAotY2xhc3MgUHV0SW1hZ2VEYXRhIHsKK2NsYXNzIFB1dFBpeGVsQnVmZmVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlB1dEltYWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXIm
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKworICAgIFB1dFBpeGVsQnVmZmVyKGNv
bnN0IFB1dFBpeGVsQnVmZmVyJik7CiAKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdDsgfQotICAgIEltYWdlRGF0YSYg
aW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1faW1hZ2VEYXRhOyB9CisgICAgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlcjsgfQog
ICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQogICAgIElu
dFBvaW50IGRlc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFBvaW50OyB9CiAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0Rm9y
bWF0OyB9CkBAIC0xOTM5LDMxICsxOTQwLDMxIEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1fZGVzdFBvaW50LCBtX3Ny
Y1JlY3Quc2l6ZSgpIH19OyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IGRlY29kZShEZWNv
ZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3NyY1JlY3Q7CiAgICAgSW50UG9pbnQg
bV9kZXN0UG9pbnQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV9pbWFnZURhdGE7CisgICAgUGl4
ZWxCdWZmZXIgbV9waXhlbEJ1ZmZlcjsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5w
dXRGb3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBQdXRJbWFnZURhdGE6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBQdXRQaXhlbEJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVu
Y29kZXIgPDwgbWFrZVJlZigqbV9pbWFnZURhdGEpOworICAgIGVuY29kZXIgPDwgbV9waXhlbEJ1
ZmZlcjsKICAgICBlbmNvZGVyIDw8IG1fc3JjUmVjdDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdFBv
aW50OwogICAgIGVuY29kZXIgPDwgbV9kZXN0Rm9ybWF0OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IFB1dFBpeGVsQnVmZmVyOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uPiBpbnB1dEZvcm1hdDsKLSAgICBPcHRpb25hbDxSZWY8SW1hZ2VEYXRhPj4gaW1hZ2VE
YXRhOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwaXhlbEJ1ZmZlcjsKICAgICBPcHRpb25h
bDxJbnRSZWN0PiBzcmNSZWN0OwogICAgIE9wdGlvbmFsPEludFBvaW50PiBkZXN0UG9pbnQ7CiAg
ICAgT3B0aW9uYWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gZGVzdEZvcm1hdDsKQEAgLTE5NzIs
OCArMTk3Myw4IEBAIE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VEYXRhOjpkZWMKICAg
ICBpZiAoIWlucHV0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ZGVjb2RlciA+PiBpbWFnZURhdGE7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgZGVjb2RlciA+
PiBwaXhlbEJ1ZmZlcjsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgZGVjb2RlciA+PiBzcmNSZWN0OwpAQCAtMTk4OCw3ICsxOTg5LDcg
QEAgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlYwogICAgIGlmICghZGVz
dEZvcm1hdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiB7eyAq
aW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAq
ZGVzdEZvcm1hdCB9fTsKKyAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCpwaXhl
bEJ1ZmZlciksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCB9fTsKIH0KIAogI2lm
IEVOQUJMRShWSURFTykKQEAgLTI0MTksOCArMjQyMCw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6RGkKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZsdXNoQ29udGV4dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFD
b21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciwKLSAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldEltYWdlRGF0YSwKLSAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSwKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyLAorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXIsCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhLAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCShyZXZpc2lvbiAyNzcy
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSwxNCBAQCBS
ZWNvcmRlcjo6flJlY29yZGVyKCkKICAgICBMT0coRGlzcGxheUxpc3RzLCAiUmVjb3JkZWQgZGlz
cGxheSBsaXN0OlxuJXMiLCBtX2Rpc3BsYXlMaXN0LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQordm9pZCBSZWNvcmRlcjo6Z2V0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QpCiB7Ci0gICAgYXBwZW5kPEdldEltYWdlRGF0YT4ob3V0cHV0Rm9y
bWF0LCBzb3VyY2VSZWN0KTsKKyAgICBhcHBlbmQ8R2V0UGl4ZWxCdWZmZXI+KG91dHB1dEZvcm1h
dCwgc291cmNlUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJDb3Jl
OjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KQordm9pZCBSZWNvcmRlcjo6cHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxC
dWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICBhcHBl
bmQ8UHV0UGl4ZWxCdWZmZXI+KGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVz
dFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5l
U3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAkocmV2aXNpb24gMjc3MjU1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDE0IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4
X3Q7CisKIGNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHbHlwaEJ1
ZmZlcjsKIGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGb250Owor
Y2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNz
IFBpeGVsQnVmZmVyOwogCiBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBzdHJ1Y3QgSW1h
Z2VQYWludGluZ09wdGlvbnM7CkBAIC01Nyw4ICs1OCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgflJlY29yZGVyKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW1hZ2VEYXRhOwogCiBuYW1lc3BhY2UgRGlzcGxheUxp
c3QgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTI4NiwxMiArMjg2LDEyIEBAIHZvaWQg
RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVj
dChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBpbWFn
ZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBh
dXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VE
YXRhLT5kYXRhKCk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0
YS0+c2l6ZSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwor
ICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwogCiAg
ICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKICAg
ICAKQEAgLTMxMyw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRh
LCBpbWFnZVJlY3QpOworICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsK
IH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0xMDgsMTEgKzEwOCwxMSBA
QCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogaW1hZ2VSZXN1bHQgPSBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VSZXN1bHQpCisg
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7CiAKICAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKICAgICBMb29rdXBUYWJsZSBncmVlblRh
YmxlOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0
Zm9ybUFwcGx5UwogICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7CiAgICAgY29tcHV0ZUxvb2t1
cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAot
ICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3Vs
dChwaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICB1
bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50
OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgeworICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5VW5tdWx0aXBs
aWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0g
ZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0
aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZz
ZXQgKz0gNCkgewogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4
ZWxPZmZzZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtk
YXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBi
bHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2lu
Y2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDIxICsyMjksMjEgQEAgdm9pZCBGRUNvbXBv
c2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKAogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5w
dXRFZmZlY3QoMSk7CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FS
SVRITUVUSUMpIHsKLSAgICAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgICAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKTsKKyAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAg
ICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAg
ICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKyAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
KyAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJy
YXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIAotICAgICAg
ICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJh
eSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1Nv
ZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1f
azIsIG1fazMsIG1fazQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYv
V29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzcxLDMz
ICszNzEsMjggQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdAogewog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlRGF0YSog
cmVzdWx0SW1hZ2U7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmVzdWx0SW1h
Z2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGVsc2UKLSAgICAgICAg
cmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAgIGlm
ICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJl
c2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFn
ZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
KyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBp
eGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gc3JjUGl4ZWxBcnJheTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHNvdXJjZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc3Jj
UGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5t
dWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICgh
c3JjUGl4ZWxBcnJheSkKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAg
IGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50U2l6ZSBw
YWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKICAgICBwYWludFNpemUuc2Nh
bGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhID0gewotICAgICAgICAqc3JjUGl4ZWxBcnJheSwKLSAgICAgICAgZHN0UGl4ZWxBcnJheSwK
KyAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwKICAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQo
KSwKICAgICAgICAgbV9iaWFzICogMjU1LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
OTksMTYgKzk5LDE2IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YK
ICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAgICAg
QVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAgYXV0
byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1
bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAK
LSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEJE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVs
IHZhbHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBs
aWVkIGNvbG9yIHZhbHVlcy4KICAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11
bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICAKQEAgLTEzNiwxOCArMTM2
LDE4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAgICAgICAg
aW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsKIAogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkc3RJ
bmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OworICAgICAgICAgICAgaW50IGRlc3RpbmF0
aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRp
c3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsg
c2NhbGVkT2Zmc2V0WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZHN0SW5kZXggKyBk
aXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBz
cmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJ
bWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2Nh
bGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+
KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRl
eCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwogCi0gICAgICAgICAg
ICB1bnNpZ25lZCogZHN0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0
UGl4ZWxBcnJheS5kYXRhKCkgKyBkc3RJbmRleCk7CisgICAgICAgICAgICB1bnNpZ25lZCogZGVz
dGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlv
blBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7CiAgICAgICAgICAgICBpZiAo
c3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZ
ID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkc3RQaXhlbFB0ciA9
IDA7CisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAwOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAqZHN0UGl4ZWxQ
dHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSArIGJ5
dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CisgICAgICAgICAgICAqZGVz
dGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJbWFn
ZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC05OSwxNiArOTksMTUgQEAgdm9pZCBG
RURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogCiAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKLSAgICAvLyBU
T0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlp
bmcgdGhlIEltYWdlRGF0YS4KICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVz
dWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1h
Z2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBz
aGFkb3dBcmVhKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0g
cmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIHNoYWRvd0FyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8mIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAg
ICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXkuZGF0YSgpLCBpbWFn
ZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOworICAgIGF1dG8m
IHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFk
b3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5z
aXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwogICAgIAotICAgIHJlc3Vs
dEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgKmltYWdlRGF0YSwgc2hhZG93QXJlYSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZlciwg
c2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3No
YWRvd0NvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VMRVJB
VEUpCkBAIC01MjMsMTYgKzUyMywxNiBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0g
ICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkg
PSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIHNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3
aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25Q
aXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAg
ICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0NSw3ICs1
NDUsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhCiAgICAgaWYg
KCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQXBwbHkoZHN0
UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXpl
LmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhl
bEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVp
Z2h0KCksIHBhaW50U2l6ZSk7CiB9CiAKIEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNl
dHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24u
aCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NzUsMjMgKzQ3NSwyMyBAQCB2b2lkIEZFTGlnaHRp
bmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8mIHJlc3VsdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAog
ICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KHJlc3VsdFBpeGVsQXJyYXks
IGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIEludFJlY3Qg
ZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChk
ZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRo
YW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCiAgICAgLy8gc3RhbmRhcmQg
aGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVm
b3gpIGhhcyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5n
dGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAvLyBBbnl3YXks
IGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgogCiAg
ICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIGRyYXdMaWdodGluZyhyZXN1bHRQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53
aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgZHJhd0xpZ2h0aW5nKGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQ
YWludFNpemUuaGVpZ2h0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yNDMsMjMgKzI0MywyMyBA
QCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiB7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQor
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5k
YXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXpl
KEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwogICAgIGlmIChwbGF0Zm9ybUFwcGx5
RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmls
dGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBp
bi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgYXV0byBzb3VyY2VQaXhlbEFy
cmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1
cm47CiAKICAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJS
ZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwpAQCAtMjcwLDcgKzI3MCw3IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOworICAgIHBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKICAgICBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdEYXRh
LndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1Jl
Y3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzk2LDE3ICszOTYsMTcgQEAgdm9pZCBGRVR1
cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbAogCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8mIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAog
ICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAg
cmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChyZXN1
bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBwaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7
ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBw
YXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwogICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIg
PSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7
CisgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFy
cmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRh
OwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAgICAg
ICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZv
aWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICB9CiAKICAgICAvLyBG
YWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBh
IG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZpbGxSZWdp
b24ocGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAg
IGZpbGxSZWdpb24oZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERh
dGEsIDAsIGhlaWdodCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNzcsNyArNzcsNyBAQCBGbG9h
dFBvaW50IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlCiAgICAgcmV0dXJuIGFic29sdXRl
UG9pbnQ7CiB9CiAKLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0CitJbnRSZWN0IEZpbHRl
ckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3Qm
IGVmZmVjdFJlY3QpIGNvbnN0CiB7CiAgICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRl
UGFpbnRSZWN0LmxvY2F0aW9uKCk7CiAgICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0Lmxv
Y2F0aW9uKCkpOwpAQCAtMjQ3LDggKzI0Nyw4IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZh
bGlkUHJlTXVsdGlwbGkKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiB7CiAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG51bGxwdHI7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxscHRy
OworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgRmlsdGVy
RWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQg
RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUKIAogSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkgPDwg
IiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VC
dWZmZXJSZXN1bHQgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmUKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBl
bHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC0yOTAsMTEgKzI5MCwxNCBAQCBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJl
Y3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhz
Y2FsZWRTaXplKSk7CiAgICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKChzY2FsZWRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBpZiAo
IWltYWdlRGF0YSkKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29y
ZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCppbWFn
ZURhdGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgYXV0
byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Y2hlY2tlZEFyZWEudW5zYWZlR2V0KCkpOworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwg
cmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQXJyYXk7CiB9CiAKIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0
IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFj
ZSkKQEAgLTMwMiwxMSArMzA1LDE0IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVy
RWZmZWN0OjoKICAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwogICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKICAgICBzY2Fs
ZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRh
ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNpemUu
YXJlYSgpICogNCkudW5zYWZlR2V0KCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8g
Y2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAg
IGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGNoZWNrZWRBcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpp
bWFnZURhdGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAg
Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwor
ICAgIHJldHVybiBwaXhlbEFycmF5OwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdl
Qnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdApAQCAtNDMzLDc4ICs0Mzks
ODAgQEAgc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjbwogI2VuZGlmCiB9
CiAKLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0YVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VEYXRh
JiBpbnB1dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQorT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYg
cGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQogewotICAg
IEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIGlucHV0RGF0YS5zaXplKCkpOwor
ICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBz
cGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCisK
KyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXpl
KCkpOwogICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXpl
KGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0
byBzdG9yZSBpbmNvbWluZyBJbWFnZURhdGEKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIg
dG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwogICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBidWZm
ZXItPnB1dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIGlucHV0RGF0YSwgZGVzdGluYXRpb25SZWN0
KTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBidWZmZXItPnB1dFBpeGVsQnVm
ZmVyKG91dHB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0
dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVm
ZmVyLCBkZXN0aW5hdGlvblJlY3QsIG91dHB1dEZvcm1hdCk7CiB9CiAKLVJlZlB0cjxJbWFnZURh
dGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIs
IGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
KQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVy
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFn
ZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0KQogewogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CiAgICAgLy8gQ3JlYXRlIGFuIElt
YWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8g
aGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KICAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUo
KSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKICAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gQ29sb3Igc3BhY2UgY29u
dmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1
ZmZlciB0byBhbm90aGVyCiAgICAgY29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5n
ZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVkQnVm
ZmVyLT5nZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHJlY3QpOwogfQogCiB2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCiB7CiAgICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJS
ZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRJbWFnZURh
dGEgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VC
dWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwg
b3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZEltYWdlRGF0YSkKKyAgICBhdXRvIGNv
bnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9y
U3BhY2UsICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZEltYWdl
RGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVz
KGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CiB9
CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlv
bihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVk
IGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
CiAgICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0g
ICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNwYWNl
KGNvbG9yU3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRl
ZEltYWdlRGF0YSkKKyAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVs
QnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyLCBvdXRwdXRGb3JtYXQp
OworICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBj
b3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRl
c3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVu
bXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkK
IHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIAotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIg
IiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7CiAKICAgICBpZiAo
IW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29u
dmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVy
UmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewogICAgICAgICAgICAgICAgIGNv
cHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUp
KTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
LSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0
ZShpbnB1dFNpemUpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZv
cm1hdDo6QkdSQTgsIGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY29weVVu
cHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24o
ZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKKyAgICBpZiAocmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAg
ICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3Rp
bmF0aW9uLCByZWN0KTsKQEAgLTUxNCwzMSArNTIyLDMxIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5UHJlbXVsdGlwbGllZFJlc3UKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi0gICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmls
dGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4g
RXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAg
IiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LmdldCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBWYWx1ZU9yTnVsbChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVy
TmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAg
ICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc0lt
YWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
CiAgICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHJlY3QpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsg
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAgICAgICAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBpbnB1dFNpemUpOwogICAgICAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0
U2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1h
Z2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
cmVjdCk7CisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihj
b2xvclNwYWNlKSkgeworICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CkBAIC01NTgsNzEgKzU2Niw3MyBAQCBJ
bWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1CiAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLUltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0
ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0Iiwg
ZmlsdGVyTmFtZSgpLCB0aGlzKTsKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFs
bG93ZWQuCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgQVNTRVJUKG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPT0gV1RGOjpudWxsb3B0KTsKKwogICAgIGlmIChtX2Fic29sdXRlUGFp
bnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VE
YXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQuZ2V0KCk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVy
Ojp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdS
QTgsIHJlc3VsdFNpemUpOworICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Owog
fQogCi1JbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVz
ICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7
CiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCgh
aGFzUmVzdWx0KCkpOworICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9PSBX
VEY6Om51bGxvcHQpOworCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0OwogCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1
bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
LSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3Vs
dFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTgsIHJlc3VsdFNpemUp
OworICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIH0KIAotYm9vbCBGaWx0
ZXJFZmZlY3Q6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBkc3RDb2xvclNwYWNlKQorYm9vbCBGaWx0ZXJFZmZlY3Q6
OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBv
ZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCiAgICAgLy8gV2Ugb25seSBuZWVkIGV4
dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4g
dGhlIGlucHV0CiAgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBw
aXhlbHMKLSAgICByZXR1cm4gZHN0Q29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0g
KmRzdENvbG9yU3BhY2U7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1
bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKICNlbHNlCiAgICAgLy8g
QWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNH
Ci0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOworICAgIFVOVVNFRF9QQVJBTShkZXN0
aW5hdGlvbkNvbG9yU3BhY2UpOwogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQogCi12b2lk
IEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCiB7
CiAjaWYgVVNFKENHKQogICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMg
aW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZHN0Q29sb3JTcGFjZSk7CisgICAgVU5VU0VE
X1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAjZWxzZQotICAgIGlmICghaGFzUmVzdWx0
KCkgfHwgZHN0Q29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpCisgICAgaWYgKCFoYXNS
ZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50
aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKICAgICAv
LyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGll
ZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtQ29sb3JTcGFjZSht
X3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9yU3BhY2UpOworICAgIGltYWdlQnVmZmVyUmVzdWx0
KCktPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1bHRDb2xvclNwYWNlLCBkZXN0aW5hdGlvbkNv
bG9yU3BhY2UpOwogCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZHN0Q29sb3JTcGFjZTsKKyAg
ICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7CiAKLSAgICBpZiAo
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7CisgICAgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IFdURjo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IFdURjo6bnVsbG9wdDsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWls
LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDggKzI3LDEwIEBACiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIklu
dFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00
MSw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZp
bHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOworY2xhc3Mg
UGl4ZWxCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0
ZXJFZmZlY3RWZWN0b3I7CiAKQEAgLTEwMCw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIAogICAgIC8vIFJlY3Vyc2VzIG9uIGlu
cHV0cy4KICAgICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
CkBAIC0xODUsOCArMTg4LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIEltYWdlRGF0YSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3Bl
cmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKICAgICAvLyBhbHBoYSBp
biBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgpAQCAtMjAy
LDE4ICsyMDUsMTggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VCdWZm
ZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgRGVzdGluYXRpb25Db2xvclNwYWNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5
Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIEltYWdl
RGF0YSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29u
c3QgSW50UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVy
c2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwg
SW1hZ2VEYXRhJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgUmVmUHRyPEltYWdlRGF0
YT4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwg
SW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Cisg
ICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsK
KyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0
JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgCiAKICAgICBGaWx0ZXImIG1fZmlsdGVy
OwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogCiAj
aW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgogCiAjaWYg
VVNFKEFWRk9VTkRBVElPTikKQEAgLTIwOSwxMCArMjA5LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGUKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChnZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1
dG8gaW1hZ2VEYXRhID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKLSAgICBpZiAoIWltYWdlRGF0
YSkKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKKyAgICBp
ZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRUb0NhbnZhcyhjb250
ZXh0QXR0cmlidXRlcygpLCBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXIu
YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFz
KGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXIu
YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlcikKQEAgLTIyMSw0MCArMjIxLDQwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG8KICAgICAgICAgcmV0dXJuOwogICAgIGlmIChnZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1
dG8gaW1hZ2VEYXRhID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7Ci0gICAgaWYgKCFpbWFnZURh
dGEpCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAg
IGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBwYWludFRvQ2FudmFzKGNv
bnRleHRBdHRyaWJ1dGVzKCksIGltYWdlRGF0YS5yZWxlYXNlTm9uTnVsbCgpLCBpbWFnZUJ1ZmZl
ci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOworICAgIHBhaW50VG9DYW52
YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZl
ci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOwogfQogCi1SZWZQdHI8SW1h
Z2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKIHsKICAgICAvLyBSZWFkaW5n
IHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGlj
aCBpcyBsb3NzeS4KICAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxw
aGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCk7CiB9CiAKLVJl
ZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0c0ZvclBhaW50aW5nKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpCiB7CiAgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCku
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKIH0KIAotUmVmUHRy
PEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0
c0ZvclBhaW50aW5nKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcoKQogewogICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgcmV0dXJuIHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwogfQogCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgcmV0dXJuIHJl
YWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDggKzg3LDggQEAgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOwogI2VuZGlmCiBjbGFzcyBI
b3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBN
ZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVmZmVyOwogI2lmIFVTRShURVhUVVJFX01BUFBFUikK
IGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKICNlbmRpZgpAQCAtNDYzLDEx
ICs0NjMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbigpOwogCiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciYpIGZpbmFsOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKCkgZmluYWw7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKICAgICB2b2lkIHBhaW50Q29t
cG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOwogCi0gICAgUmVmUHRy
PEltYWdlRGF0YT4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwotICAgIFJlZlB0
cjxJbWFnZURhdGE+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CisgICAgT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKKyAg
ICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmco
KTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlUZXh0dXJlRnJvbU1lZGlhKE1l
ZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7CkBA
IC01MjYsNyArNTI2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9ybWF0
QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51
bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSk7CiAjZW5kaWYgLy8gIVVTRShBTkdMRSkKIAotICAg
IHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzJiwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhp
Y3NDb250ZXh0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRTaXplJiBjYW52
YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NP
QSkKQEAgLTU1Myw5ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hlY2tHUFVTdGF0dXMo
KTsKIAogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CisgICAgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBy
ZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CiAKICAgICBib29sIHJlc2hhcGVGQk9zKGNvbnN0
IEludFNpemUmKTsKICAgICB2b2lkIHByZXBhcmVUZXh0dXJlSW1wbCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNp
ZiBFTkFCTEUoV0VCR0wpICYmIFVTRShPUEVOR0wpCiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0xP
cGVuR0wuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9y
YXJ5T3BlbkdMU2V0dGluZy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3Ry
aW5nPgpAQCAtNjEsMTIgKzYxLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotCi1SZWZQ
dHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50
UmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFp
bWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIg
PSBQaXhlbEJ1ZmZlcjo6Y3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxG
b3JtYXQ6OlJHQkE4LCBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgR0xpbnQgcGFj
a0FsaWdubWVudCA9IDQ7CiAgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxz
ZTsKQEAgLTc2LDEyICs3NSwxMiBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQog
Ci0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEt
PmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5k
YXRhKCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIHBpeGVsQnVmZmVyLT5zaXplKCkud2lk
dGgoKSwgcGl4ZWxCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogCiAgICAgaWYgKG11c3RSZXN0b3Jl
UGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5U
LCBwYWNrQWxpZ25tZW50KTsKIAotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIHBp
eGVsQnVmZmVyOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0
dHJpYnV0ZXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b21tb24uY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAKICNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKICNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCiAjaW5jbHVkZSAiV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJF
eHByZXNzaW9uLmg+CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cHJlcGFyZVRleAogICAgIDo6Z2xGbHVzaCgpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQorT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCiB7CiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIGlmIChjb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTAgQEAKICNpZiBFTkFCTEUoV0VCR0wpICYmIFVT
RShPUEVOR0xfRVMpCiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgotI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgogCiAjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgogCkBAIC00Niw3ICs0Niw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWwKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAKLQogICAgIGF1dG8gYXR0cmlidXRlcyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xG
bHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLApAQCAtNjUsMTEg
KzY0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWwKICAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4
ZWxzRm9yUGFpbnRSZXN1bHRzKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCiB7Ci0gICAgYXV0byBpbWFn
ZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsK
LSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBw
aXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKICAgICBib29sIG11c3RSZXN0b3JlUGFja0Fs
aWdubWVudCA9IGZhbHNlOwpAQCAtNzksMTIgKzc4LDEyIEBAIFJlZlB0cjxJbWFnZURhdGE+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0g
dHJ1ZTsKICAgICB9CiAKLSAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFnZURhdGEtPndpZHRo
KCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdl
RGF0YS0+ZGF0YSgpLmRhdGEoKSk7CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgcGl4ZWxCdWZm
ZXItPnNpemUoKS53aWR0aCgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLmhlaWdodCgpLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7CiAKICAgICBp
ZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xf
UEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwogCi0gICAgcmV0dXJuIGltYWdlRGF0YTsK
KyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBAQAogI2luY2x1ZGUgIkNPTVB0ci5oIgog
I2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0
MkQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgogI2luY2x1ZGUgPGQyZDFfMS5o
PgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTMxMiwxNiArMzEyLDE2IEBAIFZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2UKICAgICByZXR1cm4geyB9OwogfQogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBj
b25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpn
ZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QsIG51bGxwdHIpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVm
ZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7CiB9CiAKLXZvaWQgSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXIm
IHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZv
cm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51bGxwdHIp
OworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBp
eGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51bGxwdHIpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDggKzUzLDggQEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlk
ZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBw
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1h
Z2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBp
eGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJv
dGVjdGVkOgogICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NG
aWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXIuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDcgKzQyNyw3IEBAIEludFJlY3QgQ1NT
RmlsdGVyOjpvdXRwdXRSZWN0KCkgY29uc3QKICAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZl
Y3RzLmxhc3QoKS5nZXQoKTsKICAgICAKICAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8
fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0g
ICAgICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEo
SW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOworICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5y
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9u
IH0pOwogICAgIAogICAgIHJldHVybiB7IH07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1
LDggQEAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNs
dWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgogI2luY2x1ZGUg
IlJlY3RhbmdsZVNoYXBlLmgiCkBAIC0xOTcsMTQgKzE5NywxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8
U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAgaWYgKGltYWdlKQogICAgICAgICBncmFwaGlj
c0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Qu
c2l6ZSgpKSk7CiAKLSAgICBhdXRvIGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCks
IGltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGltYWdlQnVmZmVy
LT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSB9KTsKICAgICAKLSAgICAvLyBXZSBjb3Vs
ZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBpbWFnZURhdGEgY291bGQgYmUgbnVsbHB0ci4gQSBjYXNl
IHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgaW1hZ2VEYXRhOjpjcmVhdGUKLSAgICAv
LyBjYW4gcmV0dXJuIGEgbnVsbHB0ciBiZWNhdXNlIGRhdGEgc2l6ZSBoYXMgb3ZlcmZsb3dlZC4g
UmVmZXIgcmRhcjovL3Byb2JsZW0vNjE3OTM4ODQKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAv
LyBXZSBjb3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBQaXhlbEJ1ZmZlciBjb3VsZCBiZSBudWxs
b3B0LiBBIGNhc2Ugd2hlcmUgSW1hZ2VSZWN0LnNpemUoKSBpcyBodWdlLCBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlCisgICAgLy8gY2FuIHJldHVybiBhIG51bGxvcHQgYmVjYXVzZSBkYXRhIHNpemUg
aGFzIG92ZXJmbG93ZWQuIFJlZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZVNoYXBlKCk7CiAKLSAgICBhdXRvJiBw
aXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVs
QXJyYXkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVh
Y2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJl
c2hvbGQgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVz
aG9sZCwgMCwgMSkgKiAyNTUuMGYpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDIxLTA1LTA5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBV
c2UgUGl4ZWxCdWZmZXIgcmF0aGVyIHRoYW4gSW1hZ2VEYXRhIGluIHBsYXRmb3JtLyBjb2RlIHRv
IGZpeCBsYXllcmluZyB2aW9sYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTU4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgdGhlIERPTSBsYXllciBvYmplY3Qg
V2ViQ29yZTo6SW1hZ2VEYXRhIHdpdGggdGhlIG5ldyBwbGF0Zm9ybQorICAgICAgICBsYXllciBX
ZWJDb3JlOjpQaXhlbEJ1ZmZlciwgd2hpY2ggZml4ZXMgYSBsYXllcmluZyB2aW9sYXRpb24gV2Vi
Q29yZSBhbmQgYXZvaWRzCisgICAgICAgIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zIC8gcmVmZXJl
bmNlIGNvdW50aW5nLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZl
clRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRJbWFnZURhdGFUb0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmg6CisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rp
b25zR2VuZXJhdGVkLmg6CisgICAgICAgIChwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVm
ZmVyKToKKyAgICAgICAgKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVt
b3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldFBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRl
U2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0
ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6ZGVjb2RlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YUhlbHBlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1l
bW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1v
cnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpw
b3B1bGF0ZUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlz
dEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpD
R0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUv
Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZjxX
ZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+Ojpl
bmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJD
b3JlOjpJbWFnZURhdGE+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0
UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OnNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldElt
YWdlRGF0YVRvQ29tcGxldGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2Ev
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6CisKIDIwMjEtMDUtMDkgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSVBDIHRlc3RpbmcgQVBJ
IHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIHNlbmQgYW5kIHJlY2VpdmUgc2hhcmVkIG1lbW9y
eQpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTYgKzE5OCwxNiBAQCB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpub3RpZnlNYXJrCiB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwotICAg
IHBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRSZW5kZXJpbmdSZXN1
bHRzRm9yUGFpbnRpbmcoKSwgaW1hZ2VCdWZmZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICBwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRSZW5k
ZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKSwgaW1hZ2VCdWZmZXIsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUJ1ZmZlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Ci0gICAgcGFpbnRJ
bWFnZURhdGFUb0ltYWdlQnVmZmVyKG1fY29udGV4dC0+cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9y
UGFpbnRpbmcoKSwgaW1hZ2VCdWZmZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRDb21wb3NpdGVk
UmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKLXZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50SW1hZ2VEYXRh
VG9JbWFnZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHRhcmdldCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIoT3B0aW9uYWw8V2ViQ29yZTo6UGl4
ZWxCdWZmZXI+JiYgcGl4ZWxCdWZmZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgIC8vIEZJWE1F
OiBXZSBkbyBub3QgaGF2ZSBmdW5jdGlvbmluZyByZWFkL3dyaXRlIGZlbmNlcyBpbiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLiBUaHVzIHRoaXMgaXMgc3luY2hyb25vdXMsCkBAIC0yMTksOCArMjE5
LDggQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRJbWFnZQogICAgICAgICBp
ZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVuZGVyaW5nQmFja2VuZC0+cmVtb3RlUmVzb3VyY2VD
YWNoZSgpLmNhY2hlZEltYWdlQnVmZmVyKHRhcmdldCkpIHsKICAgICAgICAgICAgIC8vIEhlcmUg
d2UgZG8gbm90IHRyeSB0byBwbGF5IGJhY2sgcGVuZGluZyBjb21tYW5kcyBmb3IgaW1hZ2VCdWZm
ZXIuIEN1cnJlbnRseSB0aGlzIGNhbGwgaXMgb25seSBtYWRlIGZvciBlbXB0eQogICAgICAgICAg
ICAgLy8gaW1hZ2UgYnVmZmVycyBhbmQgdGhlcmUncyBubyBnb29kIHdheSB0byBhZGQgZGlzcGxh
eSBsaXN0cy4KLSAgICAgICAgICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMsIGlt
YWdlRGF0YS5yZWxlYXNlTm9uTnVsbCgpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1h
Z2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgICAgICAgICBpZiAocGl4ZWxCdWZmZXIpCisgICAg
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29udGV4
dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRT
aXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuY2xlYXJSZWN0KHsgSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkgfSk7CiAgICAgICAgICAgICAvLyBVbmZvcnR1bmF0
ZWx5ICJmbHVzaCIgaW1wbGVtZW50YXRpb24gaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBvdmVy
bG9hZHMgb3JkZXJpbmcgYW5kIGVmZmVjdHMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUdyYXBoaWNzQ29udGV4dEdMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBA
QCBwcm90ZWN0ZWQ6CiAKICNpbmNsdWRlICJSZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9u
c0dlbmVyYXRlZC5oIiAvLyBOT0xJTlQKIAotICAgIHZvaWQgcGFpbnRJbWFnZURhdGFUb0ltYWdl
QnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVm
ZmVyPiYmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKICAgICBSZWZQdHI8SVBDOjpTdHJlYW1T
ZXJ2ZXJDb25uZWN0aW9uPFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMPj4gbV9zdHJlYW1Db25uZWN0
aW9uOwpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgkocmV2
aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyAr
Mjg0LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wgTm90UgogICAgIHZv
aWQgTXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTxpbnQzMl90PiBmaXJzdHMsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4g
Y291bnRzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGluc3RhbmNlQ291bnRzLCBpbnQz
Ml90IGRyYXdjb3VudCkKICAgICB2b2lkIE11bHRpRHJhd0VsZW1lbnRzQU5HTEUodWludDMyX3Qg
bW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBjb3VudHMsIHVpbnQzMl90IHR5cGUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gb2Zmc2V0cywgaW50MzJfdCBkcmF3Y291bnQp
CiAgICAgdm9pZCBNdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKHVpbnQzMl90IG1vZGUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gY291bnRzLCB1aW50MzJfdCB0eXBlLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IG9mZnNldHMsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50
MzJfdD4gaW5zdGFuY2VDb3VudHMsIGludDMyX3QgZHJhd2NvdW50KQotICAgIHZvaWQgUGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKSAtPiAoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4gcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCisgICAgdm9pZCBQYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb1BpeGVsQnVmZmVyKCkgLT4gKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiByZXR1
cm5WYWx1ZSkgU3luY2hyb25vdXMKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0
ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaAkocmV2aXNpb24gMjc3MjU1
KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNzksMTEgKzEz
NzksMTEgQEAKICAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAg
ICAgbV9jb250ZXh0LT5tdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUsIG1ha2VH
Q0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xzaXplaSo+KGNvdW50cy5kYXRhKCkp
LCBjb3VudHMuc2l6ZSgpKSwgdHlwZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgR0NHTGludCo+KG9mZnNldHMuZGF0YSgpKSwgb2Zmc2V0cy5zaXplKCkpLCBtYWtlR0NHTFNw
YW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihpbnN0YW5jZUNvdW50cy5kYXRh
KCkpLCBpbnN0YW5jZUNvdW50cy5zaXplKCkpLCBkcmF3Y291bnQpOwogICAgIH0KLSAgICB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCisgICAg
dm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gcmV0dXJuVmFs
dWUgPSB7IH07CisgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiByZXR1cm5W
YWx1ZSA9IHsgfTsKICAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKLSAg
ICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKCk7CisgICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUocmV0dXJuVmFsdWUpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcy
NTUpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBSZW1vdGVJbWFnZUJ1
ZmZlciA6IHB1YmxpYyBXZWJDb3JlCiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIg
PSBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAgICB1c2luZyBC
YXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJ
bWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOwotICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
OjpwdXRJbWFnZURhdGE7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnB1dFBp
eGVsQnVmZmVyOwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxG
b3JtYXQsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCkBAIC03NiwxNiArNzYsMTYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGFw
cGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChpdGVtLmlz
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCkpIHsKLSAgICAgICAgICAgIGF1
dG8mIGdldEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0
SW1hZ2VEYXRhPigpOwotICAgICAgICAgICAgYXV0byBpbWFnZURhdGEgPSBCYXNlQ29uY3JldGVJ
bWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGdldEltYWdlRGF0YUl0ZW0ub3V0cHV0Rm9ybWF0KCks
IGdldEltYWdlRGF0YUl0ZW0uc3JjUmVjdCgpKTsKLSAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5wb3B1bGF0ZUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeShpbWFnZURhdGEuZ2V0
KCkpOworICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxC
dWZmZXI+KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGdldFBpeGVsQnVmZmVySXRlbSA9IGl0ZW0u
Z2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKTsKKyAgICAgICAgICAg
IGF1dG8gcGl4ZWxCdWZmZXIgPSBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZm
ZXIoZ2V0UGl4ZWxCdWZmZXJJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRQaXhlbEJ1ZmZlckl0ZW0u
c3JjUmVjdCgpKTsKKyAgICAgICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5wb3B1bGF0
ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KFdURk1vdmUocGl4ZWxCdWZmZXIpKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGl0ZW0uaXM8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSkgewotICAgICAgICAgICAgYXV0byYg
cHV0SW1hZ2VEYXRhSXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFn
ZURhdGE+KCk7Ci0gICAgICAgICAgICBwdXRJbWFnZURhdGEocHV0SW1hZ2VEYXRhSXRlbS5pbnB1
dEZvcm1hdCgpLCBwdXRJbWFnZURhdGFJdGVtLmltYWdlRGF0YSgpLCBwdXRJbWFnZURhdGFJdGVt
LnNyY1JlY3QoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0UG9pbnQoKSwgcHV0SW1hZ2VEYXRhSXRl
bS5kZXN0Rm9ybWF0KCkpOworICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UHV0UGl4ZWxCdWZmZXI+KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHB1dFBpeGVsQnVmZmVy
SXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4oKTsK
KyAgICAgICAgICAgIHB1dFBpeGVsQnVmZmVyKHB1dFBpeGVsQnVmZmVySXRlbS5pbnB1dEZvcm1h
dCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0ucGl4ZWxCdWZmZXIoKSwgcHV0UGl4ZWxCdWZmZXJJdGVt
LnNyY1JlY3QoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLmRlc3RQb2ludCgpLCBwdXRQaXhlbEJ1ZmZl
ckl0ZW0uZGVzdEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDY1ICszMTUsNjUgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpzZXROZXh0SXRlbQogICAgIG1fcGVuZGluZ1dha2V1cEluZm8gPSB7e3sgaWRl
bnRpZmllciwgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmhlYWRlclNpemUoKSwgZGVzdGluYXRp
b25JZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uOjpVbnNwZWNpZmllZCB9LCBXVEY6
Om51bGxvcHQgfX07CiB9CiAKLU9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxw
ZXIoc2l6ZV90IGJ5dGVDb3VudCkKK09wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZl
ckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KQogewotICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRV
Uk5fVkFMVUUoIW1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IHx8IGJ5dGVDb3VudCA+IG1fZ2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCksIFdURjo6bnVsbG9wdCwgIlRoZSBleGlzdGlu
ZyBTaG1lbSBmb3IgZ2V0SW1hZ2VEYXRhKCkgaXMgYWxyZWFkeSBiaWcgZW5vdWdoIHRvIGhhbmRs
ZSB0aGUgcmVxdWVzdCIpOworICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoIW1f
Z2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfHwgYnl0ZUNvdW50ID4gbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeS0+c2l6ZSgpLCBXVEY6Om51bGxvcHQsICJUaGUgZXhpc3RpbmcgU2htZW0g
Zm9yIGdldFBpeGVsQnVmZmVyKCkgaXMgYWxyZWFkeSBiaWcgZW5vdWdoIHRvIGhhbmRsZSB0aGUg
cmVxdWVzdCIpOwogCiAgICAgaWYgKGJ5dGVDb3VudCA+IDY0ICogTUIpIHsKICAgICAgICAgLy8g
SnVzdCBhIHNhbml0eSBjaGVjay4gQSA0SyBpbWFnZSBpcyAzNk1CLgogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1v
cnkoKTsKLSAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxs
b2NhdGUoYnl0ZUNvdW50KTsKKyAgICBkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnko
KTsKKyAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxv
Y2F0ZShieXRlQ291bnQpOwogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICBp
ZiAobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpCi0gICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246
OlJlYWRPbmx5KTsKLSAgICByZXR1cm4gU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3Zl
KGhhbmRsZSksIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID8gbV9nZXRJbWFnZURhdGFTaGFy
ZWRNZW1vcnktPnNpemUoKSA6IDAgfTsKKyAgICBpZiAobV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeSkKKyAgICAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgcmV0dXJu
IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5ID8gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+c2l6ZSgpIDog
MCB9OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9y
eUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4
ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRh
dGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICBpZiAo
YXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcihi
eXRlQ291bnQpKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZS52YWx1
ZSgpKSk7CiAgICAgZWxzZQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogfQogCi12
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldFBpeGVs
QnVmZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7CisgICAgY29tcGxl
dGlvbkhhbmRsZXIobV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSk7CiB9CiAKLXZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1h
Z2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1l
bW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0
IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRN
ZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoYnl0ZUNvdW50KSkKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShoYW5kbGUudmFsdWUoKSksIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3Jl
KTsKKyAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1
ZmZlckhlbHBlcihieXRlQ291bnQpKQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KGhhbmRsZS52YWx1ZSgpKSwgbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSk7CiAgICAgZWxzZQot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0sIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9LCBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3Jl
KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5KCkKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5KCkKIHsKLSAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9y
eSA9IG51bGxwdHI7CisgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IG51bGxwdHI7
CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9wdWxhdGVHZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnkoV2ViQ29yZTo6SW1hZ2VEYXRhKiBpbWFnZURhdGEpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoT3B0aW9u
YWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgTUVTU0FHRV9D
SEVDSyhtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRJbWFnZURh
dGEgd2l0aG91dCBhIGJ1ZmZlciB0byB3cml0ZSBpbnRvIik7CisgICAgTUVTU0FHRV9DSEVDSyht
X2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LCAiV2UgY2FuJ3QgcnVuIGdldFBpeGVsQnVmZmVy
IHdpdGhvdXQgYSBidWZmZXIgdG8gd3JpdGUgaW50byIpOwogCi0gICAgaWYgKGltYWdlRGF0YSkg
ewotICAgICAgICBNRVNTQUdFX0NIRUNLKGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSA8
PSBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCAiU2htZW0gZm9yIHJldHVybiBv
ZiBnZXRJbWFnZURhdGEgaXMgdG9vIHNtYWxsIik7Ci0gICAgICAgIG1lbWNweShtX2dldEltYWdl
RGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIGltYWdl
RGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKHBpeGVsQnVmZmVyKSB7CisgICAg
ICAgIE1FU1NBR0VfQ0hFQ0socGl4ZWxCdWZmZXItPmRhdGEoKS5ieXRlTGVuZ3RoKCkgPD0gbV9n
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+c2l6ZSgpLCAiU2htZW0gZm9yIHJldHVybiBvZiBn
ZXRQaXhlbEJ1ZmZlciBpcyB0b28gc21hbGwiKTsKKyAgICAgICAgbWVtY3B5KG1fZ2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnktPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCksIHBp
eGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWVt
c2V0KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRhKCksIDAsIG1fZ2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5LT5zaXplKCkpOworICAgICAgICBtZW1zZXQobV9nZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LT5zaXpl
KCkpOwogCi0gICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgbV9nZXRQ
aXhlbEJ1ZmZlclNlbWFwaG9yZS5zaWduYWwoKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTUyMSw4ICs1MjEsOCBAQCBPcHRpb25hbDxEaXNw
bGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VCiAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVh
dGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihkYXRhLCBsZW5ndGgsIGhh
bmRsZUxvY2F0aW9uKTsKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OgogICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxs
Um91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwotICAgIGNhc2UgRGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIHJldHVybiBkZWNvZGVB
bmRDcmVhdGU8RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7CisgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVy
OgorICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1
ZmZlcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CiAgICAgY2FzZSBEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlOgpAQCAtNTgxLDcgKzU4
MSw3IEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1UKICAgICBjYXNl
IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
VHJhbnNsYXRlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6
IHsKKyAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6IHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5leHRJdGVtQnVmZmVy
VG9SZWFkKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uKTsKIAotICAgIHZvaWQg
cG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoV2ViQ29yZTo6SW1hZ2VEYXRhKik7Cisg
ICAgdm9pZCBwb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KE9wdGlvbmFsPFdlYkNv
cmU6OlBpeGVsQnVmZmVyPiYmKTsKIAogICAgIGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJl
c3N1cmUoKSBjb25zdDsKIApAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlcGxheVJlc3VsdCBzdWJtaXQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uKTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG5leHREZXN0aW5hdGlvbkltYWdlQnVm
ZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cyhXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW5pdGlh
bERlc3RpbmF0aW9uLCBzaXplX3QgaW5pdGlhbE9mZnNldCwgRGlzcGxheUxpc3RSZWFkZXJIYW5k
bGUmLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uKTsKIAotICAgIE9wdGlvbmFsPFNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlPiB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoc2l6
ZV90IGJ5dGVDb3VudCk7CisgICAgT3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IHVw
ZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVscGVyKHNpemVfdCBieXRlQ291bnQp
OwogICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCk7CiAKICAgICAvLyBJ
UEM6Ok1lc3NhZ2VTZW5kZXIuCkBAIC0xMjMsMTAgKzEyMywxMCBAQCBwcml2YXRlOgogICAgIC8v
IE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Us
IFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChjb25zdCBHUFVQcm9jZXNz
V2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwotICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5Rm9y
R2V0SW1hZ2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKLSAgICB2b2lkIHNlbWFwaG9yZUZv
ckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3Jl
Jik+JiYpOwotICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1h
Z2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwotICAg
IHZvaWQgZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpOworICAgIHZvaWQgdXBkYXRl
U2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOworICAg
IHZvaWQgc2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFu
ZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6
U2VtYXBob3JlJik+JiYpOworICAgIHZvaWQgZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5KCk7CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVy
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRCR1JBRGF0YUZvckltYWdlQnVmZmVy
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwpAQCAtMTYxLDggKzE2MSw4IEBAIHByaXZhdGU6
CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIs
IFJlZlB0cjxEaXNwbGF5TGlzdFJlYWRlckhhbmRsZT4+IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5k
bGVzOwogICAgIE9wdGlvbmFsPFBlbmRpbmdXYWtldXBJbmZvcm1hdGlvbj4gbV9wZW5kaW5nV2Fr
ZXVwSW5mbzsKICAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3Jl
OwotICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOwotICAgIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OworICAgIElQQzo6U2Vt
YXBob3JlIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmU7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeTsKICAgICBTY29wZWRSZW5kZXJpbmdSZXNv
dXJjZXNSZXF1ZXN0IG1fcmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEwIEBACiBtZXNzYWdl
cyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVs
Rm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQogICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0IFdl
YktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAgIFVw
ZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQpIC0+IChX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKLSAgICBT
ZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBT
eW5jaHJvbm91cwotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdl
RGF0YSh1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cwotICAgIERl
c3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKQorICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZv
ckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cworICAgIFNlbWFwaG9yZUZvckdldFBp
eGVsQnVmZmVyKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKKyAg
ICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJf
dCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwg
SVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cworICAgIERlc3Ryb3lHZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmlu
ZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0
cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0
cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJl
dmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMTQsNzcgKzMxMTQsNiBAQCBPcHRpb25hbDxX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246Ok1lCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KLXZvaWQgQXJndW1lbnRD
b2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPiYgaW1hZ2VEYXRhKQotewotICAgIGVuY29kZXIg
PDwgaW1hZ2VEYXRhLT5zaXplKCk7Ci0KLSAgICBhdXRvJiByYXdEYXRhID0gaW1hZ2VEYXRhLT5k
YXRhKCk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmF3RGF0YS5ieXRl
TGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJhd0RhdGEuZGF0
YSgpLCByYXdEYXRhLmJ5dGVMZW5ndGgoKSwgMSk7Ci19Ci0KLXRlbXBsYXRlCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2Rl
ciYsIGNvbnN0IFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci10ZW1wbGF0ZQotdm9pZCBBcmd1
bWVudENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rp
b25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIGNvbnN0IFJlZjxXZWJDb3JlOjpJ
bWFnZURhdGE+Jik7Ci0KLU9wdGlvbmFsPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+PiBBcmd1bWVu
dENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8SW50U2l6ZT4gaW1hZ2VEYXRhU2l6ZTsKLSAgICBkZWNvZGVyID4+
IGltYWdlRGF0YVNpemU7Ci0gICAgaWYgKCFpbWFnZURhdGFTaXplKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8dWludDY0X3Q+IGRhdGFMZW5ndGg7Ci0gICAg
ZGVjb2RlciA+PiBkYXRhTGVuZ3RoOwotICAgIGlmICghZGF0YUxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8gcmF3RGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5
OjpjcmVhdGVVbmluaXRpYWxpemVkKCpkYXRhTGVuZ3RoKTsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRml4ZWRMZW5ndGhEYXRhKHJhd0RhdGEtPmRhdGEoKSwgcmF3RGF0YS0+bGVuZ3RoKCksIDEp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byBpbWFnZURhdGEgPSBJ
bWFnZURhdGE6OmNyZWF0ZSgqaW1hZ2VEYXRhU2l6ZSwgV1RGTW92ZShyYXdEYXRhKSk7Ci0gICAg
aWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4geyBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURh
dGE+JiBpbWFnZURhdGEpCi17Ci0gICAgaWYgKCFpbWFnZURhdGEpIHsKLSAgICAgICAgZW5jb2Rl
ciA8PCBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVuY29kZXIgPDwgdHJ1
ZTsKLSAgICBBcmd1bWVudENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlKGVu
Y29kZXIsIGltYWdlRGF0YS5jb3B5UmVmKCkucmVsZWFzZU5vbk51bGwoKSk7Ci19Ci0KLXRlbXBs
YXRlCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNv
ZGUoRW5jb2RlciYsIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci0KLXRlbXBs
YXRlCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNv
ZGUoU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VE
YXRhPiYpOwotCi1PcHRpb25hbDxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gQXJndW1lbnRD
b2RlcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIGJvb2wgaXNFbmdhZ2VkOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdh
Z2VkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlmICghaXNFbmdhZ2Vk
KQotICAgICAgICByZXR1cm4geyBudWxscHRyIH07Ci0KLSAgICBhdXRvIHJlc3VsdCA9IEFyZ3Vt
ZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHsg
V1RGTW92ZSgqcmVzdWx0KSB9OwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFC
TEUoV0VCR0wpCiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlRGF0YS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW5kZXhlZERCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnB1
dE1vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2VsZWN0aW9uT3B0aW9uLmg+CkBAIC04
MDQsMTggKzgwMyw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToK
IH07CiAjZW5kaWYKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VE
YXRhPiYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj4g
ZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVy
PgotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgUmVmPFdlYkNvcmU6Oklt
YWdlRGF0YT4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+
IGRlY29kZShEZWNvZGVyJik7Ci19OwotCiAjaWYgSEFWRShQQVNTS0lUX0lOU1RBTExNRU5UUykK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudEluc3RhbGxt
ZW50Q29uZmlndXJhdGlvbj4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29u
c3QgV2ViQ29yZTo6UGF5bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbiYpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxh
eWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKENHX0RJU1BMQVlfTElTVF9CQUNLRURfSU1BR0VfQlVGRkVSKQogCiAjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdl
RGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGl4ZWxCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJL
aXRBZGRpdGlvbnMvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQWRkaXRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTA1LDEzICsxMDUsMTMgQEAgVmVjdG9y
PHVpbnQ4X3Q+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcgogICAgIHJldHVybiB7IH07CiB9CiAK
LVJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFdl
YkNvcmU6OlBpeGVsQnVmZmVyPiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQ
aXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgQ0dEaXNwbGF5TGlzdElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tl
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUv
Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHB1YmxpYzoKICAg
ICAvLyBOT1RFOiBUaGVzZSBhbGwgQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAgICAgUmVmUHRyPFdl
YkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3Jl
Q29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpXZWJDb3JlOjpQaXhl
bEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNPcmlnaW5B
dFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGl4
ZWxCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMTYzLDE0ICsxNjMsMTQgQEAgVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnRvQkdSQURhdGEobV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEo
KSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0
Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KQogewotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwg
bV9iaXRtYXAtPmRhdGEoKSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZl
cihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1h
dCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCShyZXZpc2lv
biAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCAr
MzEsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaD4K
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IEltYWdlRGF0YTsKLX0KLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNoYXJlYWJsZUJp
dG1hcDsKQEAgLTYzLDggKzU5LDggQEAgcHVibGljOgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZT4gY29weUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFj
a2luZ1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBw
dXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwg
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAog
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCShyZXZpc2lvbiAy
NzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcg
QEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWludAogCiAgICAgLy8gRklY
TUU6IFdlIGNhbm5vdCBzeW5jaHJvbml6ZSBzbyB0aGF0IHdlIHdvdWxkIGtub3cgbm8gcGVuZGlu
ZyBvcGVyYXRpb25zIGFyZSB1c2luZyB0aGUgYGJ1ZmZlcmAuCiAKLSAgICAvLyBGSVhNRTogQ3Vy
cmVudGx5IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmdldEltYWdlRGF0YSBldCBhbCBkbyBub3Qg
d2FpdCBmb3IgdGhlIGZsdXNoZXMgb2YgdGhlIGltYWdlcworICAgIC8vIEZJWE1FOiBDdXJyZW50
bHkgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Z2V0UGl4ZWxCdWZmZXIgZXQgYWwgZG8gbm90IHdh
aXQgZm9yIHRoZSBmbHVzaGVzIG9mIHRoZSBpbWFnZXMKICAgICAvLyBpbnNpZGUgdGhlIGRpc3Bs
YXkgbGlzdHMuIFJhdGhlciwgaXQgYXNzdW1lcyB0aGF0IHByb2Nlc3NpbmcgaXRzIHNlcXVlbmNl
IChlLmcuIHRoZSBkaXNwbGF5IGxpc3QpIHdpbGwgZXF1YWwgdG8gcmVhZCBmbHVzaCBiZWluZwog
ICAgIC8vIGZ1bGZpbGxlZC4gRm9yIGJlbG93LCB3ZSBjYW5ub3QgY3JlYXRlIGEgbmV3IGZsdXNo
IGlkIHNpbmNlIHdlIGdvIHRocm91Z2ggZGlmZmVyZW50IHNlcXVlbmNlIChSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTCBzZXF1ZW5jZSkKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgcHVibGljOgogICAgIHZvaWQgbXVsdGlEcmF3QXJyYXlz
SW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gZmly
c3RzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NHTHNpemVpIGRyYXdjb3VudCkgZmluYWw7CiAgICAg
dm9pZCBtdWx0aURyYXdFbGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0
IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50
PiBvZmZzZXRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBmaW5hbDsKICAgICB2b2lkIG11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NH
THNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9m
ZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXpl
aSBkcmF3Y291bnQpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgZmluYWw7CisgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5h
bDsKICAgICAvLyBFbmQgb2YgbGlzdCB1c2VkIGJ5IGdlbmVyYXRlLWdwdXAtd2ViZ2wgc2NyaXB0
LgogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAJKHJldmlzaW9uIDI3
NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzNjYsMTEgKzIzNjYsMTEgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjptdWx0aQogICAgIH0KIH0KIAotUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQor
T3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJv
eHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKQogewotICAgIFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZURhdGE+IHJldHVyblZhbHVlID0geyB9OworICAgIE9wdGlvbmFsPFdlYkNv
cmU6OlBpeGVsQnVmZmVyPiByZXR1cm5WYWx1ZSA9IHsgfTsKICAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSkgewotICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCks
IE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGE6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXI6OlJlcGx5KHJldHVyblZh
bHVlKSk7CiAgICAgICAgIGlmICghc2VuZFJlc3VsdCkKICAgICAgICAgICAgIG1hcmtDb250ZXh0
TG9zdCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCShyZXZpc2lv
biAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDM4ICsxOTQsMzggQEAg
cHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0K
IAotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1
ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IFdlYkNvcmU6OkltYWdlRGF0
YTo6Y3JlYXRlKHNyY1JlY3Quc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gaW1hZ2VE
YXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOworICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gV2Vi
Q29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Is
IFBpeGVsRm9ybWF0OjpSR0JBOCwgc3JjUmVjdC5zaXplKCkpOworICAgICAgICBpZiAoIXBpeGVs
QnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgc2l6ZV90
IGRhdGFTaXplID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5ieXRlTGVuZ3RoKCk7CiAKICAgICAgICAg
SVBDOjpUaW1lb3V0IHRpbWVvdXQgPSA1X3M7Ci0gICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVk
TWVtb3J5ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNoYXJlZE1lbW9yeUZvckdl
dEltYWdlRGF0YShkYXRhU2l6ZSwgdGltZW91dCk7CisgICAgICAgIFNoYXJlZE1lbW9yeSogc2hh
cmVkTWVtb3J5ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNoYXJlZE1lbW9yeUZv
ckdldFBpeGVsQnVmZmVyKGRhdGFTaXplLCB0aW1lb3V0KTsKICAgICAgICAgaWYgKCFzaGFyZWRN
ZW1vcnkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PFJl
bW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7Ci0gICAgICAgIG11dGFibGVUaGlzLm1fZHJh
d2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0
KTsKKyAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBp
eGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CiAgICAgICAgIG11dGFibGVUaGlzLmZs
dXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwogCi0gICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS0+d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUodGltZW91dCkpCi0g
ICAgICAgICAgICBtZW1jcHkoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBzaGFyZWRNZW1vcnkt
PmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHktPndhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUodGltZW91dCkpCisgICAgICAg
ICAgICBtZW1jcHkocGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCksIHNoYXJlZE1lbW9yeS0+ZGF0
YSgpLCBkYXRhU2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lbXNldChpbWFnZURh
dGEtPmRhdGEoKS5kYXRhKCksIDAsIGRhdGFTaXplKTsKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0
YTsKKyAgICAgICAgICAgIG1lbXNldChwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSwgMCwgZGF0
YVNpemUpOworICAgICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiAgICAgfQogCi0gICAgdm9pZCBw
dXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIG92ZXJyaWRlCisgICAgdm9pZCBwdXRQ
aXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0s
IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIG92ZXJyaWRlCiAgICAgewotICAg
ICAgICAvLyBUaGUgbWF0aCBpbnNpZGUgSW1hZ2VEYXRhOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVl
IHdpdGggdGhlIG1hdGggaW5zaWRlIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKCkg
YWJvdXQgaG93IG1fcmVzb2x1dGlvblNjYWxlIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIGluIHRo
ZSBJbWFnZUJ1ZmZlci4KLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHB1dEltYWdlRGF0YSgp
IGlzIG9ubHkgY2FsbGVkIHdoZW4gcmVzb2x1dGlvblNjYWxlKCkgPT0gMS4KKyAgICAgICAgLy8g
VGhlIG1hdGggaW5zaWRlIFBpeGVsQnVmZmVyOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGgg
dGhlIG1hdGggaW5zaWRlIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoKSBhYm91
dCBob3cgbV9yZXNvbHV0aW9uU2NhbGUgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgaW4gdGhlIElt
YWdlQnVmZmVyLgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgcHV0UGl4ZWxCdWZmZXIoKSBp
cyBvbmx5IGNhbGxlZCB3aGVuIHJlc29sdXRpb25TY2FsZSgpID09IDEuCiAgICAgICAgIEFTU0VS
VChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxKTsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNv
cmRlcigpLnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCku
cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIGRlc3RGb3JtYXQpOwogICAgIH0KIAogICAgIGJvb2wgcHJlZmVyc1ByZXBhcmF0aW9uRm9y
RGlzcGxheSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDUwICsxNTAsNTAgQEAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1TaGFy
ZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0
SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0IHRpbWVvdXQpCitTaGFyZWRN
ZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4
ZWxCdWZmZXIoc2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQgdGltZW91dCkKIHsKICAgICBz
ZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIGJvb2wgbmVlZHNTaGFy
ZWRNZW1vcnkgPSAhbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeUxlbmd0aDsKLSAgICBib29sIG5lZWRzU2VtYXBob3JlID0g
IW1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOworICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkgPSAh
bV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSB8fCBkYXRhU2l6ZSA+IG1fZ2V0UGl4ZWxCdWZm
ZXJTaGFyZWRNZW1vcnlMZW5ndGg7CisgICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dldFBp
eGVsQnVmZmVyU2VtYXBob3JlOwogCiAgICAgaWYgKG5lZWRzU2hhcmVkTWVtb3J5KQotICAgICAg
ICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IG51bGxwdHI7CisgICAgICAgIG1fZ2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxscHRyOwogCiAgICAgU2hhcmVkTWVtb3J5OjpJUENI
YW5kbGUgaGFuZGxlOwogICAgIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZTsKIAogICAgIGlmIChu
ZWVkc1NoYXJlZE1lbW9yeSAmJiBuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFw
aG9yZUZvckdldEltYWdlRGF0YShkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJl
cGx5KGhhbmRsZSwgc2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGlt
ZW91dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3Nh
Z2VzKTsKKyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXpl
KSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFu
ZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246
Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CiAgICAgZWxzZSBpZiAobmVlZHNT
aGFyZWRNZW1vcnkpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUpLCBNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1h
Z2VEYXRhOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1l
b3V0LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2Fn
ZXMpOworICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZm
ZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQs
IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7
CiAgICAgZWxzZSBpZiAobmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSwgTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldEltYWdlRGF0YTo6
UmVwbHkoc2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7
CisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1h
cGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KHNlbWFwaG9yZSksIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQpOwogCiAgICAgaWYgKCFoYW5kbGUuaGFuZGxl
LmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gU2hhcmVk
TWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFk
T25seSk7Ci0gICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5TGVuZ3RoID0gaGFuZGxl
LmRhdGFTaXplOworICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gU2hhcmVk
TWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFk
T25seSk7CisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlMZW5ndGggPSBoYW5k
bGUuZGF0YVNpemU7CiAgICAgfQogICAgIGlmIChuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgbV9n
ZXRJbWFnZURhdGFTZW1hcGhvcmUgPSBXVEZNb3ZlKHNlbWFwaG9yZSk7CisgICAgICAgIG1fZ2V0
UGl4ZWxCdWZmZXJTZW1hcGhvcmUgPSBXVEZNb3ZlKHNlbWFwaG9yZSk7CiAKLSAgICBpZiAobV9k
ZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAg
bV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5VGltZXIuc3RvcCgpOwotICAgIG1fZGVz
dHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOworICAg
IGlmIChtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuc3RvcCgp
OworICAgIG1fZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuc3RhcnRPbmVT
aG90KDVfcyk7CiAKLSAgICByZXR1cm4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkuZ2V0KCk7
CisgICAgcmV0dXJuIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkuZ2V0KCk7CiB9CiAKLWJv
b2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21w
bGV0ZShJUEM6OlRpbWVvdXQgdGltZW91dCkKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Ojp3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCB0aW1lb3V0
KQogewotICAgIEFTU0VSVChtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7Ci0gICAgcmV0dXJuIG1f
Z2V0SW1hZ2VEYXRhU2VtYXBob3JlLT53YWl0Rm9yKHRpbWVvdXQpOworICAgIEFTU0VSVChtX2dl
dFBpeGVsQnVmZmVyU2VtYXBob3JlKTsKKyAgICByZXR1cm4gbV9nZXRQaXhlbEJ1ZmZlclNlbWFw
aG9yZS0+d2FpdEZvcih0aW1lb3V0KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKQordm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7
Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBudWxscHRyOwotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRN
ZW1vcnkoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpE
aXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIG1fZ2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxscHRyOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpLCBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVz
c2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9CiAKIFN0cmluZyBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24sIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgY2xhc3MgRGlzcGxheUxpc3Q7CiBjbGFzcyBJdGVtOwogfQogY2xhc3Mg
RmxvYXRTaXplOwotY2xhc3MgSW1hZ2VEYXRhOworY2xhc3MgUGl4ZWxCdWZmZXI7CiBlbnVtIGNs
YXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90OwogZW51bSBjbGFzcyBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgOiB1aW50OF90OwogZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9v
bDsKQEAgLTc4LDkgKzc4LDkgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHNlbmREZWZlcnJl
ZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogCi0gICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1v
cnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQpOwotICAgIGJv
b2wgd2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUoSVBDOjpUaW1lb3V0KTsKLSAgICB2b2lk
IGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsKKyAgICBTaGFyZWRNZW1vcnkqIHNo
YXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0
KTsKKyAgICBib29sIHdhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0
KTsKKyAgICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpOwogCiAgICAg
Ly8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKQEAgLTEzNiwxMCArMTM2LDEwIEBAIHByaXZh
dGU6CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBt
X2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcjsKICAgICBPcHRpb25hbDxH
UFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VB
cmd1bWVudHM7CiAgICAgdW5zaWduZWQgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2Vu
ZGluZ1dha2V1cCB7IDAgfTsKLSAgICBPcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4gbV9nZXRJbWFn
ZURhdGFTZW1hcGhvcmU7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnk7Ci0gICAgdWludDY0X3QgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlMZW5n
dGggeyAwIH07Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5VGltZXIgeyAqdGhpcywgJlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJv
eUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSB9OworICAgIE9wdGlvbmFsPElQQzo6U2VtYXBob3Jl
PiBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1f
Z2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7CisgICAgdWludDY0X3QgbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeUxlbmd0aCB7IDAgfTsKKyAgICBXZWJDb3JlOjpUaW1lciBtX2Rlc3Ryb3lH
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyIHsgKnRoaXMsICZSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSB9OwogICAgIFdl
YWtQdHI8R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMyArMTIwLDEzIEBAIFZlY3Rv
cjx1aW50OF90PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3UKICAgICByZXR1cm4geyB9OwogfQog
Ci1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JikgY29u
c3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6
OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKQor
dm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFBvaW50JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKIHsKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAy
NzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6
UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3Jp
Z2luQXRVcHBlckxlZnRDb3JuZXIgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBj
YW5NYXBCYWNraW5nU3RvcmUgPSBmYWxzZTsK
</data>
<flag name="commit-queue"
          id="448986"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428150</attachid>
            <date>2021-05-09 20:10:50 -0700</date>
            <delta_ts>2021-05-09 20:19:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225584-20210509201049.patch</filename>
            <type>text/plain</type>
            <size>226369</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBAQAorMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhl
ciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIHVzZSBvZiB0aGUgRE9NIGxheWVyICYgcmVmLWNvdW50ZWQgSW1hZ2VEYXRhIGNsYXNzIHdp
dGggdGhlIG5ldyAKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgUGl4ZWxCdWZmZXIgY2xhc3MsIHdo
aWNoIEltYWdlRGF0YSBub3cgdXNlcyBpbnRlcm5hbGx5LgorCisgICAgICAgIFNpbmNlIFBpeGVs
QnVmZmVyIGlzIG5vdC1yZWZlcmVuY2UgY291bnRlZCBvciBoZWFwLWFsbG9jYXRlZCBpbiBtb3N0
IGNhc2VzLAorICAgICAgICBtYW55IHVzZXMgb2YgUmVmUHRyPEltYWdlRGF0YT4gdG8gaW5kaWNh
dGUgYSBwb3RlbnRpYWxseSBudWxsIEltYWdlRGF0YSBoYXZlCisgICAgICAgIGJlZW4gcmVwbGFj
ZWQgd2l0aCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4uIEdlbmVyYWxseSwgdGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gdGhhdCB3YXMgb25s
eSBuZWVkZWQgZm9yIHRoZSBET00gb2JqZWN0LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdG8g
bWFueSBmdW5jdGlvbnMgd2l0aCBJbWFnZURhdGEgaW4gdGhlaXIgbmFtZSBub3cgaGF2ZQorICAg
ICAgICBQaXhlbEJ1ZmZlciBpbiB0aGVpciBuYW1lIGluc3RlYWQsIGUuZy4gSW1hZ2VCdWZmZXI6
OmdldEltYWdlRGF0YSBpcyBub3cKKyAgICAgICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
ICh0aG91Z2ggSSB0aGluayBjaGFuZ2luZyB0aGlzIGluIHRoZSBmdXR1cmUgdG8gCisgICAgICAg
IEltYWdlQnVmZmVyOjpjb3B5UGl4ZWxCdWZmZXIgaXMgYSBnb29kIGlkZWEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ltYWdl
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpwaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0UGl4ZWxCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQnVmZmVyU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBl
bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpk
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZl
Q29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNp
emVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdp
bmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpQdXRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQ
dXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6OkdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcjo6cGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YTo6R2V0SW1hZ2VEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE6Om91
dHB1dEZvcm1hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0SW1hZ2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmlucHV0Rm9ybWF0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE6OmRlc3RQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZXN0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
RGF0YVRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0
c0ZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgcHJvdGVjdGlvbiBv
ZiB0aGUgcGl4ZWwgYnVmZmVyIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSByZW1v
dmVkIGluIHIyNzcyMzcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3NiwxMyArMTA3NiwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSB9KTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgaWYg
KCFwaXhlbEJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFy
ZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHBpeGVsQnVmZmVyLT5kYXRh
KCkucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewog
ICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJy
b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTUwLDYgKzMxNTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICBJbnRTaXplIGltYWdlRGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKICAgICAgICAgaW1h
Z2VEYXRhU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBD
cmVhdGluZyB0aGlzIEltYWdlRGF0YSBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgc2tpcCBy
aWdodCB0byBjcmVhdGluZyBhIFBpeGVsQnVmZmVyIGRpcmVjdGx5LgogICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVNpemUsIGFycmF5LnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgZmFpbCgp
OwpAQCAtMzE2Miw3ICszMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6
ZXJvKCksIGxvZ2ljYWxTaXplIH0pOworICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZm
ZXIoKSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRv
IGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
YnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXph
dGlvblN0YXRlKSkpOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsNyArNzQzLDcgQEAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhU
TUxDYW52YXNFbAogI2lmIFVTRShDRykKICAgICAvLyBUcnkgdG8gZ2V0IEltYWdlRGF0YSBmaXJz
dCwgYXMgdGhhdCBtYXkgYXZvaWQgbG9zc3kgY29udmVyc2lvbnMuCiAgICAgaWYgKGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBVbmNhY2hlZFN0cmluZyB7
IGRhdGFVUkwoKmltYWdlRGF0YSwgZW5jb2RpbmdNSU1FVHlwZSwgcXVhbGl0eSkgfTsKKyAgICAg
ICAgcmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgZGF0YVVSTChpbWFnZURhdGEtPnBpeGVsQnVmZmVy
KCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpIH07CiAjZW5kaWYKIAogICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC03NzQsNyArNzc0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIFVTRShDRykKICAgICBpZiAoYXV0byBp
bWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYjsK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0gZGF0YSgqaW1hZ2VEYXRhLCBlbmNv
ZGluZ01JTUVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRh
ID0gZGF0YShpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxp
dHkpOwogICAgICAgICBpZiAoIWJsb2JEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJsb2Ig
PSBCbG9iOjpjcmVhdGUoJmRvY3VtZW50KCksIFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01J
TUVUeXBlKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgV1RG
TW92ZShibG9iKSk7CkBAIC04MTIsNyArODEyLDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldAogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2Nv
bnRleHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVy
biBJbWFnZURhdGE6OmNyZWF0ZShkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
bV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJp
dG1hcC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDYsMTAgKzgwNiw5IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyBJZiBubyBjcm9wcGluZywgcmVz
aXppbmcsIGZsaXBwaW5nLCBldGMuIGFyZSBuZWVkZWQsIHRoZW4gc2ltcGx5IHVzZSB0aGUKICAg
ICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBhbHBoYVByZW11
bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEo
b3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKLSAgICBpZiAoc291cmNlUmVjdGFuZ2xlLnJldHVy
blZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJuVmFs
dWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkKLSAgICAgICAgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUKLSAgICAgICAgJiYgb3B0aW9u
cy5pbWFnZU9yaWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5v
bmUpIHsKLSAgICAgICAgYml0bWFwRGF0YS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIGlmIChz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5sb2NhdGlvbigpLmlzWmVybygpICYmIHNvdXJj
ZVJlY3RhbmdsZS5yZXR1cm5WYWx1ZSgpLnNpemUoKSA9PSBpbWFnZURhdGEtPnNpemUoKSAmJiBz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZSAmJiBvcHRp
b25zLmltYWdlT3JpZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6
Tm9uZSkgeworICAgICAgICBiaXRtYXBEYXRhLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgc291
cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworICAgICAgICAKICAgICAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSkpOwogICAgICAgICAvLyBUaGUgcmVz
dWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRp
b24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgICAgICBwcm9taXNlLnJlc29sdmUoV1RG
TW92ZShpbWFnZUJpdG1hcCkpOwpAQCAtODIzLDcgKzgyMiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6
OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVm
ZmVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRydWUsIFdURk1vdmUocHJvbWlzZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHRlbXBCaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRSZWN0
KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgdGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhLT5waXhl
bEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGVtcEJpdG1hcERhdGEsIGRlc3RSZWN0LCBzb3VyY2VSZWN0
YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNp
emVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmll
bnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIxICs0MywxNiBAQCBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gSW1hZ2VECiAgICAgcmV0dXJuIGNoZWNrZWREYXRh
U2l6ZTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgaWYgKCFzdyB8fCAhc2gpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIEludFNpemUg
c2l6ZShzdywgc2gpOwotICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNp
emUpOwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoaXMg
c2l6ZSJfcyB9OwotICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOwotICAgIGlmICghYnl0ZUFy
cmF5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhICJyZWFsIiBv
dXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxsZWQgb24gaXQ/
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9mIG1lbW9yeSJf
cyB9OwotICAgIH0KLSAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoV1RGTW92ZShwaXhlbEJ1ZmZlcikpKTsKK30K
KworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKFdURk1vdmUoKnBpeGVs
QnVmZmVyKSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC04MCw2ICs3NSwyMyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZURhdGE6OmNyZWF0ZShjb25zCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdU
Rk1vdmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKK0V4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJ
bWFnZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCit7CisgICAgaWYgKCFz
dyB8fCAhc2gpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owor
ICAgIEludFNpemUgc2l6ZShzdywgc2gpOworICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6
OmRhdGFTaXplKHNpemUpOworICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVm
ZmVyIG9mIHRoaXMgc2l6ZSJfcyB9OworICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOworICAg
IGlmICghYnl0ZUFycmF5KSB7CisgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBi
ZSBhICJyZWFsIiBvdXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBj
YWxsZWQgb24gaXQ/CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0
IG9mIG1lbW9yeSJfcyB9OworICAgIH0KKyAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgp
IH0pKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25h
bDx1bnNpZ25lZD4gc2gpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5n
dGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZURhdGE+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWdu
ZWQgc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SW1hZ2VEYXRhPiBjcmVhdGUo
UGl4ZWxCdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQg
c2gpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gY3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFs
PHVuc2lnbmVkPiBzaCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCkBAIC01
Miw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CiAgICAgUGl4
ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsg
fQogCisgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbEJ1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlRGF0YShQaXhl
bEJ1ZmZlciYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDE0ICsyMTk5LDE0IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAot
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKLSAgICBpZiAoIWltYWdl
RGF0YSkgeworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBidWZmZXItPmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7Cisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8g
Z2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURh
dGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJl
dHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIHsgeyBJbWFnZURhdGE6OmNyZWF0ZShXVEZNb3Zl
KCpwaXhlbEJ1ZmZlcikpIH0gfTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBpbnQgZHgsIGludCBkeSkKQEAgLTIy
NDYsNyArMjI0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW0K
ICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBk
YXRhLmhlaWdodCgpIH0pOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAg
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVz
dE9mZnNldCB9KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzYsMTIgKzEy
MzYsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbgogICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKmJhc2UuYnVmZmVyKCkpOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoQ2xlYXJDYWxsZXJPdGhlcik7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4dHVyZUV4dGVuc2lvbkZs
YWdzKCkgY29uc3QKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgogICAgICAg
ICAgICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC0+ZXh0cmFjdFBpeGVsQnVmZmVyKHBpeGVscy0+cGl4ZWxCdWZmZXIoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBhZGp1c3RlZFNvdXJjZUltYWdl
UmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlbW92ZVNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChX
ZWJHTENvbnRleHRPYmplY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNl
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VC
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b25jcmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMCwyMCArMjMwLDIwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAg
ICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzY0LDEyICs3NjQsMTAgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRh
LCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGlu
dCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFn
ZURhdGEtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IHBpeGVsQnVmZmVyLnNpemUoKS53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBwaXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICB1bnNpZ25lZCBwYWNrZWRTaXplOwogICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCkBAIC03NzksNyArNzc3LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0
YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFn
ZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9O
b3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhwaXhlbEJ1
ZmZlci5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFP
cDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBF
eHRlbnNpb25zR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEFWRk9VTkRBVElPTikKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1Y7CkBAIC0xMjkyLDcg
KzEyOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSBidWZmZXIgYWJzdHJhY3Rpb25zIHRo
YXQgdGhlIGNhbGxlciBzaG91bGQgaG9sZCBzZXBhcmF0ZSB0bwogICAgIC8vIHRoZSBjb250ZXh0
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpID0gMDsK
IAogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgbGF5ZXIgc2hvdWxk
IGJlIG1hcmtlZCBjb21wb3NpdGVkIGJ5CkBAIC0xMzQzLDExICsxMzQzLDExIEBAIHB1YmxpYzoK
ICAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgogICAgIHN0
YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVp
IGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0
ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0
aGUgZ2l2ZW4gUGl4ZWxCdWZmZXIgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNr
aW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBl
LAogICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
cy4gUmV0dXJucyB0cnVlCiAgICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4
dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKICAgICAvLyBk
YXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
OCArMTI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MiwyMjcgKzYyLDIyNyBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
CiAgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwgc291
cmNlUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwot
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHNy
Y1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICB1aW50OF90IGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKICAgICAgICAg
aWYgKCFhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgdWludDhfdCByID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbE9mZnNldCArIDIpOwogCiAgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAotICAgIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2lu
dDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAog
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRh
KSBjb25zdAogewogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXplKCku
YXJlYSgpLnVuc2FmZUdldCgpKTsKLSAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbG9naWNh
bFNpemUoKS53aWR0aCgpICogNDsKLSAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdygpOworICAgIHNpemVfdCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUo
KS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc291cmNlQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOwogCi0gICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpOworICAgIHVpbnQ4X3QqIHNvdXJjZVJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKTsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxv
Z2ljYWxTaXplKCkpOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBwaXhlbEZvcm1hdCgpLCBzb3VyY2VCeXRlc1BlclJvdywgc291cmNlUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2ljYWxTaXpl
KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlQ
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCBj
b25zdCB1aW50OF90KiBzcmNQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVsRm9ybWF0LCB1aW50
OF90KiBkZXN0UGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90
KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAgaWYgKCFhbHBoYSkgewot
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7Cisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9
IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4ZWxGb3JtYXQgPT0g
ZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVs
KVswXTsKKyAgICBpZiAoc291cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhl
bClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlUGl4ZWwpWzBd
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgotICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOwotICAgIGRlc3RQ
aXhlbFsxXSA9IHNyY1BpeGVsWzFdOwotICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOwot
ICAgIGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0g
PSBzb3VyY2VQaXhlbFsyXTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gc291cmNlUGl4ZWxb
MV07CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IHNvdXJjZVBpeGVsWzBdOworICAgIGRlc3Rp
bmF0aW9uUGl4ZWxbM10gPSBzb3VyY2VQaXhlbFszXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNvdXJjZVBpeGVsRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1h
dCwgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCkKIHsKLSAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgdWludDhfdCBhbHBoYSA9IHNvdXJjZVBpeGVsWzNdOwogICAgIGlmICgh
YWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Ci0gICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKHNyY1BpeGVsRm9ybWF0LCBzcmNQaXhlbCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0
UGl4ZWwpOworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzb3VyY2VQ
aXhlbEZvcm1hdCwgc291cmNlUGl4ZWwsIGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0
aW9uUGl4ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyY1BpeGVsRm9y
bWF0ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICBpZiAoc291
cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkgeworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzJdID0gKHNvdXJjZVBpeGVsWzJdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxwaGE7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0g
ICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwotICAgIGRlc3RQ
aXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7
CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IChzb3VyY2VQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFs
cGhhOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMF0gKiAyNTUpIC8g
YWxwaGE7CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IGFscGhhOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChQaXhlbEZvcm1hdCBz
cmNQaXhlbEZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIFBpeGVsRm9ybWF0IGRlc3RQ
aXhlbEZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3Jt
YXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNQaXhlbFszXTsKKyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAg
ICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKLSAgICAgICAgY29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoc3JjUGl4ZWxGb3JtYXQsIHNyY1BpeGVsLCBkZXN0UGl4ZWxGb3Jt
YXQsIGRlc3RQaXhlbCk7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KHNvdXJjZVBpeGVsRm9ybWF0LCBzb3VyY2VQaXhlbCwgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwg
ZGVzdGluYXRpb25QaXhlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3Jj
UGl4ZWxGb3JtYXQgPT0gZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgIGlmIChzb3VyY2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0KSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSAoc291cmNlUGl4ZWxb
MF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAo
c291cmNlUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxbM10gPSBhbHBoYTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KLSAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291cmNlUGl4ZWxbMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IChzb3VyY2VQ
aXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0g
YWxwaGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQo
UGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVs
LCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsKQogewotICAgIGlmIChzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQpIHsK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgIGlmIChzb3Vy
Y2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVsRm9ybWF0KSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2VQaXhlbClbMF07CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAg
ZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Ci0gICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxb
MV07Ci0gICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07Ci0gICAgZGVzdFBpeGVsWzNdID0g
c3JjUGl4ZWxbM107CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOwor
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICBkZXN0aW5hdGlv
blBpeGVsWzJdID0gc291cmNlUGl4ZWxbMF07CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IHNv
dXJjZVBpeGVsWzNdOwogfQogCiB0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKFBpeGVsRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgUGl4ZWxGb3JtYXQsIHVpbnQ4X3QqKT4KIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAotICAgIFBpeGVsRm9ybWF0IHNy
Y1BpeGVsRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywK
LSAgICBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgUGl4ZWxGb3Jt
YXQgc291cmNlUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90
KiBzb3VyY2VSb3dzLAorICAgIFBpeGVsRm9ybWF0IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndp
ZHRoKCkgKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKLSAg
ICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY1BpeGVsRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdFBp
eGVsRm9ybWF0LCAmZGVzdFJvd3NbeF0pOwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBj
b3B5RnVuY3Rvcihzb3VyY2VQaXhlbEZvcm1hdCwgJnNvdXJjZVJvd3NbeF0sIGRlc3RpbmF0aW9u
UGl4ZWxGb3JtYXQsICZkZXN0aW5hdGlvblJvd3NbeF0pOworICAgICAgICBzb3VyY2VSb3dzICs9
IHNvdXJjZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0aW5hdGlvblJvd3MgKz0gZGVzdGluYXRp
b25CeXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc291cmNlUGl4
ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBzb3VyY2VSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25CeXRl
c1BlclJvdywgdWludDhfdCogZGVzdGluYXRpb25Sb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAogewogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldHRpbmcgb3IgcHV0
dGluZyBwaXhlbCBkYXRhIHdpdGggZGVlcCBjb2xvciBidWZmZXJzLgotICAgIEFTU0VSVChzcmNQ
aXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc3JjUGl4ZWxGb3JtYXQgPT0gUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBBU1NFUlQoZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpSR0JBOCB8fCBkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBBU1NFUlQoc291cmNlUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJj
ZVBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGRlc3RpbmF0aW9uUGl4ZWxG
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKLSAgICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0
ID09IGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZUFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3Ms
IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0
aW9uUm93cywgc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgICAgICBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc291
cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlv
blBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIHNp
emUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKGRlc3RpbmF0
aW9uQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZD4oc291cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93
LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVy
Um93LCBkZXN0aW5hdGlvblJvd3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQ
aXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
Pihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRlc3Rp
bmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgc2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0aW5hdGlvbkFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBk
YXRhKSBjb25zdAogewotICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOworICAgIGF1dG8gc291cmNlUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNvdXJjZVJlY3QpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBzb3VyY2VSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBp
bnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgp
LCBzb3VyY2VSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CiAKLSAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQotICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVk
LngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGlu
YXRpb25SZWN0LnNldFgoLXNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0
U2NhbGVkLnkoKSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgp
KTsKKyAgICBpZiAoc291cmNlUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2V0WSgtc291cmNlUmVjdFNjYWxlZC55KCkpOwogCi0gICAgaWYgKGRlc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKLSAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCku
emVyb0ZpbGwoKTsKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSkKKyAgICAgICAgcGl4ZWxCdWZmZXItPmRhdGEoKS56ZXJvRmlsbCgpOwog
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgdW5z
aWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VSZWN0U2NhbGVkLndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5k
YXRhKCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRl
c3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBi
eXRlc1BlclJvdygpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgc291cmNlUmVjdENsaXBwZWQueSgpICogc291cmNlQnl0ZXNQZXJS
b3cgKyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAot
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhl
bEZvcm1hdDo6UkdCQTgsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVs
Rm9ybWF0KCksIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5h
dGlvbkFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci0+Zm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQ
ZXJSb3csIGRlc3RpbmF0aW9uUm93cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiAKLSAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0LCB2b2lkKiBkYXRhKQordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlQWxwaGFGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uUG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRp
b25BbHBoYUZvcm1hdCwgdm9pZCogZGF0YSkKIHsKLSAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRT
Y2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGF1dG8gc291cmNl
UmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworICAgIGF1dG8g
ZGVzdGluYXRpb25Qb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RpbmF0aW9u
UG9pbnQpOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAg
SW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOwotICAgIGRlc3RSZWN0Lm1vdmVCeShk
ZXN0UG9pbnRTY2FsZWQpOworICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBwZWQgPSBpbnRlcnNl
Y3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkgfSwgc291cmNlUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBzb3VyY2VSZWN0Q2xpcHBl
ZDsKKyAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQpOwog
Ci0gICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKLSAgICAgICAgZGVzdFJlY3Quc2V0WChk
ZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2Fs
ZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFgoZGVzdGluYXRpb25SZWN0
LngoKSAtIHNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2NhbGVkLnko
KSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxl
ZC55KCkpOworICAgIGlmIChzb3VyY2VSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5zZXRZKGRlc3RpbmF0aW9uUmVjdC55KCkgLSBzb3VyY2VSZWN0U2NhbGVkLnko
KSk7CiAKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7Ci0gICAgc3JjUmVj
dENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRl
c1BlclJvdyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3Vy
Y2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50
OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RD
bGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICog
NDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCi0gICAgICAgIGRlc3RGb3JtYXQs
IHBpeGVsRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIHNvdXJjZUFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSwgc291
cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsCisgICAgICAgIGRlc3RpbmF0aW9uQWxwaGFGb3Jt
YXQsIHBpeGVsRm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OCArNDMsOCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRH
TDsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKIGNs
YXNzIE5hdGl2ZUltYWdlOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAKIGVudW0gQmFja2luZ1N0b3Jl
Q29weSB7CiAgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgpAQCAtMTA5LDggKzEwOSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE1NCw4ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRh
dGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOwogCiAgICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw1MyBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+IGNvbXB1dGVCdWZmZXJTaXplKFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZvcm1hdHMgYXJl
IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUX1VOVVNFRChmb3JtYXQsIGZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworCisgICAg
cmV0dXJuIHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIGJ5dGVzUGVyUGl4ZWw7Cit9CisK
K09wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdWludDY0X3QgcHJvcG9zZWRCdWZmZXJTaXplKQoreworICAgIEFT
U0VSVChmb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9PSBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghKGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9y
bWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBhdXRvIGNvbXB1dGVkQnVmZmVyU2l6ZSA9IGNvbXB1dGVCdWZmZXJTaXplKGZvcm1h
dCwgc2l6ZSk7CisgICAgaWYgKGNvbXB1dGVkQnVmZmVyU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoY29tcHV0ZWRCdWZmZXJTaXpl
LnVuc2FmZUdldCgpICE9IHByb3Bvc2VkQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisgICAgaWYgKCFwaXhlbEFy
cmF5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgY29sb3JT
cGFjZSwgZm9ybWF0LCBzaXplLCBwaXhlbEFycmF5LnJlbGVhc2VOb25OdWxsKCkgfSB9OworfQor
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIC8vIE5PVEU6IE9ubHkgOC1iaXQgZm9ybWF0cyBhcmUgY3VycmVudGx5
IHN1cHBvcnRlZC4KKyAgICBBU1NFUlQoZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCBm
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGNv
bXB1dGVCdWZmZXJTaXplKGZvcm1hdCwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUuaGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gcGl4ZWxB
cnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNp
emUudW5zYWZlR2V0KCkpOworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgcGl4
ZWxBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKK30KKwogUGl4ZWxCdWZmZXI6OlBpeGVsQnVm
ZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBmb3JtYXQs
IGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiYmIGRhdGEp
CiAgICAgOiBtX2NvbG9yU3BhY2UgeyBjb2xvclNwYWNlIH0KICAgICAsIG1fZm9ybWF0IHsgZm9y
bWF0IH0KQEAgLTQ2LDQgKzkwLDkgQEAgUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9u
ZSgpIGNvbgogICAgIHJldHVybiB7IG1fY29sb3JTcGFjZSwgbV9mb3JtYXQsIG1fc2l6ZSwgVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5sZW5ndGgoKSkg
fTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQoreworICAgIHJldHVybiB0cyA8PCAmcGl4ZWxCdWZmZXIu
ZGF0YSgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
aXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICsz
MCwyMCBAQAogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3Ry
ZWFtOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBpeGVsQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaXhlbEJ1ZmZlcik7CiBwdWJsaWM6CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiB0cnlDcmVhdGUoRGVzdGluYXRp
b25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gdHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIHVpbnQ2
NF90IHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisKICAgICBQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0LCBjb25zdCBJbnRTaXplJiwgUmVmPEpTQzo6VWludDhDbGFt
cGVkQXJyYXk+JiYpOwotICAgIH5QaXhlbEJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Q
aXhlbEJ1ZmZlcigpOwogCiAgICAgUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0
OwogICAgIFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0OwpA
QCAtNDgsNiArNTUsOSBAQCBwdWJsaWM6CiAKICAgICBQaXhlbEJ1ZmZlciBkZWVwQ2xvbmUoKSBj
b25zdDsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6CiAgICAgRGVzdGluYXRpb25D
b2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBQaXhlbEZvcm1hdCBtX2Zvcm1hdDsKQEAgLTU1
LDQgKzY1LDQ2IEBAIHByaXZhdGU6CiAgICAgUmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IG1f
ZGF0YTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBjb25zdCBQaXhlbEJ1ZmZlciYpOworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsKKyAgICBlbmNvZGVyIDw8IG1fZm9ybWF0
OworICAgIGVuY29kZXIgPDwgbV9zaXplOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG1fZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShmb3JtYXQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgSW50U2l6ZSBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICB1aW50NjRfdCBkYXRhQnl0ZUxlbmd0aDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gcmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0
ZUZvckRlY29kaW5nKGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgZGF0YUJ5dGVMZW5ndGgpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+ZGF0YSgpLCBy
ZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTkwNCwxMiArOTA0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cihJbWFnZUIKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2lu
dCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICgh
bGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXllckRh
dGEtPmRhdGEoKS5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQp
OwotICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOworICAgIGxheWVySW1hZ2UucHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5
ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hh
ZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0
ZVNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGlu
Zy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgpAQCAtNzcsMTEgKzc3LDExIEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBo
YUNoYW5uZWxGcm9tUGl4ZWxzKGkKIH0KICNlbmRpZgogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIFNjb3BlZFBpeGVsU3RvcmFnZU1vZGUgcGFj
a0FsaWdubWVudChHTF9QQUNLX0FMSUdOTUVOVCk7CiAgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0
KQogICAgICAgICBwYWNrQWxpZ25tZW50LnBpeGVsU3RvcmUoNCk7CkBAIC05MCwxNiArOTAsMTYg
QEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuRwogICAgIFNjb3BlZFBp
eGVsU3RvcmFnZU1vZGUgcGFja1NraXBQaXhlbHMoR0xfUEFDS19TS0lQX1BJWEVMUywgMCwgbV9p
c0ZvcldlYkdMMik7CiAgICAgU2NvcGVkQnVmZmVyQmluZGluZyBzY29wZWRQaXhlbFBhY2tCdWZm
ZXJSZXNldChHTF9QSVhFTF9QQUNLX0JVRkZFUiwgMCwgbV9pc0ZvcldlYkdMMik7CiAKLSAgICBn
bDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdl
RGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0
YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpKTsKKyAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgp
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7
CiAgICAgLy8gRklYTUU6IFJlbmRlcmluZyB0byBHTF9SR0IgdGV4dHVyZXMgd2l0aCBhIElPU3Vy
ZmFjZSBib3VuZCB0byB0aGUgdGV4dHVyZSBpbWFnZSBsZWF2ZXMKICAgICAvLyB0aGUgYWxwaGEg
aW4gdGhlIElPU3VyZmFjZSBpbiBpbmNvcnJlY3Qgc3RhdGUuIEFsc28gQU5HTEUgZ2w6OlJlYWRQ
aXhlbHMgd2lsbCBpbiBzb21lCiAgICAgLy8gY2FzZXMgZXhwb3NlIHRoZSBub24tMjU1IHZhbHVl
cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1ODA0
CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICghY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhl
bHMoaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRh
dGEoKS5kYXRhKCkpOworICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhwaXhlbEJ1
ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIHBpeGVs
QnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKICNlbmRpZgotICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXgKICNlbmRpZgogfQogCi1SZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQorT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCiB7CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgZmJvQmlu
ZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTyk7CiAgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRH
TENhaXJvLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJJbWFnZS5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2lu
Y2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTEwNiwxNSArMTA2
LDE1IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXgKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZh
cyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1
dGVzLCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJU
KCFpbWFnZURhdGEtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIu
c2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBDb252ZXJ0IFJHQkEgdG8gQkdSQS4gQkdSQSBpcyBDQUlST19G
T1JNQVRfQVJHQjMyIG9uIGxpdHRsZS1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4KLSAgICBzaXplX3Qg
dG90YWxCeXRlcyA9IGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKLSAgICB1aW50OF90
KiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCk7CisgICAgc2l6ZV90IHRvdGFsQnl0
ZXMgPSBwaXhlbEJ1ZmZlci5kYXRhKCkuYnl0ZUxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVs
cyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCiAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOwogCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFRvQ2FuCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOworICAgIGF1dG8gaW1hZ2VTaXplID0gcGl4ZWxCdWZmZXIu
c2l6ZSgpOwogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIGltYWdl
RGF0YS0+ZGF0YSgpLmRhdGEoKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VEYXRhLT53aWR0
aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPndpZHRoKCkgKiA0KSk7CisgICAg
ICAgIHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGltYWdlU2l6ZS53aWR0aCgpICogNCkp
OwogCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVN1
cmZhY2UpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogI2lmIFVTRShDQUlSTykKQEAgLTEy
MCwxNCArMTIwLDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUIK
ICAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1fc3VyZmFjZS5nZXQoKSkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVm
ZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3Jt
YXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IHNy
Y1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKICAgICBJbnRQb2lu
dCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4
IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJiwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xORU9OLmgiCkBAIC01MDYsOSArNTA2LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yOjpleAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFJlZjxJbWFnZURhdGE+JiYgaW1h
Z2VEYXRhLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBBU1NFUlQoIWltYWdlRGF0YS0+c2l6ZSgpLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBp
ZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBJbnB1dCBp
cyBHTF9SR0JBID09IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYSpMYXN0
LgpAQCAtNTIxLDEzICs1MjEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRUb0NhbgogICAgIGVsc2UKICAgICAgICAgYml0bWFwSW5mbyB8PSBrQ0dJbWFnZUFscGhhTGFz
dDsKIAotICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7Ci0gICAgaW50IHJv
d0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OwotICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJv
d0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwotICAgIHVpbnQ4X3QqIGltYWdlUGl4ZWxzID0g
aW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IG1ha2VSZWYo
cGl4ZWxCdWZmZXIuZGF0YSgpKTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLnNp
emUoKTsKKyAgICBhdXRvIHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAgIGF1
dG8gZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICB1aW50OF90
KiBpbWFnZVBpeGVscyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChpbWFnZVBpeGVscywgZGF0YVNpemUpOwotICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZpbWFnZURh
dGEubGVha1JlZigpLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBj
b25zdCB2b2lkKiwgc2l6ZV90KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VEYXRh
Kj4oY29udGV4dCktPmRlcmVmKCk7CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmcGl4ZWxBcnJheS5sZWFrUmVmKCksIGltYWdl
UGl4ZWxzLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3Qp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNDOjpVaW50OENsYW1wZWRBcnJheSo+KGNvbnRleHQp
LT5kZXJlZigpOwogICAgIH0pKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3Jl
YXRlKGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhl
aWdodCgpLCA4LCAzMiwgcm93Qnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8s
IGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0xODcsMTggKzE4NiwxOCBAQCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAg
ICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkK
KyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIXBp
eGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXV0byYg
cGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgICAgICBhdXRvIGRhdGFTaXplID0g
cGl4ZWxBcnJheS5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBpbWFnZURhdGEtPnNpemUoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5ID0gbWFrZVJl
ZihwaXhlbEJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJy
YXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBp
eGVsQnVmZmVyLT5zaXplKCk7CiAKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChwaXhlbEFycmF5LmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZl
cklzQmlnRW5vdWdoKHBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUpOwogCi0gICAgICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKGlt
YWdlRGF0YS5sZWFrUmVmKCksIHBpeGVsQXJyYXkuZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQq
IGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8SW1hZ2VEYXRhKj4oY29udGV4dCktPmRlcmVmKCk7CisgICAgICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhlbEFycmF5
LmxlYWtSZWYoKSwgcGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRl
eHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6
VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICAgICAgfSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTksMTQgKzE1OSwxNCBAQCBWZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlCiAgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
aW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CisgICAg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZm
ZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9kYXRhKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4
IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3Ju
ZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkg
KzI5LDkgQEAKICNpZiBIQVZFKElPU1VSRkFDRSkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC0xNjgsMTEgKzE2OCwxMSBAQCB2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6ZHJhd0NvCiAKIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAogewotICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1hZ2VEYXRhKSB7CisgICAg
aWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikgewogICAgICAgICAvLyBGb3Jj
ZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgogICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFp
bmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCiAgICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChG
bG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotICAgICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1h
Z2VEYXRhID0gZmFsc2U7CisgICAgICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZl
ciA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQpAQCAtMTgzLDE3
ICsxODMsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFjawogICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAg
SU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhl
bEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
OwogfQogCi12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1
cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOwotICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgPSB0cnVlOworICAgIEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IHRydWU7CiB9CiAKIElPU3VyZmFjZSogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzdXJmYWNlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAKICAgICBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
JiYpOwogCisgICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7CisKICAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlOwogCkBAIC02MSw5ICs2Myw4IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0gICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7
CiAKICAgICBib29sIGlzSW5Vc2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHJlbGVhc2VH
cmFwaGljc0NvbnRleHQoKSBvdmVycmlkZTsKQEAgLTc4LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgbXV0YWJsZSBib29sIG1fcmVxdWly
ZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX3Jl
cXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgeyBmYWxzZSB9OwogCiAgICAgbXV0YWJsZSBi
b29sIG1fbmVlZHNTZXR1cENvbnRleHQgeyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksOCArMjksOCBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SW1hZ2VJTy9JbWFn
ZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQmFzZTY0Lmg+CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cgogICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRh
dGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCkBAIC0xMzEs
NyArMTMxLDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiAg
ICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdz
IGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21w
b3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uu
d2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291
cmNlLnNpemUoKS53aWR0aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgaWYg
KCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTU0LDEyICsxNTQsMTIgQEAgc3RhdGljIFJldGFpblB0
cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERh
dGEuZGF0YSgpOwogICAgIH0KIAotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0
YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0
ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCkgKiBzb3Vy
Y2Uuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLnNpemUoKS53aWR0
aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKSwgMCkpOwogICAgIGlmICghZGF0YVByb3ZpZGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBz
b3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVm
YXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKHNvdXJjZS5zaXplKCkud2lkdGgoKSwgc291cmNlLnNpemUoKS5oZWlnaHQoKSwgOCwg
MzIsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0Jp
dG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAKICAgICBhdXRvIGNmRGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CiAgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBj
ZkRhdGEuZ2V0KCkpKQpAQCAtMTc2LDcgKzE3Niw3IEBAIFN0cmluZyBkYXRhVVJMKENGRGF0YVJl
ZiBkYXRhLCBjb25zdCBTdHIKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CiB9CiAKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
CitTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7CiAgICAgaWYgKGF1dG8gZGF0
YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKICAgICAgICAgcmV0dXJuIGRh
dGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIFZlY3Rvcjx1
aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkQKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
VmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKICAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNv
dXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQogICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogCiBXRUJDT1JF
X0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCog
YnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQCBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlCiBib29sIGVuY29kZUltYWdlKENHSW1h
Z2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFi
bGVEYXRhUmVmKTsKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CitTdHJpbmcgZGF0YVVSTChjb25z
dCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CiAKIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7Ci1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3Qg
UGl4ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjYxLDEzICs2NjEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvcgogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsK
IH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21w
b3NpdGVkUmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgYXV0byYgZGlzcGxheUJ1ZmZl
ciA9IG1fc3dhcENoYWluLT5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVy
LnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoZGlzcGxheUJ1ZmZlci5z
dXJmYWNlLT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gTm90
ZTogV2UgYXJlIHVzaW5nIEdMIHRvIHJlYWQgdGhlIElPU3VyZmFjZS4gQXQgdGhlIHRpbWUgb2Yg
d3JpdGluZywgdGhlcmUgYXJlIG5vIGNvbnZpbmllbnQKICAgICAvLyBmdW5jdGlvbnMgdG8gY29u
dmVydCB0aGUgSU9TdXJmYWNlIHBpeGVsIGRhdGEgdG8gSW1hZ2VEYXRhLiBUaGUgaW1hZ2UgZGF0
YSBlbmRzIHVwIGJlaW5nCiAgICAgLy8gZHJhd24gdG8gYSBJbWFnZUJ1ZmZlciwgYnV0IGF0IHRo
ZSB0aW1lIHRoZXJlJ3Mgbm8gZnVuY3Rpb25zIHRvIGNvbnN0cnVjdCBhIE5hdGl2ZUltYWdlCkBA
IC02NzgsNyArNjc4LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
RwogICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5KCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQg
IT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKICAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRh
cmdldCwgdGV4dHVyZSk7CiAgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxheU9iaiwg
ZGlzcGxheUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAg
ICBTY29wZWRGcmFtZWJ1ZmZlciBmYm87CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZl
ckJpbmRpbmcgZmJvQmluZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTywg
ZmJvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUJsZW5kTkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVC
bGVuZE5FT04uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKIAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGFybV9uZW9uLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiwzMyArMTEyLDM0IEBAIHZvaWQgRkVCbGVu
ZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAg
IGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QSA9IGluLT5w
cmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QiA9
IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAotICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7Ci0gICAgQVNT
RVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKKyAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxBcnJh
eUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAotICAg
IGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04o
c3JjUGl4ZWxBcnJheUEtPmRhdGEoKSwgc3JjUGl4ZWxBcnJheUItPmRhdGEoKSwgZHN0UGl4ZWxB
cnJheS0+ZGF0YSgpLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VQaXhl
bEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOworICAgIEFTU0VSVChw
aXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CisKKyAgICBp
ZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CisgICAgICAgIHBsYXRmb3JtQXBwbHlO
RU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCks
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVs
IHdlIGV4cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPiAwKTsK
KyAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwogICAgIHVpbnQzMl90IHNv
dXJjZUFbMl0gPSB7MCwgMH07CiAgICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7MCwg
MH07CiAKLSAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Bp
eGVsQXJyYXlBLT5kYXRhKCkpWzBdOwotICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KHNyY1BpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOworICAgIHNvdXJj
ZUFbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUEtPmRh
dGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSlbMF07CiAgICAgcGxhdGZvcm1BcHBseU5F
T04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291
cmNlQkFuZERlc3QpLCA4KTsKLSAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZHN0UGl4
ZWxBcnJheS0+ZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJj
ZUJBbmREZXN0WzBdOwogfQogCiB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2ln
bmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5Qiwg
dW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDEw
ICsyOTgsMTAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbQogICAg
ICAgICByZXR1cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZl
cj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAg
IHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPihpdGVtLmdldDxNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxHZXRJbWFnZURhdGE+KGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxH
ZXRQaXhlbEJ1ZmZlcj4oaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dFBpeGVsQnVm
ZmVyPihpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJuIGFwcGVu
ZDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsx
ODgsOCBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgogICAg
IGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKLSAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAg
Y2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CiAgICAgICAgIC8vIFNob3VsZCBhbHJlYWR5
IGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgwLDExICsyODAsMTEgQEAgdm9pZCBJdGVtSGFuZGxl
OjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAg
IGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxHZXRJbWFnZURhdGE+Ojp2YWx1ZSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEdldFBpeGVsQnVmZmVyPjo6dmFsdWUp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAg
ICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgZ2V0PFB1dFBpeGVsQnVmZmVyPigpLn5QdXRQ
aXhlbEJ1ZmZlcigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6CiAgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKQEAgLTUw
NCwxMCArNTA0LDEwIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbUhhbmRsZSBkZXMK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAg
ICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88
R2V0SW1hZ2VEYXRhPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88UHV0SW1hZ2VEYXRhPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAg
IHJldHVybiBjb3B5SW50bzxHZXRQaXhlbEJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOworICAg
IGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88
UHV0UGl4ZWxCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVEYXNoPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwogICAgIGNhc2UgSXRlbVR5
cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHZXRJbWFnZURhdGEpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihQdXRJbWFnZURhdGEp
OworICAgIGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdldFBpeGVsQnVmZmVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihQdXRQaXhlbEJ1ZmZlcik7CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJu
IHNpemVvZihQYWludEZyYW1lRm9yTWVkaWEpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgaXNE
cmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6CkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBl
IHR5cGUpCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYToKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICBj
YXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6CkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
OgorICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVBhdGg6CkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
IGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhl
bEJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4
IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGbHVzaENvbnRleHQsCiAg
ICAgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyLAogICAgIE1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlciwKLSAgICBHZXRJbWFnZURhdGEsCi0gICAgUHV0SW1hZ2VEYXRh
LAorICAgIEdldFBpeGVsQnVmZmVyLAorICAgIFB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShW
SURFTykKICAgICBQYWludEZyYW1lRm9yTWVkaWEsCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVw
bGF5ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CkBAIC03NjksMzUgKzc2OCw0NCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR2V0SW1hZ2VEYXRhJiBpdGVtKQorc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdldFBpeGVsQnVmZmVyJiBp
dGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgib3V0cHV0Rm9ybWF0IiwgaXRlbS5vdXRwdXRG
b3JtYXQoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3Jj
UmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQotICAgICwgbV9pbWFn
ZURhdGEoaW1hZ2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVx
dWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KKyAgICAs
IG1fcGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpIC8vIFRoaXMgY29weSBpcyBh
Y3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNzIG9mIHB1dFBpeGVsQnVm
ZmVyKCkuCiAgICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQogICAgICwgbV9kZXN0Rm9y
bWF0KGRlc3RGb3JtYXQpCiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogICAgIDogbV9zcmNSZWN0
KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCi0gICAgLCBtX2ltYWdlRGF0
YShXVEZNb3ZlKGltYWdlRGF0YSkpCisgICAgLCBtX3BpeGVsQnVmZmVyKFdURk1vdmUocGl4ZWxC
dWZmZXIpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZv
cm1hdChkZXN0Rm9ybWF0KQogewogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQorUHV0UGl4ZWxCdWZmZXI6
OlB1dFBpeGVsQnVmZmVyKGNvbnN0IFB1dFBpeGVsQnVmZmVyJiBvdGhlcikKKyAgICA6IG1fc3Jj
UmVjdChvdGhlci5tX3NyY1JlY3QpCisgICAgLCBtX2Rlc3RQb2ludChvdGhlci5tX2Rlc3RQb2lu
dCkKKyAgICAsIG1fcGl4ZWxCdWZmZXIob3RoZXIubV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkK
KyAgICAsIG1faW5wdXRGb3JtYXQob3RoZXIubV9pbnB1dEZvcm1hdCkKKyAgICAsIG1fZGVzdEZv
cm1hdChvdGhlci5tX2Rlc3RGb3JtYXQpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRQaXhlbEJ1ZmZlciYgaXRlbSkKIHsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUo
KSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwaXhlbEJ1ZmZlclNpemUiLCBpdGVtLnBpeGVsQnVm
ZmVyKCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1Jl
Y3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0UG9pbnQiLCBpdGVtLmRlc3RQb2ludCgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3RGb3JtYXQiLCBpdGVtLmRlc3RGb3JtYXQoKSk7
CkBAIC0xMDY0LDggKzEwNzIsOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OiB0cyA8PCAiZmx1c2gtY29u
dGV4dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtZGVzdGluYXRpb24t
aW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFu
Z2VJdGVtQnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5kLWNoYW5nZS1pdGVtLWJ1ZmZlciI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YTogdHMgPDwgImdldC1pbWFnZS1k
YXRhIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB0cyA8PCAicHV0
LWltYWdlLWRhdGEiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjog
dHMgPDwgImdldC1waXhlbC1idWZmZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQ
aXhlbEJ1ZmZlcjogdHMgPDwgInB1dC1waXhlbC1idWZmZXIiOyBicmVhazsKICNpZiBFTkFCTEUo
VklERU8pCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB0cyA8PCAicGFp
bnQtZnJhbWUtZm9yLW1lZGlhIjsgYnJlYWs7CiAjZW5kaWYKQEAgLTEyMzEsMTEgKzEyMzksMTEg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSQogICAgIGNhc2UgSXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1h
Z2VEYXRhPigpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICB0
cyA8PCBpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIkdyYWRpZW50
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllcklkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIFRl
eHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VEYXRhOwogY2xh
c3MgTWVkaWFQbGF5ZXI7CiBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CiAKQEAgLTE5MDAs
MTMgKzE4OTksMTMgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotY2xh
c3MgR2V0SW1hZ2VEYXRhIHsKK2NsYXNzIEdldFBpeGVsQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkdldEltYWdlRGF0
YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6Okdl
dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAK
LSAgICBHZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCisgICAgR2V0UGl4ZWxCdWZm
ZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCiAgICAgICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAg
ICAgICAgICwgbV9vdXRwdXRGb3JtYXQob3V0cHV0Rm9ybWF0KQogICAgIHsKQEAgLTE5MjAsMTcg
KzE5MTksMTkgQEAgcHJpdmF0ZToKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fb3V0cHV0
Rm9ybWF0OwogfTsKIAotY2xhc3MgUHV0SW1hZ2VEYXRhIHsKK2NsYXNzIFB1dFBpeGVsQnVmZmVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlB1dEltYWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXIm
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKworICAgIFB1dFBpeGVsQnVmZmVyKGNv
bnN0IFB1dFBpeGVsQnVmZmVyJik7CiAKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdDsgfQotICAgIEltYWdlRGF0YSYg
aW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1faW1hZ2VEYXRhOyB9CisgICAgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlcjsgfQog
ICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQogICAgIElu
dFBvaW50IGRlc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFBvaW50OyB9CiAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0Rm9y
bWF0OyB9CkBAIC0xOTM5LDMxICsxOTQwLDMxIEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1fZGVzdFBvaW50LCBtX3Ny
Y1JlY3Quc2l6ZSgpIH19OyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IGRlY29kZShEZWNv
ZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3NyY1JlY3Q7CiAgICAgSW50UG9pbnQg
bV9kZXN0UG9pbnQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV9pbWFnZURhdGE7CisgICAgUGl4
ZWxCdWZmZXIgbV9waXhlbEJ1ZmZlcjsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5w
dXRGb3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBQdXRJbWFnZURhdGE6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBQdXRQaXhlbEJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVu
Y29kZXIgPDwgbWFrZVJlZigqbV9pbWFnZURhdGEpOworICAgIGVuY29kZXIgPDwgbV9waXhlbEJ1
ZmZlcjsKICAgICBlbmNvZGVyIDw8IG1fc3JjUmVjdDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdFBv
aW50OwogICAgIGVuY29kZXIgPDwgbV9kZXN0Rm9ybWF0OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IFB1dFBpeGVsQnVmZmVyOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uPiBpbnB1dEZvcm1hdDsKLSAgICBPcHRpb25hbDxSZWY8SW1hZ2VEYXRhPj4gaW1hZ2VE
YXRhOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwaXhlbEJ1ZmZlcjsKICAgICBPcHRpb25h
bDxJbnRSZWN0PiBzcmNSZWN0OwogICAgIE9wdGlvbmFsPEludFBvaW50PiBkZXN0UG9pbnQ7CiAg
ICAgT3B0aW9uYWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gZGVzdEZvcm1hdDsKQEAgLTE5NzIs
OCArMTk3Myw4IEBAIE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VEYXRhOjpkZWMKICAg
ICBpZiAoIWlucHV0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ZGVjb2RlciA+PiBpbWFnZURhdGE7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgZGVjb2RlciA+
PiBwaXhlbEJ1ZmZlcjsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgZGVjb2RlciA+PiBzcmNSZWN0OwpAQCAtMTk4OCw3ICsxOTg5LDcg
QEAgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlYwogICAgIGlmICghZGVz
dEZvcm1hdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiB7eyAq
aW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAq
ZGVzdEZvcm1hdCB9fTsKKyAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCpwaXhl
bEJ1ZmZlciksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCB9fTsKIH0KIAogI2lm
IEVOQUJMRShWSURFTykKQEAgLTIzMTcsMTAgKzIzMTgsMTAgQEAgdXNpbmcgRGlzcGxheUxpc3RJ
dGVtID0gVmFyaWFudAogICAgICwgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUKICAgICAsIEZpbGxS
b3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0Ci0gICAgLCBHZXRJbWFnZURhdGEKKyAgICAs
IEdldFBpeGVsQnVmZmVyCiAgICAgLCBNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIKICAgICAsIE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcgotICAgICwgUHV0SW1hZ2VE
YXRhCisgICAgLCBQdXRQaXhlbEJ1ZmZlcgogICAgICwgUmVzdG9yZQogICAgICwgUm90YXRlCiAg
ICAgLCBTYXZlCkBAIC0yNDE5LDggKzI0MjAsOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRpCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVz
aENvbnRleHQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIsCi0gICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRJbWFnZURhdGEsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEsCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlciwKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShWSURFTykKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSwKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNCArNTUsMTQgQEAgUmVjb3Jk
ZXI6On5SZWNvcmRlcigpCiAgICAgTE9HKERpc3BsYXlMaXN0cywgIlJlY29yZGVkIGRpc3BsYXkg
bGlzdDpcbiVzIiwgbV9kaXNwbGF5TGlzdC5kZXNjcmlwdGlvbigpLmRhdGEoKSk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KQogewotICAgIGFwcGVuZDxHZXRJbWFnZURhdGE+KG91dHB1dEZvcm1hdCwg
c291cmNlUmVjdCk7CisgICAgYXBwZW5kPEdldFBpeGVsQnVmZmVyPihvdXRwdXRGb3JtYXQsIHNv
dXJjZVJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKK3ZvaWQgUmVjb3JkZXI6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVy
JiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQogewotICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9ybWF0LCBp
bWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgYXBwZW5kPFB1
dFBpeGVsQnVmZmVyPihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2lu
dCwgZGVzdEZvcm1hdCk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRl
Q2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxNCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90Owor
CiBjbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR2x5cGhCdWZmZXI7
CiBjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udDsKK2NsYXNz
IEdseXBoQnVmZmVyOwogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7CitjbGFzcyBQaXhl
bEJ1ZmZlcjsKIAogc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwogc3RydWN0IEltYWdlUGFp
bnRpbmdPcHRpb25zOwpAQCAtNTcsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5S
ZWNvcmRlcigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCk7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0LmlzRW1wdHkoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZW51bSBjbGFzcyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIDogdWludDhfdDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIEltYWdlRGF0YTsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0yODYsMTIgKzI4NiwxMiBAQCB2b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRh
ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNp
emUoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBh
dXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKIAogICAgIFZl
Y3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CiAgICAgCkBA
IC0zMTMsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgaW1h
Z2VSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ck1hdHJpeFR5cGUmIHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMTA4LDExICsxMDgsMTEgQEAgdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5UwogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlUmVzdWx0KQorICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0LT5kYXRhKCk7CisgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwog
CiAgICAgTG9va3VwVGFibGUgcmVkVGFibGU7CiAgICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsK
QEAgLTEyMCwxMSArMTIwLDExIEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseVMKICAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwogICAgIGNvbXB1dGVMb29rdXBUYWJs
ZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKLSAgICBJ
bnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQocGl4
ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVVubXVsdGlwbGllZFJl
c3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDFdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSwyMSArMjI5LDIxIEBAIHZvaWQgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKSB7Ci0gICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5k
YXRhKCk7CisgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlm
ICghc3JjUGl4ZWxBcnJheSkKKyAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGlm
ICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBJbnRS
ZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
ICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBl
ZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgcGxh
dGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNyY1BpeGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIG1f
azEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2Fy
ZSgqc291cmNlUGl4ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBt
X2szLCBtX2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM3MSwzMyArMzcx
LDI4IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnQKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFnZURhdGEqIHJlc3Vs
dEltYWdlOwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHJlc3VsdEltYWdlID0g
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3Vs
dEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZl
QWxwaGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRh
dGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHNyY1BpeGVsQXJyYXk7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3Vy
Y2VQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNyY1BpeGVs
QXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlw
bGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAg
ICBlbHNlCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNyY1Bp
eGVsQXJyYXkpCisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJl
c3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAo
IXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFNpemUgcGFpbnRT
aXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAgICAgcGFpbnRTaXplLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9
IHsKLSAgICAgICAgKnNyY1BpeGVsQXJyYXksCi0gICAgICAgIGRzdFBpeGVsQXJyYXksCisgICAg
ICAgICpzb3VyY2VQaXhlbEFycmF5LAorICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCiAg
ICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCiAg
ICAgICAgIG1fYmlhcyAqIDI1NSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5LDE2
ICs5OSwxNiBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mCiAgICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBhdXRvIGlucHV0SW1h
Z2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1
ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBj
b2xvciB2YWx1ZXMuCiAgICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCkBAIC0xMzYsMTggKzEzNiwxOCBA
QCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mCiAgICAgICAgIGludCBs
aW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7CiAKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZHN0SW5kZXgg
PSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbklu
ZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFj
ZW1lbnRJbWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxl
ZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50Pihz
Y2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlzcGxh
Y2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9
IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2Ut
Pml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9m
ZnNldFgpOworICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2Fs
ZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBk
aXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5z
aWduZWQqIGRzdFBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVs
QXJyYXkuZGF0YSgpICsgZHN0SW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1gg
PCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBw
YWludFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZHN0UGl4ZWxQdHIgPSAwOwor
ICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgKmRzdFBpeGVsUHRyID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zm
c2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAgICAgICAgKmRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRh
dGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtOTksMTYgKzk5LDE1IEBAIHZvaWQgRkVEcm9w
U2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKIAogICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwogCi0gICAgLy8gVE9ETzog
RGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRo
ZSBJbWFnZURhdGEuCiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93
QXJlYSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3Vs
dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgY29u
dGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LmRhdGEoKSwgaW1hZ2VEYXRh
LT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICBhdXRvJiBzb3Vy
Y2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJs
dXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsKICAgICAKLSAgICByZXN1bHRJbWFn
ZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIHNoYWRvd0FyZWEpOworICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZmZXIsIHNoYWRv
d0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dD
b2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ck5FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQpA
QCAtNTIzLDE2ICs1MjMsMTYgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1
dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVz
dWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBp
bi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYg
KCFtX3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDUsNyArNTQ1LDcg
QEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YQogICAgIGlmICghdG1w
SW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KGRzdFBpeGVs
QXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWln
aHQoKSwgcGFpbnRTaXplKTsKKyAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgp
LCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDc1LDIzICs0NzUsMjMgQEAgdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKIAotICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBy
ZXN1bHRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBz
ZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChyZXN1bHRQaXhlbEFycmF5LCBlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgx
LDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBu
byB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBo
YXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Rocywg
YW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNv
bnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAogICAgIElu
dFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBkcmF3TGlnaHRpbmcocmVzdWx0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgo
KSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIGRyYXdMaWdodGluZyhkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRT
aXplLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjQzLDIzICsyNDMsMjMgQEAgdm9p
ZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
OworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwog
Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogCiAgICAgSW50U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9h
dFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsKICAgICBpZiAocGxhdGZvcm1BcHBseURlZ2Vu
ZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndp
ZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9
IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBp
eGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0
aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0Lmhl
aWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM5NiwxNyArMzk2LDE3IEBAIHZvaWQgRkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGwKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJ
bnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwogICAgIHJlc3Vs
dFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBpZiAocmVzdWx0U2l6
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kp
IHsKICAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhp
czsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5OworICAg
ICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsK
ICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAg
ICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIEZF
VHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgfQogCiAgICAgLy8gRmFsbGJh
Y2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcg
dGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKHBp
eGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBmaWxs
UmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAw
LCBoZWlnaHQpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlz
aW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTc3LDcgKzc3LDcgQEAgRmxvYXRQb2lu
dCBGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZQogICAgIHJldHVybiBhYnNvbHV0ZVBvaW50
OwogfQogCi1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAorSW50UmVjdCBGaWx0ZXJFZmZl
Y3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZl
Y3RSZWN0KSBjb25zdAogewogICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50
UmVjdC5sb2NhdGlvbigpOwogICAgIGxvY2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlv
bigpKTsKQEAgLTI0Nyw4ICsyNDcsOCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFBy
ZU11bHRpcGxpCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewogICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBudWxscHRyOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKKyAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OworICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFn
ZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVy
UmVzdWx0IDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCk7CiAKICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAq
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQot
ICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVz
dGluYXRpb25SZWN0KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKIH0KIApAQCAtMjkwLDExICsyOTAsMTQgQEAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OgogICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwogICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVy
Zmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqaW1hZ2VEYXRh
LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGF1dG8gcGl4
ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNr
ZWRBcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3Qs
IGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEFycmF5OwogfQogCiBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBA
IC0zMDIsMTEgKzMwNSwxNCBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CiAgICAgc2NhbGVkU2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChzY2FsZWRTaXplLmFyZWEo
KSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIGNoZWNr
ZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAo
Y2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChjaGVja2VkQXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFwaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqaW1hZ2VE
YXRhLCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gcGl4ZWxBcnJheTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKQEAgLTQzMyw3OCArNDM5LDgwIEBA
IHN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY28KICNlbmRpZgogfQogCi1S
ZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIEltYWdlRGF0YSYgaW5w
dXREYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKIHsKLSAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBpbnB1dERhdGEuc2l6ZSgpKTsKKyAgICAv
LyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2Ug
Y29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgorCisgICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsK
ICAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwog
ICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0
aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3Rv
cmUgaW5jb21pbmcgSW1hZ2VEYXRhCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0
b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCiAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
ICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYnVmZmVyLT5w
dXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBpbnB1dERhdGEsIGRlc3RpbmF0aW9uUmVjdCk7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihv
dXRwdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwg
ZGVzdGluYXRpb25SZWN0LCBvdXRwdXRGb3JtYXQpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKK09w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZm
ZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCkKIHsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwogICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1
ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRs
ZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCiAgICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7CiAgICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIg
dG8gYW5vdGhlcgogICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKG91dHB1dEZvcm1hdCwgcmVjdCk7CisgICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCByZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQog
ewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0
LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkSW1hZ2VEYXRhID0g
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsICptX2ltYWdlQnVmZmVy
UmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0sIG91dHB1
dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRJbWFnZURhdGEpCisgICAgYXV0byBjb252ZXJ0
ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNl
LCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOworICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEt
PmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252
ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAogICAg
IC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1
dG8gY29udmVydGVkSW1hZ2VEYXRhID0gY29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCBpbWFnZURhdGEsIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRJbWFn
ZURhdGEpCisgICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZl
clRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlciwgb3V0cHV0Rm9ybWF0KTsKKyAg
ICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgY29weUlt
YWdlQnl0ZXMoY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7CisgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAg
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAi
IDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwg
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwogCiAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNp
b24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3Vs
dCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNp
b24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKICAgICAgICAgICAgICAgICBjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
SW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAg
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAg
ICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5w
dXRTaXplKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1
ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6
OkJHUkE4LCBpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3Bh
Y2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CisgICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29w
eUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7CkBAIC01MTQsMzEgKzUyMiwzMSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUo
KSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAi
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KTsKIAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewogICAg
ICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGlu
YXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCByZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1h
Z2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0
YVRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
KmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3Qp
OworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKKyAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwpAQCAtNTU4LDcxICs1NjYsNzMgQEAgSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdQogICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyUmVzdWx0LmdldCgpOwogfQogCi1JbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywg
IkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRl
ck5hbWUoKSwgdGhpcyk7CiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2Vk
LgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAgIEFTU0VSVChtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID09IFdURjo6bnVsbG9wdCk7CisKICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LmdldCgpOworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBy
ZXN1bHRTaXplKTsKKyAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIH0KIAot
SW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCiAg
ICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jl
c3VsdCgpKTsKKyAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPT0gV1RGOjpu
dWxsb3B0KTsKKwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6
ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXpl
KTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCByZXN1bHRTaXplKTsKKyAg
ICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiB9CiAKLWJvb2wgRmlsdGVyRWZm
ZWN0OjpyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKE9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gZHN0Q29sb3JTcGFjZSkKK2Jvb2wgRmlsdGVyRWZmZWN0OjpyZXF1
aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCiB7CiAjaWYgVVNFKENHKQogICAgIC8v
IFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4g
ZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgogICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBj
b2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBp
bnB1dAogICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxz
Ci0gICAgcmV0dXJuIGRzdENvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkc3RD
b2xvclNwYWNlOworICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29s
b3JTcGFjZSgpICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7CiAjZWxzZQogICAgIC8vIEFkZGl0
aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAg
IFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b25Db2xvclNwYWNlKTsKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAotdm9pZCBGaWx0
ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
IGRzdENvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdGluYXRpb25Db2xvclNwYWNlKQogewogI2lm
IFVTRShDRykKICAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVy
bmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOworICAgIFVOVVNFRF9QQVJB
TShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8
IGRzdENvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQorICAgIGlmICghaGFzUmVzdWx0
KCkgfHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5
IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCiAgICAgLy8gY29s
b3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJy
YXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1
bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKyAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50
cmFuc2Zvcm1Db2xvclNwYWNlKG1fcmVzdWx0Q29sb3JTcGFjZSwgZGVzdGluYXRpb25Db2xvclNw
YWNlKTsKIAotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRzdENvbG9yU3BhY2U7CisgICAgbV9y
ZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwogCi0gICAgaWYgKG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBudWxscHRyOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxscHRyOworICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw4ICsyNywxMCBAQAogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDEsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJF
ZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVs
QnVmZmVyOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZm
ZWN0VmVjdG9yOwogCkBAIC0xMDAsNyArMTAzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsK
LSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMu
CiAgICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwpAQCAt
MTg1LDggKzE4OCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUg
Y29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAs
MjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTIwMiwxOCAr
MjA1LDE4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZl
cnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFnZURhdGEm
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
T3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
Y29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdl
RGF0YSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdl
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIHZv
aWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYsIFBpeGVsQnVmZmVyJiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7CisgICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIAogCiAgICAgRmlsdGVyJiBtX2ZpbHRlcjsKICAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KIAogI2lmIFVTRShB
VkZPVU5EQVRJT04pCkBAIC0yMDksMTAgKzIwOSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFJlbmRlCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisg
ICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0
dHJpYnV0ZXMoKSwgaW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxsKCksIGltYWdlQnVmZmVyLmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CisgICAgcGFpbnRUb0NhbnZhcyhjb250
ZXh0QXR0cmlidXRlcygpLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCkBAIC0yMjEsNDAgKzIyMSw0MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludENvbXBvCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwotICAgIGlmICghaW1hZ2VEYXRhKQor
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRUb0NhbnZhcyhjb250ZXh0
QXR0cmlidXRlcygpLCBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXIuYmFj
a2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFzKGNv
bnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXIuYmFj
a2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0
YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpCiB7CiAgICAgLy8gUmVhZGluZyBwcmVt
dWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMg
bG9zc3kuCiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogfQogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHNG
b3JQYWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9CiAKLVJlZlB0cjxJbWFn
ZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQ
YWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHJldHVybiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAogI2lmICFQTEFURk9S
TShDT0NPQSkKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
Q29tcG9zaXRlZFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewogICAgIHJldHVybiByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw4
ICs4Nyw4IEBAIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKICNlbmRpZgogY2xhc3MgSG9zdFdp
bmRvdzsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgTWVkaWFQ
bGF5ZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBjbGFz
cyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKQEAgLTQ2MywxMSArNDYz
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24oKTsKIAogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZm
ZXImKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpIGZpbmFsOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKIAotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKLSAgICBSZWZQdHI8SW1h
Z2VEYXRhPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworICAgIE9wdGlvbmFs
PFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCk7CisgICAgT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CiAK
ICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBs
YXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZpbmFsOwpAQCAtNTI2
LDcgKzUyNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5
cGVGb3JJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0mIGZv
cm1hdCwgR0NHTGVudW0mIHR5cGUpOwogI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSAgICBzdGF0
aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYs
IFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXImJiwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBA
IC01NTMsOSArNTUzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CiAK
IAotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0gICAgUmVm
UHRyPEltYWdlRGF0YT4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7Ci0gICAgUmVmUHRyPEltYWdl
RGF0YT4gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBy
ZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFBp
eGVsc0ZvclBhaW50UmVzdWx0cygpOwogCiAgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRT
aXplJik7CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaWYgRU5B
QkxFKFdFQkdMKSAmJiBVU0UoT1BFTkdMKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdM
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0cmluZz4K
QEAgLTYxLDEyICs2MSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotUmVmUHRyPElt
YWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3Vs
dHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
UGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0
YTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwotICAgIGlmICghaW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4
ZWxCdWZmZXI6OmNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEdMaW50IHBhY2tBbGln
bm1lbnQgPSA0OwogICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7CkBA
IC03NiwxMiArNzUsMTIgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
RwogICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KIAotICAg
IDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgp
KTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCks
IHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKIAogICAgIGlmIChtdXN0UmVzdG9yZVBhY2tB
bGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFj
a0FsaWdubWVudCk7CiAKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1
ZmZlcjsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1
dGVzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTAgKzM5LDEwIEBACiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRT
aXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVz
c2lvbi5oPgpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnByZXBhcmVUZXgKICAgICA6OmdsRmx1c2goKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMo
KQogewogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAoY29udGV4dEF0
dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoT1BF
TkdMX0VTKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKLSNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAog
I2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcuaD4KIApAQCAtNDYsNyArNDYsNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0KICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250
ZXh0QXR0cmlidXRlcygpOwogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2gg
Y2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKQEAgLTY1LDExICs2NCwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQog
Ci1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0Zv
clBhaW50UmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0gICAg
aWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
R0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CiAgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1l
bnQgPSBmYWxzZTsKQEAgLTc5LDEyICs3OCwxMiBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7
CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBp
bWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEt
PmRhdGEoKS5kYXRhKCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIHBpeGVsQnVmZmVyLT5z
aXplKCkud2lkdGgoKSwgcGl4ZWxCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogCiAgICAgaWYgKG11
c3RSZXN0b3JlUGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tf
QUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAg
cmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJDT01QdHIuaCIKICNpbmNs
dWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxXzEuaD4KICNp
bmNsdWRlIDxtYXRoLmg+CkBAIC0zMTIsMTYgKzMxMiwxNiBAQCBWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
K09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBu
dWxscHRyKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihv
dXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOwogfQogCi12b2lkIEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZv
cm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhl
bEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQs
IGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKKyAg
ICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4
ICs1Myw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1
ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByb3RlY3Rl
ZDoKICAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNw
cAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBJbnRSZWN0IENTU0ZpbHRl
cjo6b3V0cHV0UmVjdCgpIGNvbnN0CiAgICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5s
YXN0KCkuZ2V0KCk7CiAgICAgCiAgICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkgfHwgKG1f
ZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQotICAgICAg
ICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKEludFJl
Y3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKKyAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsK
ICAgICAKICAgICByZXR1cm4geyB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBA
CiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
Ikxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAi
UG9seWdvblNoYXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKICNpbmNsdWRlICJSZWN0
YW5nbGVTaGFwZS5oIgpAQCAtMTk3LDE0ICsxOTcsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBl
PiBTaGFwZTo6Y3JlYXRlUmFzdAogICAgIGlmIChpbWFnZSkKICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUo
KSkpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFn
ZVJlY3Quc2l6ZSgpIH0pOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IElu
dFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CiAgICAgCi0gICAgLy8gV2UgY291bGQgZ2V0
IHRvIGEgdmFsdWUgd2hlcmUgaW1hZ2VEYXRhIGNvdWxkIGJlIG51bGxwdHIuIEEgY2FzZSB3aGVy
ZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1Z2UsIGltYWdlRGF0YTo6Y3JlYXRlCi0gICAgLy8gY2Fu
IHJldHVybiBhIG51bGxwdHIgYmVjYXVzZSBkYXRhIHNpemUgaGFzIG92ZXJmbG93ZWQuIFJlZmVy
IHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgLy8gV2Ug
Y291bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgUGl4ZWxCdWZmZXIgY291bGQgYmUgbnVsbG9wdC4g
QSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgUGl4ZWxCdWZmZXI6OnRyeUNy
ZWF0ZQorICAgIC8vIGNhbiByZXR1cm4gYSBudWxsb3B0IGJlY2F1c2UgZGF0YSBzaXplIGhhcyBv
dmVyZmxvd2VkLiBSZWZlciByZGFyOi8vcHJvYmxlbS82MTc5Mzg4NAorICAgIGlmICghcGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwogCi0gICAgYXV0byYgcGl4ZWxB
cnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1
ZmZlci0+ZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5
Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBp
eGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNob2xk
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hvbGQs
IDAsIDEpICogMjU1LjBmKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MyBAQAorMjAy
MS0wNS0wOSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBp
eGVsQnVmZmVyIHJhdGhlciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXgg
bGF5ZXJpbmcgdmlvbGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjU1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHRoZSBET00gbGF5ZXIgb2JqZWN0IFdlYkNv
cmU6OkltYWdlRGF0YSB3aXRoIHRoZSBuZXcgcGxhdGZvcm0KKyAgICAgICAgbGF5ZXIgV2ViQ29y
ZTo6UGl4ZWxCdWZmZXIsIHdoaWNoIGZpeGVzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIFdlYkNvcmUg
YW5kIGF2b2lkcworICAgICAgICB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyAvIHJlZmVyZW5jZSBj
b3VudGluZy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UGl4ZWxCdWZmZXJUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBh
aW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW46CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dl
bmVyYXRlZC5oOgorICAgICAgICAocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcik6
CisgICAgICAgIChwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZv
ckdldFBpeGVsQnVmZmVySGVscGVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJl
ZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9wdWxhdGVHZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmRlY29kZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRN
ZW1vcnlGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlB
bmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9wdWxh
dGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpn
ZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6Q0dEaXNw
bGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWY8V2ViQ29y
ZTo6SW1hZ2VEYXRhPj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50
Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6
SW1hZ2VEYXRhPj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dFBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFy
ZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldFBpeGVs
QnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFnZURh
dGFUb0NvbXBsZXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpw
dXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOgorCiAyMDIxLTA1LTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIElQQyB0ZXN0aW5nIEFQSSBzaG91
bGQgaGF2ZSB0aGUgYWJpbGl0eSB0byBzZW5kIGFuZCByZWNlaXZlIHNoYXJlZCBtZW1vcnkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk4LDE2ICsxOTgsMTYgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6bm90aWZ5TWFyawogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlQnVmZmVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKLSAgICBwYWlu
dEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVyaW5nUmVzdWx0c0Zv
clBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVyaW5n
UmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwotICAgIHBhaW50SW1hZ2VE
YXRhVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50
aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgcGFp
bnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpLCBpbWFnZUJ1ZmZlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludEltYWdlRGF0YVRvSW1h
Z2VCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4mJiBpbWFnZURhdGEsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVm
ZmVyPiYmIHBpeGVsQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
dGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAvLyBGSVhNRTogV2Ug
ZG8gbm90IGhhdmUgZnVuY3Rpb25pbmcgcmVhZC93cml0ZSBmZW5jZXMgaW4gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC4gVGh1cyB0aGlzIGlzIHN5bmNocm9ub3VzLApAQCAtMjE5LDggKzIxOSw4IEBA
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50SW1hZ2UKICAgICAgICAgaWYgKGF1
dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbmRlcmluZ0JhY2tlbmQtPnJlbW90ZVJlc291cmNlQ2FjaGUo
KS5jYWNoZWRJbWFnZUJ1ZmZlcih0YXJnZXQpKSB7CiAgICAgICAgICAgICAvLyBIZXJlIHdlIGRv
IG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29tbWFuZHMgZm9yIGltYWdlQnVmZmVyLiBD
dXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBmb3IgZW1wdHkKICAgICAgICAgICAgIC8v
IGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gYWRkIGRpc3BsYXkgbGlz
dHMuCi0gICAgICAgICAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBpbWFnZURh
dGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVm
ZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRy
aWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgp
LCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmNsZWFyUmVjdCh7IEludFBvaW50KCksIGltYWdl
QnVmZmVyLT5iYWNrZW5kU2l6ZSgpIH0pOwogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSAi
Zmx1c2giIGltcGxlbWVudGF0aW9uIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgb3ZlcmxvYWRz
IG9yZGVyaW5nIGFuZCBlZmZlY3RzLgpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgJKHJldmlz
aW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgcHJv
dGVjdGVkOgogCiAjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5l
cmF0ZWQuaCIgLy8gTk9MSU5UCiAKLSAgICB2b2lkIHBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZl
cihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBwYWlu
dFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4m
JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogCiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVmUHRyPElQQzo6U3RyZWFtU2VydmVy
Q29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+IG1fc3RyZWFtQ29ubmVjdGlvbjsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3
IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIE5vdFIKICAgICB2b2lkIE11
bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4gZmlyc3RzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGNvdW50
cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBpbnN0YW5jZUNvdW50cywgaW50MzJfdCBk
cmF3Y291bnQpCiAgICAgdm9pZCBNdWx0aURyYXdFbGVtZW50c0FOR0xFKHVpbnQzMl90IG1vZGUs
IElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gY291bnRzLCB1aW50MzJfdCB0eXBlLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IG9mZnNldHMsIGludDMyX3QgZHJhd2NvdW50KQogICAg
IHZvaWQgTXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSh1aW50MzJfdCBtb2RlLCBJUEM6
OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJh
eVJlZmVyZW5jZTxpbnQzMl90PiBvZmZzZXRzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+
IGluc3RhbmNlQ291bnRzLCBpbnQzMl90IGRyYXdjb3VudCkKLSAgICB2b2lkIFBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgLT4gKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHJl
dHVyblZhbHVlKSBTeW5jaHJvbm91cworICAgIHZvaWQgUGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9Q
aXhlbEJ1ZmZlcigpIC0+IChPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcmV0dXJuVmFs
dWUpIFN5bmNocm9ub3VzCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgJKHJldmlzaW9uIDI3NzI1NSkKKysr
IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TEZ1bmN0aW9uc0dlbmVyYXRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc5LDExICsxMzc5LDEx
IEBACiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAgIG1f
Y29udGV4dC0+bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBtYWtlR0NHTFNw
YW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihjb3VudHMuZGF0YSgpKSwgY291
bnRzLnNpemUoKSksIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdD
R0xpbnQqPihvZmZzZXRzLmRhdGEoKSksIG9mZnNldHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVpKj4oaW5zdGFuY2VDb3VudHMuZGF0YSgpKSwg
aW5zdGFuY2VDb3VudHMuc2l6ZSgpKSwgZHJhd2NvdW50KTsKICAgICB9Ci0gICAgdm9pZCBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0
cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHZvaWQg
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHJldHVyblZhbHVlID0g
eyB9OworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcmV0dXJuVmFsdWUg
PSB7IH07CiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Ci0gICAgICAg
IHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSgpOworICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9QaXhlbEJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJl
dHVyblZhbHVlKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3MjU1KQor
KysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIg
OiBwdWJsaWMgV2ViQ29yZQogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2Vi
Q29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6Om1fYmFja2VuZDsKLSAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6cHV0
SW1hZ2VEYXRhOworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1
ZmZlcjsKIAogcHVibGljOgogICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0
LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQpAQCAtNzYsMTYgKzc2LDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBhcHBseShX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS5pczxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpKSB7Ci0gICAgICAgICAgICBhdXRvJiBn
ZXRJbWFnZURhdGFJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdl
RGF0YT4oKTsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBnZXRJ
bWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7Ci0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQucG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoaW1hZ2VEYXRhLmdldCgpKTsK
KyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVsQnVmZmVy
PigpKSB7CisgICAgICAgICAgICBhdXRvJiBnZXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KCk7CisgICAgICAgICAgICBhdXRv
IHBpeGVsQnVmZmVyID0gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyKGdl
dFBpeGVsQnVmZmVySXRlbS5vdXRwdXRGb3JtYXQoKSwgZ2V0UGl4ZWxCdWZmZXJJdGVtLnNyY1Jl
Y3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucG9wdWxhdGVHZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShXVEZNb3ZlKHBpeGVsQnVmZmVyKSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHB1dElt
YWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRh
PigpOwotICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRGb3Jt
YXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5zcmNS
ZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVz
dEZvcm1hdCgpKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1
dFBpeGVsQnVmZmVyPigpKSB7CisgICAgICAgICAgICBhdXRvJiBwdXRQaXhlbEJ1ZmZlckl0ZW0g
PSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KCk7CisgICAg
ICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1ZmZlckl0ZW0uaW5wdXRGb3JtYXQoKSwg
cHV0UGl4ZWxCdWZmZXJJdGVtLnBpeGVsQnVmZmVyKCksIHB1dFBpeGVsQnVmZmVySXRlbS5zcmNS
ZWN0KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0UG9pbnQoKSwgcHV0UGl4ZWxCdWZmZXJJdGVt
LmRlc3RGb3JtYXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxNSw2NSArMzE1LDY1IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6c2V0TmV4dEl0ZW0KICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3t7IGlkZW50aWZp
ZXIsIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksIGRlc3RpbmF0aW9uSWRl
bnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQgfSwgV1RGOjpudWxs
b3B0IH19OwogfQogCi1PcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKHNp
emVfdCBieXRlQ291bnQpCitPcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxw
ZXIoc2l6ZV90IGJ5dGVDb3VudCkKIHsKLSAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZB
TFVFKCFtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSB8fCBieXRlQ291bnQgPiBtX2dldEltYWdl
RGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCBXVEY6Om51bGxvcHQsICJUaGUgZXhpc3RpbmcgU2ht
ZW0gZm9yIGdldEltYWdlRGF0YSgpIGlzIGFscmVhZHkgYmlnIGVub3VnaCB0byBoYW5kbGUgdGhl
IHJlcXVlc3QiKTsKKyAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFtX2dldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5IHx8IGJ5dGVDb3VudCA+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFy
ZWRNZW1vcnktPnNpemUoKSwgV1RGOjpudWxsb3B0LCAiVGhlIGV4aXN0aW5nIFNobWVtIGZvciBn
ZXRQaXhlbEJ1ZmZlcigpIGlzIGFscmVhZHkgYmlnIGVub3VnaCB0byBoYW5kbGUgdGhlIHJlcXVl
c3QiKTsKIAogICAgIGlmIChieXRlQ291bnQgPiA2NCAqIE1CKSB7CiAgICAgICAgIC8vIEp1c3Qg
YSBzYW5pdHkgY2hlY2suIEEgNEsgaW1hZ2UgaXMgMzZNQi4KICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICB9CiAKLSAgICBkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCk7
Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRl
KGJ5dGVDb3VudCk7CisgICAgZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCk7Cisg
ICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUo
Ynl0ZUNvdW50KTsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1l
bW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFk
T25seSk7Ci0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5k
bGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5LT5zaXplKCkgOiAwIH07CisgICAgaWYgKG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkp
CisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIHJldHVybiBTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgbV9nZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeSA/IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSA6IDAgfTsK
IH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVm
ZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hh
cmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVDb3VudCkpCisgICAgaWYgKGF1dG8g
aGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoYnl0ZUNv
dW50KSkKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUudmFsdWUoKSkp
OwogICAgIGVsc2UKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAotdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZl
cihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOworICAgIGNvbXBsZXRpb25I
YW5kbGVyKG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwogfQogCi12b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0
YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlB
bmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6
OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5
Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVDb3VudCkpCi0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUoaGFuZGxlLnZhbHVlKCkpLCBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7Cisg
ICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJI
ZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5k
bGUudmFsdWUoKSksIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwogICAgIGVsc2UKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoeyB9LCBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSk7CiB9
CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeSgpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRQaXhlbEJ1
ZmZlclNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBu
dWxscHRyOworICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxscHRyOwogfQog
Ci12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5KFdlYkNvcmU6OkltYWdlRGF0YSogaW1hZ2VEYXRhKQordm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpwb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KE9wdGlvbmFsPFdl
YkNvcmU6OlBpeGVsQnVmZmVyPiYmIHBpeGVsQnVmZmVyKQogewotICAgIE1FU1NBR0VfQ0hFQ0so
bV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnksICJXZSBjYW4ndCBydW4gZ2V0SW1hZ2VEYXRhIHdp
dGhvdXQgYSBidWZmZXIgdG8gd3JpdGUgaW50byIpOworICAgIE1FU1NBR0VfQ0hFQ0sobV9nZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRQaXhlbEJ1ZmZlciB3aXRo
b3V0IGEgYnVmZmVyIHRvIHdyaXRlIGludG8iKTsKIAotICAgIGlmIChpbWFnZURhdGEpIHsKLSAg
ICAgICAgTUVTU0FHRV9DSEVDSyhpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCkgPD0gbV9n
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4gb2YgZ2V0
SW1hZ2VEYXRhIGlzIHRvbyBzbWFsbCIpOwotICAgICAgICBtZW1jcHkobV9nZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBpbWFnZURhdGEt
PmRhdGEoKS5ieXRlTGVuZ3RoKCkpOworICAgIGlmIChwaXhlbEJ1ZmZlcikgeworICAgICAgICBN
RVNTQUdFX0NIRUNLKHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgpIDw9IG1fZ2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4gb2YgZ2V0UGl4
ZWxCdWZmZXIgaXMgdG9vIHNtYWxsIik7CisgICAgICAgIG1lbWNweShtX2dldFBpeGVsQnVmZmVy
U2hhcmVkTWVtb3J5LT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpLCBwaXhlbEJ1
ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1lbXNldCht
X2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgbWVtc2V0KG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnktPmRhdGEoKSwgMCwgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+c2l6ZSgpKTsK
IAotICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlLnNpZ25hbCgpOworICAgIG1fZ2V0UGl4ZWxC
dWZmZXJTZW1hcGhvcmUuc2lnbmFsKCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC01MjEsOCArNTIxLDggQEAgT3B0aW9uYWw8RGlzcGxheUxp
c3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVQogICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dDoKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3Jl
YXRlPERpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRp
b24pOworICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwogICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKQEAgLTU4MSw3ICs1ODEsNyBA
QCBPcHRpb25hbDxEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VCiAgICAgY2FzZSBEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5z
bGF0ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOiB7Cisg
ICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOiB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZXh0SXRlbUJ1ZmZlclRvUmVh
ZChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbik7CiAKLSAgICB2b2lkIHBvcHVs
YXRlR2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KFdlYkNvcmU6OkltYWdlRGF0YSopOworICAgIHZv
aWQgcG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShPcHRpb25hbDxXZWJDb3JlOjpQ
aXhlbEJ1ZmZlcj4mJik7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNzdXJl
KCkgY29uc3Q7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgc3VibWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbik7CiAgICAg
UmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZlckFm
dGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGluaXRpYWxEZXN0
aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVhZGVySGFuZGxlJiwg
R1BVUHJvY2Vzc1dha2V1cFJlYXNvbik7CiAKLSAgICBPcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZT4gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKHNpemVfdCBi
eXRlQ291bnQpOworICAgIE9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRhdGVT
aGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KTsKICAg
ICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNlUmVxdWVzdCgpOwogCiAgICAgLy8gSVBDOjpN
ZXNzYWdlU2VuZGVyLgpAQCAtMTIzLDEwICsxMjMsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBNZXNz
YWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBXZWJD
b3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
ICAgICB2b2lkIHdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dha2V1
cE1lc3NhZ2VBcmd1bWVudHMmKTsKLSAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldElt
YWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7Ci0gICAgdm9pZCBzZW1hcGhvcmVGb3JHZXRJ
bWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYm
KTsKLSAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0
YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKLSAgICB2b2lk
IGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKKyAgICB2b2lk
IHNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
SVBDOjpTZW1hcGhvcmUmKT4mJik7CisgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1h
cGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFw
aG9yZSYpPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgp
OwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9u
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKQEAgLTE2MSw4ICsxNjEsOCBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQ
dHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxlczsK
ICAgICBPcHRpb25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24+IG1fcGVuZGluZ1dha2V1cElu
Zm87CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsKLSAg
ICBJUEM6OlNlbWFwaG9yZSBtX2dldEltYWdlRGF0YVNlbWFwaG9yZTsKLSAgICBSZWZQdHI8U2hh
cmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsKKyAgICBJUEM6OlNlbWFwaG9y
ZSBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1f
Z2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7CiAgICAgU2NvcGVkUmVuZGVyaW5nUmVzb3VyY2Vz
UmVxdWVzdCBtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMCBAQAogbWVzc2FnZXMgLT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6
RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UsIGVudW06dWludDhfdCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1h
dCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKICAgICBXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KHN0cnVjdCBXZWJLaXQ6
OkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzIGFyZ3VtZW50cykKLSAgICBVcGRhdGVT
aGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCi0gICAgU2VtYXBo
b3JlRm9yR2V0SW1hZ2VEYXRhKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hy
b25vdXMKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEo
dWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBo
YW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKLSAgICBEZXN0cm95
R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQ
aXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKKyAgICBTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1
ZmZlcigpIC0+IChJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAgVXBk
YXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0
ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIElQQzo6
U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKKyAgICBEZXN0cm95R2V0UGl4ZWxCdWZm
ZXJTaGFyZWRNZW1vcnkoKQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJpbmcg
dXJsU3RyaW5nKSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJpbmcg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1
aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lv
biAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE0LDc3ICszMTE0LDYgQEAgT3B0aW9uYWw8V2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpNZQogfQogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURf
TUVESUEpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci12b2lkIEFyZ3VtZW50Q29kZXI8
UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4mIGltYWdlRGF0YSkKLXsKLSAgICBlbmNvZGVyIDw8IGlt
YWdlRGF0YS0+c2l6ZSgpOwotCi0gICAgYXV0byYgcmF3RGF0YSA9IGltYWdlRGF0YS0+ZGF0YSgp
OwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0RhdGEuYnl0ZUxlbmd0
aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLmRhdGEoKSwg
cmF3RGF0YS5ieXRlTGVuZ3RoKCksIDEpOwotfQotCi10ZW1wbGF0ZQotdm9pZCBBcmd1bWVudENv
ZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXImLCBj
b25zdCBSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotdGVtcGxhdGUKLXZvaWQgQXJndW1lbnRD
b2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9uRW5j
b2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBjb25zdCBSZWY8V2ViQ29yZTo6SW1hZ2VE
YXRhPiYpOwotCi1PcHRpb25hbDxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gQXJndW1lbnRDb2Rl
cjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPEludFNpemU+IGltYWdlRGF0YVNpemU7Ci0gICAgZGVjb2RlciA+PiBpbWFn
ZURhdGFTaXplOwotICAgIGlmICghaW1hZ2VEYXRhU2l6ZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBkYXRhTGVuZ3RoOwotICAgIGRlY29k
ZXIgPj4gZGF0YUxlbmd0aDsKLSAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvIHJhd0RhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCgqZGF0YUxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZp
eGVkTGVuZ3RoRGF0YShyYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPmxlbmd0aCgpLCAxKSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VE
YXRhOjpjcmVhdGUoKmltYWdlRGF0YVNpemUsIFdURk1vdmUocmF3RGF0YSkpOwotICAgIGlmICgh
aW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHsg
aW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxsKCkgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYg
aW1hZ2VEYXRhKQotewotICAgIGlmICghaW1hZ2VEYXRhKSB7Ci0gICAgICAgIGVuY29kZXIgPDwg
ZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0g
ICAgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZShlbmNvZGVy
LCBpbWFnZURhdGEuY29weVJlZigpLnJlbGVhc2VOb25OdWxsKCkpOwotfQotCi10ZW1wbGF0ZQot
dm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlKEVu
Y29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotCi10ZW1wbGF0ZQot
dm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlKFN0
cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4m
KTsKLQotT3B0aW9uYWw8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+IEFyZ3VtZW50Q29kZXI8
UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBib29sIGlzRW5nYWdlZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5nYWdlZCkp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIWlzRW5nYWdlZCkKLSAg
ICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9OwotCi0gICAgYXV0byByZXN1bHQgPSBBcmd1bWVudENv
ZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZGVjb2RlKGRlY29kZXIpOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiB7IFdURk1v
dmUoKnJlc3VsdCkgfTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxFKFdF
QkdMKQogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlclR5cGVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0luZGV4ZWREQi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRNb2Rl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgpAQCAtODA0LDE4
ICs4MDMsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiB9Owog
I2VuZGlmCiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6
OkltYWdlRGF0YT4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4m
KTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+IGRlY29k
ZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZjxX
ZWJDb3JlOjpJbWFnZURhdGE+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KLSAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFJlZjxXZWJDb3JlOjpJbWFnZURh
dGE+Jik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+PiBkZWNv
ZGUoRGVjb2RlciYpOwotfTsKLQogI2lmIEhBVkUoUEFTU0tJVF9JTlNUQUxMTUVOVFMpCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENv
bmZpZ3VyYXRpb24+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdl
YkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb24mKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRy
ZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lm
IEVOQUJMRShDR19ESVNQTEFZX0xJU1RfQkFDS0VEX0lNQUdFX0JVRkZFUikKIAogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BpeGVsQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViS2l0QWRk
aXRpb25zL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckFkZGl0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTEwNSwxMyArMTA1LDEzIEBAIFZlY3Rvcjx1aW50
OF90PiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIKICAgICByZXR1cm4geyB9OwogfQogCi1SZWZQ
dHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpn
ZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcj4gQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXZvaWQgQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIENHRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24sIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
U2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJh
Y2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgLy8g
Tk9URTogVGhlc2UgYWxsIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIFJlZlB0cjxXZWJDb3Jl
OjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkg
PSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6V2ViQ29yZTo6UGl4ZWxCdWZm
ZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBl
ckxlZnRDb3JuZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BpeGVsQnVm
ZmVyLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKQEAgLTE2MywxNCArMTYzLDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0
b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09w
dGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6Omdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fYml0bWFwLT5kYXRhKCkpOwor
ICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1h
dCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1
dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fYml0
bWFwLT5kYXRhKCkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5w
dXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1f
Yml0bWFwLT5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDYg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg+CiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbWFn
ZURhdGE7Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBTaGFyZWFibGVCaXRtYXA7
CkBAIC02Myw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNv
cHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdT
dG9yZSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNv
bHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGdl
dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4
ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcAkocmV2aXNpb24gMjc3MjU1
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnQKIAogICAgIC8vIEZJWE1FOiBX
ZSBjYW5ub3Qgc3luY2hyb25pemUgc28gdGhhdCB3ZSB3b3VsZCBrbm93IG5vIHBlbmRpbmcgb3Bl
cmF0aW9ucyBhcmUgdXNpbmcgdGhlIGBidWZmZXJgLgogCi0gICAgLy8gRklYTUU6IEN1cnJlbnRs
eSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpnZXRJbWFnZURhdGEgZXQgYWwgZG8gbm90IHdhaXQg
Zm9yIHRoZSBmbHVzaGVzIG9mIHRoZSBpbWFnZXMKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5IFJl
bW90ZUltYWdlQnVmZmVyUHJveHk6OmdldFBpeGVsQnVmZmVyIGV0IGFsIGRvIG5vdCB3YWl0IGZv
ciB0aGUgZmx1c2hlcyBvZiB0aGUgaW1hZ2VzCiAgICAgLy8gaW5zaWRlIHRoZSBkaXNwbGF5IGxp
c3RzLiBSYXRoZXIsIGl0IGFzc3VtZXMgdGhhdCBwcm9jZXNzaW5nIGl0cyBzZXF1ZW5jZSAoZS5n
LiB0aGUgZGlzcGxheSBsaXN0KSB3aWxsIGVxdWFsIHRvIHJlYWQgZmx1c2ggYmVpbmcKICAgICAv
LyBmdWxmaWxsZWQuIEZvciBiZWxvdywgd2UgY2Fubm90IGNyZWF0ZSBhIG5ldyBmbHVzaCBpZCBz
aW5jZSB3ZSBnbyB0aHJvdWdoIGRpZmZlcmVudCBzZXF1ZW5jZSAoUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0wgc2VxdWVuY2UpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQ
cm94eS5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE1LDcgKzMxNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG11bHRpRHJhd0FycmF5c0luc3Rh
bmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0cywg
R0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXpl
aT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIGZpbmFsOwogICAgIHZvaWQg
bXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dM
c2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zm
c2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgZmluYWw7CiAgICAgdm9pZCBtdWx0aURyYXdFbGVt
ZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXpl
aT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZzZXRz
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkgZHJh
d2NvdW50KSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpIGZpbmFsOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBp
eGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAg
ICAgLy8gRW5kIG9mIGxpc3QgdXNlZCBieSBnZW5lcmF0ZS1ncHVwLXdlYmdsIHNjcmlwdC4KIAog
cHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzY2LDExICsyMzY2LDExIEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bXVs
dGkKICAgICB9CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK09wdGlv
bmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5Ojpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKIHsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2VEYXRhPiByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQ
aXhlbEJ1ZmZlcj4gcmV0dXJuVmFsdWUgPSB7IH07CiAgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkp
IHsKLSAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpLCBNZXNz
YWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyOjpSZXBseShyZXR1cm5WYWx1ZSkp
OwogICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCiAgICAgICAgICAgICBtYXJrQ29udGV4dExvc3Qo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwzOCArMTk0LDM4IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+
IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAg
IHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6OmNy
ZWF0ZShzcmNSZWN0LnNpemUoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IGltYWdlRGF0YS0+
ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFdlYkNvcmU6
OlBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhl
bEZvcm1hdDo6UkdCQTgsIHNyY1JlY3Quc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHNpemVfdCBkYXRh
U2l6ZSA9IHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOwogCiAgICAgICAgIElQQzo6
VGltZW91dCB0aW1lb3V0ID0gNV9zOwotICAgICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9y
eSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFyZWRNZW1vcnlGb3JHZXRJbWFn
ZURhdGEoZGF0YVNpemUsIHRpbWVvdXQpOworICAgICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1l
bW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFyZWRNZW1vcnlGb3JHZXRQ
aXhlbEJ1ZmZlcihkYXRhU2l6ZSwgdGltZW91dCk7CiAgICAgICAgIGlmICghc2hhcmVkTWVtb3J5
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5Jj4oKnRoaXMpOwotICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdpbmdD
b250ZXh0LnJlY29yZGVyKCkuZ2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7Cisg
ICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRQaXhlbEJ1
ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOwogICAgICAgICBtdXRhYmxlVGhpcy5mbHVzaERy
YXdpbmdDb250ZXh0QXN5bmMoKTsKIAotICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHktPndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKHRpbWVvdXQpKQotICAgICAg
ICAgICAgbWVtY3B5KGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRh
KCksIGRhdGFTaXplKTsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT53YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKHRpbWVvdXQpKQorICAgICAgICAgICAg
bWVtY3B5KHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwg
ZGF0YVNpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1zZXQoaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpLCAwLCBkYXRhU2l6ZSk7Ci0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgICAgICAgICBtZW1zZXQocGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCksIDAsIGRhdGFTaXpl
KTsKKyAgICAgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBXZWJDb3Jl
OjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQorICAgIHZvaWQgcHV0UGl4ZWxC
dWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
V2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
Ly8gVGhlIG1hdGggaW5zaWRlIEltYWdlRGF0YTo6Y3JlYXRlKCkgZG9lc24ndCBhZ3JlZSB3aXRo
IHRoZSBtYXRoIGluc2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSgpIGFib3V0
IGhvdyBtX3Jlc29sdXRpb25TY2FsZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBpbiB0aGUgSW1h
Z2VCdWZmZXIuCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBwdXRJbWFnZURhdGEoKSBpcyBv
bmx5IGNhbGxlZCB3aGVuIHJlc29sdXRpb25TY2FsZSgpID09IDEuCisgICAgICAgIC8vIFRoZSBt
YXRoIGluc2lkZSBQaXhlbEJ1ZmZlcjo6Y3JlYXRlKCkgZG9lc24ndCBhZ3JlZSB3aXRoIHRoZSBt
YXRoIGluc2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKCkgYWJvdXQgaG93
IG1fcmVzb2x1dGlvblNjYWxlIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIGluIHRoZSBJbWFnZUJ1
ZmZlci4KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHB1dFBpeGVsQnVmZmVyKCkgaXMgb25s
eSBjYWxsZWQgd2hlbiByZXNvbHV0aW9uU2NhbGUoKSA9PSAxLgogICAgICAgICBBU1NFUlQocmVz
b2x1dGlvblNjYWxlKCkgPT0gMSk7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIo
KS5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dFBp
eGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBk
ZXN0Rm9ybWF0KTsKICAgICB9CiAKICAgICBib29sIHByZWZlcnNQcmVwYXJhdGlvbkZvckRpc3Bs
YXkoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MCw1MCArMTUwLDUwIEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
UmVtb3RlUmVuZGVyaW5nQmFja2UKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotU2hhcmVkTWVt
b3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZvckdldEltYWdl
RGF0YShzaXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCB0aW1lb3V0KQorU2hhcmVkTWVtb3J5
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVm
ZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0IHRpbWVvdXQpCiB7CiAgICAgc2VuZERl
ZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKLSAgICBib29sIG5lZWRzU2hhcmVkTWVt
b3J5ID0gIW1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IHx8IGRhdGFTaXplID4gbV9nZXRJbWFn
ZURhdGFTaGFyZWRNZW1vcnlMZW5ndGg7Ci0gICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dl
dEltYWdlRGF0YVNlbWFwaG9yZTsKKyAgICBib29sIG5lZWRzU2hhcmVkTWVtb3J5ID0gIW1fZ2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldFBpeGVsQnVmZmVyU2hh
cmVkTWVtb3J5TGVuZ3RoOworICAgIGJvb2wgbmVlZHNTZW1hcGhvcmUgPSAhbV9nZXRQaXhlbEJ1
ZmZlclNlbWFwaG9yZTsKIAogICAgIGlmIChuZWVkc1NoYXJlZE1lbW9yeSkKLSAgICAgICAgbV9n
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBudWxscHRyOworICAgICAgICBtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKIAogICAgIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
IGhhbmRsZTsKICAgICBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmU7CiAKICAgICBpZiAobmVlZHNT
aGFyZWRNZW1vcnkgJiYgbmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVG
b3JHZXRJbWFnZURhdGEoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhOjpSZXBseSho
YW5kbGUsIHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQs
IElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7
CisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRh
dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1h
cGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxlLCBzZW1hcGhvcmUpLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWlu
dGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOwogICAgIGVsc2UgaWYgKG5lZWRzU2hhcmVk
TWVtb3J5KQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGRhdGFTaXplKSwgTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0
YTo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwg
SVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsK
KyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0
ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyOjpS
ZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6
OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOwogICAg
IGVsc2UgaWYgKG5lZWRzU2VtYXBob3JlKQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKCksIE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5
KHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQpOworICAg
ICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3Jl
Rm9yR2V0UGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNl
bWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShzZW1hcGhvcmUpLCByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0KTsKIAogICAgIGlmICghaGFuZGxlLmhhbmRsZS5pc051
bGwoKSkgewotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkp
OwotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeUxlbmd0aCA9IGhhbmRsZS5kYXRh
U2l6ZTsKKyAgICAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkp
OworICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3RoID0gaGFuZGxlLmRh
dGFTaXplOwogICAgIH0KICAgICBpZiAobmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIG1fZ2V0SW1h
Z2VEYXRhU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUpOworICAgICAgICBtX2dldFBpeGVs
QnVmZmVyU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUpOwogCi0gICAgaWYgKG1fZGVzdHJv
eUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fZGVz
dHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLnN0b3AoKTsKLSAgICBtX2Rlc3Ryb3lH
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lci5zdGFydE9uZVNob3QoNV9zKTsKKyAgICBpZiAo
bV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLnN0b3AoKTsKKyAg
ICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLnN0YXJ0T25lU2hvdCg1
X3MpOwogCi0gICAgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LmdldCgpOworICAg
IHJldHVybiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LmdldCgpOwogfQogCi1ib29sIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUo
SVBDOjpUaW1lb3V0IHRpbWVvdXQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdGltZW91dCkKIHsK
LSAgICBBU1NFUlQobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOwotICAgIHJldHVybiBtX2dldElt
YWdlRGF0YVNlbWFwaG9yZS0+d2FpdEZvcih0aW1lb3V0KTsKKyAgICBBU1NFUlQobV9nZXRQaXhl
bEJ1ZmZlclNlbWFwaG9yZSk7CisgICAgcmV0dXJuIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUt
PndhaXRGb3IodGltZW91dCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkKK3ZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKQogewotICAg
IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
KCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0
Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCiBTdHJpbmcgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
CShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIGNsYXNzIERpc3BsYXlMaXN0OwogY2xhc3MgSXRlbTsKIH0KIGNsYXNzIEZsb2F0
U2l6ZTsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogZW51bSBjbGFzcyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIDogdWludDhfdDsKIGVudW0gY2xhc3MgRGVzdGluYXRpb25D
b2xvclNwYWNlIDogdWludDhfdDsKIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CkBA
IC03OCw5ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZW5kRGVmZXJyZWRXYWtl
dXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5Rm9y
R2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsKLSAgICBib29sIHdh
aXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKElQQzo6VGltZW91dCk7Ci0gICAgdm9pZCBkZXN0
cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCk7CisgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRN
ZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihzaXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCk7Cisg
ICAgYm9vbCB3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCk7Cisg
ICAgdm9pZCBkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKTsKIAogICAgIC8vIElQ
Qzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzYsMTAgKzEzNiwxMCBAQCBwcml2YXRlOgog
ICAgIE9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9jdXJy
ZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXI7CiAgICAgT3B0aW9uYWw8R1BVUHJv
Y2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHM+IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJndW1l
bnRzOwogICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRpbmdX
YWtldXAgeyAwIH07Ci0gICAgT3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0SW1hZ2VEYXRh
U2VtYXBob3JlOwotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5OwotICAgIHVpbnQ2NF90IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5TGVuZ3RoIHsg
MCB9OwotICAgIFdlYkNvcmU6OlRpbWVyIG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9y
eVRpbWVyIHsgKnRoaXMsICZSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnkgfTsKKyAgICBPcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4gbV9n
ZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5OworICAgIHVpbnQ2NF90IG1fZ2V0UGl4ZWxCdWZmZXJTaGFy
ZWRNZW1vcnlMZW5ndGggeyAwIH07CisgICAgV2ViQ29yZTo6VGltZXIgbV9kZXN0cm95R2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lciB7ICp0aGlzLCAmUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfTsKICAgICBXZWFrUHRy
PEdQVVByb2Nlc3NDb25uZWN0aW9uPiBtX2dwdVByb2Nlc3NDb25uZWN0aW9uOwogfTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTMgKzEyMCwxMyBAQCBWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0CitP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKK3ZvaWQg
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2Nv
YS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCAr
NjAsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2lu
dCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVs
QnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0
VXBwZXJMZWZ0Q29ybmVyID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgY2FuTWFw
QmFja2luZ1N0b3JlID0gZmFsc2U7Cg==
</data>
<flag name="commit-queue"
          id="448984"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428151</attachid>
            <date>2021-05-09 20:15:01 -0700</date>
            <delta_ts>2021-05-10 10:17:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225584-20210509201500.patch</filename>
            <type>text/plain</type>
            <size>226372</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBAQAorMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhl
ciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIHVzZSBvZiB0aGUgRE9NIGxheWVyICYgcmVmLWNvdW50ZWQgSW1hZ2VEYXRhIGNsYXNzIHdp
dGggdGhlIG5ldyAKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgUGl4ZWxCdWZmZXIgY2xhc3MsIHdo
aWNoIEltYWdlRGF0YSBub3cgdXNlcyBpbnRlcm5hbGx5LgorCisgICAgICAgIFNpbmNlIFBpeGVs
QnVmZmVyIGlzIG5vdC1yZWZlcmVuY2UgY291bnRlZCBvciBoZWFwLWFsbG9jYXRlZCBpbiBtb3N0
IGNhc2VzLAorICAgICAgICBtYW55IHVzZXMgb2YgUmVmUHRyPEltYWdlRGF0YT4gdG8gaW5kaWNh
dGUgYSBwb3RlbnRpYWxseSBudWxsIEltYWdlRGF0YSBoYXZlCisgICAgICAgIGJlZW4gcmVwbGFj
ZWQgd2l0aCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4uIEdlbmVyYWxseSwgdGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gdGhhdCB3YXMgb25s
eSBuZWVkZWQgZm9yIHRoZSBET00gb2JqZWN0LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdG8g
bWFueSBmdW5jdGlvbnMgd2l0aCBJbWFnZURhdGEgaW4gdGhlaXIgbmFtZSBub3cgaGF2ZQorICAg
ICAgICBQaXhlbEJ1ZmZlciBpbiB0aGVpciBuYW1lIGluc3RlYWQsIGUuZy4gSW1hZ2VCdWZmZXI6
OmdldEltYWdlRGF0YSBpcyBub3cKKyAgICAgICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
ICh0aG91Z2ggSSB0aGluayBjaGFuZ2luZyB0aGlzIGluIHRoZSBmdXR1cmUgdG8gCisgICAgICAg
IEltYWdlQnVmZmVyOjpjb3B5UGl4ZWxCdWZmZXIgaXMgYSBnb29kIGlkZWEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ltYWdl
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpwaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0UGl4ZWxCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQnVmZmVyU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBl
bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpk
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZl
Q29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNp
emVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdp
bmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpQdXRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQ
dXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6OkdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcjo6cGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YTo6R2V0SW1hZ2VEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE6Om91
dHB1dEZvcm1hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0SW1hZ2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmlucHV0Rm9ybWF0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE6OmRlc3RQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZXN0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
RGF0YVRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0
c0ZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgcHJvdGVjdGlvbiBv
ZiB0aGUgcGl4ZWwgYnVmZmVyIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSByZW1v
dmVkIGluIHIyNzcyMzcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3NiwxMyArMTA3NiwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSB9KTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgaWYg
KCFwaXhlbEJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFy
ZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHBpeGVsQnVmZmVyLT5kYXRh
KCkucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewog
ICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJy
b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTUwLDYgKzMxNTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICBJbnRTaXplIGltYWdlRGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKICAgICAgICAgaW1h
Z2VEYXRhU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBD
cmVhdGluZyB0aGlzIEltYWdlRGF0YSBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgc2tpcCBy
aWdodCB0byBjcmVhdGluZyBhIFBpeGVsQnVmZmVyIGRpcmVjdGx5LgogICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVNpemUsIGFycmF5LnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgZmFpbCgp
OwpAQCAtMzE2Miw3ICszMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6
ZXJvKCksIGxvZ2ljYWxTaXplIH0pOworICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZm
ZXIoKSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRv
IGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
YnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXph
dGlvblN0YXRlKSkpOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsNyArNzQzLDcgQEAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhU
TUxDYW52YXNFbAogI2lmIFVTRShDRykKICAgICAvLyBUcnkgdG8gZ2V0IEltYWdlRGF0YSBmaXJz
dCwgYXMgdGhhdCBtYXkgYXZvaWQgbG9zc3kgY29udmVyc2lvbnMuCiAgICAgaWYgKGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBVbmNhY2hlZFN0cmluZyB7
IGRhdGFVUkwoKmltYWdlRGF0YSwgZW5jb2RpbmdNSU1FVHlwZSwgcXVhbGl0eSkgfTsKKyAgICAg
ICAgcmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgZGF0YVVSTChpbWFnZURhdGEtPnBpeGVsQnVmZmVy
KCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpIH07CiAjZW5kaWYKIAogICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC03NzQsNyArNzc0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIFVTRShDRykKICAgICBpZiAoYXV0byBp
bWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYjsK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0gZGF0YSgqaW1hZ2VEYXRhLCBlbmNv
ZGluZ01JTUVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRh
ID0gZGF0YShpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxp
dHkpOwogICAgICAgICBpZiAoIWJsb2JEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJsb2Ig
PSBCbG9iOjpjcmVhdGUoJmRvY3VtZW50KCksIFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01J
TUVUeXBlKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgV1RG
TW92ZShibG9iKSk7CkBAIC04MTIsNyArODEyLDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldAogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2Nv
bnRleHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVy
biBJbWFnZURhdGE6OmNyZWF0ZShkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
bV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJp
dG1hcC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDYsMTAgKzgwNiw5IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyBJZiBubyBjcm9wcGluZywgcmVz
aXppbmcsIGZsaXBwaW5nLCBldGMuIGFyZSBuZWVkZWQsIHRoZW4gc2ltcGx5IHVzZSB0aGUKICAg
ICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBhbHBoYVByZW11
bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEo
b3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKLSAgICBpZiAoc291cmNlUmVjdGFuZ2xlLnJldHVy
blZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJuVmFs
dWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkKLSAgICAgICAgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUKLSAgICAgICAgJiYgb3B0aW9u
cy5pbWFnZU9yaWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5v
bmUpIHsKLSAgICAgICAgYml0bWFwRGF0YS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIGlmIChz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5sb2NhdGlvbigpLmlzWmVybygpICYmIHNvdXJj
ZVJlY3RhbmdsZS5yZXR1cm5WYWx1ZSgpLnNpemUoKSA9PSBpbWFnZURhdGEtPnNpemUoKSAmJiBz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZSAmJiBvcHRp
b25zLmltYWdlT3JpZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6
Tm9uZSkgeworICAgICAgICBiaXRtYXBEYXRhLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgc291
cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworICAgICAgICAKICAgICAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSkpOwogICAgICAgICAvLyBUaGUgcmVz
dWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRp
b24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgICAgICBwcm9taXNlLnJlc29sdmUoV1RG
TW92ZShpbWFnZUJpdG1hcCkpOwpAQCAtODIzLDcgKzgyMiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6
OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVm
ZmVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRydWUsIFdURk1vdmUocHJvbWlzZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHRlbXBCaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRSZWN0
KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgdGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhLT5waXhl
bEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGVtcEJpdG1hcERhdGEsIGRlc3RSZWN0LCBzb3VyY2VSZWN0
YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNp
emVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmll
bnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIxICs0MywxNiBAQCBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gSW1hZ2VECiAgICAgcmV0dXJuIGNoZWNrZWREYXRh
U2l6ZTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgaWYgKCFzdyB8fCAhc2gpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIEludFNpemUg
c2l6ZShzdywgc2gpOwotICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNp
emUpOwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoaXMg
c2l6ZSJfcyB9OwotICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOwotICAgIGlmICghYnl0ZUFy
cmF5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhICJyZWFsIiBv
dXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxsZWQgb24gaXQ/
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9mIG1lbW9yeSJf
cyB9OwotICAgIH0KLSAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoV1RGTW92ZShwaXhlbEJ1ZmZlcikpKTsKK30K
KworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKFdURk1vdmUoKnBpeGVs
QnVmZmVyKSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC04MCw2ICs3NSwyMyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZURhdGE6OmNyZWF0ZShjb25zCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdU
Rk1vdmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKK0V4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJ
bWFnZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCit7CisgICAgaWYgKCFz
dyB8fCAhc2gpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owor
ICAgIEludFNpemUgc2l6ZShzdywgc2gpOworICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6
OmRhdGFTaXplKHNpemUpOworICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVm
ZmVyIG9mIHRoaXMgc2l6ZSJfcyB9OworICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOworICAg
IGlmICghYnl0ZUFycmF5KSB7CisgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBi
ZSBhICJyZWFsIiBvdXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBj
YWxsZWQgb24gaXQ/CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0
IG9mIG1lbW9yeSJfcyB9OworICAgIH0KKyAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgp
IH0pKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25h
bDx1bnNpZ25lZD4gc2gpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5n
dGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZURhdGE+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWdu
ZWQgc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SW1hZ2VEYXRhPiBjcmVhdGUo
UGl4ZWxCdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQg
c2gpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gY3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFs
PHVuc2lnbmVkPiBzaCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCkBAIC01
Miw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CiAgICAgUGl4
ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsg
fQogCisgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbEJ1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlRGF0YShQaXhl
bEJ1ZmZlciYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDE0ICsyMTk5LDE0IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAot
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKLSAgICBpZiAoIWltYWdl
RGF0YSkgeworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBidWZmZXItPmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7Cisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8g
Z2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURh
dGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJl
dHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIHsgeyBJbWFnZURhdGE6OmNyZWF0ZShXVEZNb3Zl
KCpwaXhlbEJ1ZmZlcikpIH0gfTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBpbnQgZHgsIGludCBkeSkKQEAgLTIy
NDYsNyArMjI0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW0K
ICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBk
YXRhLmhlaWdodCgpIH0pOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAg
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVz
dE9mZnNldCB9KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzYsMTIgKzEy
MzYsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbgogICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKmJhc2UuYnVmZmVyKCkpOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoQ2xlYXJDYWxsZXJPdGhlcik7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4dHVyZUV4dGVuc2lvbkZs
YWdzKCkgY29uc3QKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgogICAgICAg
ICAgICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC0+ZXh0cmFjdFBpeGVsQnVmZmVyKHBpeGVscy0+cGl4ZWxCdWZmZXIoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBhZGp1c3RlZFNvdXJjZUltYWdl
UmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlbW92ZVNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChX
ZWJHTENvbnRleHRPYmplY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNl
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VC
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b25jcmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMCwyMCArMjMwLDIwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAg
ICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzY0LDEyICs3NjQsMTAgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRh
LCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGlu
dCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFn
ZURhdGEtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IHBpeGVsQnVmZmVyLnNpemUoKS53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBwaXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICB1bnNpZ25lZCBwYWNrZWRTaXplOwogICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCkBAIC03NzksNyArNzc3LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0
YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFn
ZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9O
b3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhwaXhlbEJ1
ZmZlci5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFP
cDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBF
eHRlbnNpb25zR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEFWRk9VTkRBVElPTikKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1Y7CkBAIC0xMjkyLDcg
KzEyOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSBidWZmZXIgYWJzdHJhY3Rpb25zIHRo
YXQgdGhlIGNhbGxlciBzaG91bGQgaG9sZCBzZXBhcmF0ZSB0bwogICAgIC8vIHRoZSBjb250ZXh0
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpID0gMDsK
IAogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgbGF5ZXIgc2hvdWxk
IGJlIG1hcmtlZCBjb21wb3NpdGVkIGJ5CkBAIC0xMzQzLDExICsxMzQzLDExIEBAIHB1YmxpYzoK
ICAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgogICAgIHN0
YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVp
IGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0
ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0
aGUgZ2l2ZW4gUGl4ZWxCdWZmZXIgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNr
aW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBl
LAogICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
cy4gUmV0dXJucyB0cnVlCiAgICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4
dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKICAgICAvLyBk
YXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
OCArMTI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MiwyMjcgKzYyLDIyNyBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
CiAgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwgc291
cmNlUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwot
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHNy
Y1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICB1aW50OF90IGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKICAgICAgICAg
aWYgKCFhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgdWludDhfdCByID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbE9mZnNldCArIDIpOwogCiAgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAotICAgIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2lu
dDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAog
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRh
KSBjb25zdAogewogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXplKCku
YXJlYSgpLnVuc2FmZUdldCgpKTsKLSAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbG9naWNh
bFNpemUoKS53aWR0aCgpICogNDsKLSAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdygpOworICAgIHNpemVfdCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUo
KS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc291cmNlQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOwogCi0gICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpOworICAgIHVpbnQ4X3QqIHNvdXJjZVJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKTsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxv
Z2ljYWxTaXplKCkpOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBwaXhlbEZvcm1hdCgpLCBzb3VyY2VCeXRlc1BlclJvdywgc291cmNlUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2ljYWxTaXpl
KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlQ
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCBj
b25zdCB1aW50OF90KiBzcmNQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVsRm9ybWF0LCB1aW50
OF90KiBkZXN0UGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90
KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAgaWYgKCFhbHBoYSkgewot
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7Cisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9
IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4ZWxGb3JtYXQgPT0g
ZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVs
KVswXTsKKyAgICBpZiAoc291cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhl
bClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlUGl4ZWwpWzBd
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgotICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOwotICAgIGRlc3RQ
aXhlbFsxXSA9IHNyY1BpeGVsWzFdOwotICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOwot
ICAgIGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0g
PSBzb3VyY2VQaXhlbFsyXTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gc291cmNlUGl4ZWxb
MV07CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IHNvdXJjZVBpeGVsWzBdOworICAgIGRlc3Rp
bmF0aW9uUGl4ZWxbM10gPSBzb3VyY2VQaXhlbFszXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNvdXJjZVBpeGVsRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1h
dCwgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCkKIHsKLSAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgdWludDhfdCBhbHBoYSA9IHNvdXJjZVBpeGVsWzNdOwogICAgIGlmICgh
YWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Ci0gICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKHNyY1BpeGVsRm9ybWF0LCBzcmNQaXhlbCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0
UGl4ZWwpOworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzb3VyY2VQ
aXhlbEZvcm1hdCwgc291cmNlUGl4ZWwsIGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0
aW9uUGl4ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyY1BpeGVsRm9y
bWF0ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICBpZiAoc291
cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkgeworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzJdID0gKHNvdXJjZVBpeGVsWzJdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxwaGE7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0g
ICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwotICAgIGRlc3RQ
aXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7
CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IChzb3VyY2VQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFs
cGhhOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMF0gKiAyNTUpIC8g
YWxwaGE7CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IGFscGhhOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChQaXhlbEZvcm1hdCBz
cmNQaXhlbEZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIFBpeGVsRm9ybWF0IGRlc3RQ
aXhlbEZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3Jt
YXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNQaXhlbFszXTsKKyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAg
ICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKLSAgICAgICAgY29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoc3JjUGl4ZWxGb3JtYXQsIHNyY1BpeGVsLCBkZXN0UGl4ZWxGb3Jt
YXQsIGRlc3RQaXhlbCk7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KHNvdXJjZVBpeGVsRm9ybWF0LCBzb3VyY2VQaXhlbCwgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwg
ZGVzdGluYXRpb25QaXhlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3Jj
UGl4ZWxGb3JtYXQgPT0gZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgIGlmIChzb3VyY2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0KSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSAoc291cmNlUGl4ZWxb
MF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAo
c291cmNlUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxbM10gPSBhbHBoYTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KLSAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291cmNlUGl4ZWxbMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IChzb3VyY2VQ
aXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0g
YWxwaGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQo
UGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVs
LCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsKQogewotICAgIGlmIChzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQpIHsK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgIGlmIChzb3Vy
Y2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVsRm9ybWF0KSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2VQaXhlbClbMF07CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAg
ZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Ci0gICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxb
MV07Ci0gICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07Ci0gICAgZGVzdFBpeGVsWzNdID0g
c3JjUGl4ZWxbM107CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOwor
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICBkZXN0aW5hdGlv
blBpeGVsWzJdID0gc291cmNlUGl4ZWxbMF07CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IHNv
dXJjZVBpeGVsWzNdOwogfQogCiB0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKFBpeGVsRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgUGl4ZWxGb3JtYXQsIHVpbnQ4X3QqKT4KIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAotICAgIFBpeGVsRm9ybWF0IHNy
Y1BpeGVsRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywK
LSAgICBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgUGl4ZWxGb3Jt
YXQgc291cmNlUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90
KiBzb3VyY2VSb3dzLAorICAgIFBpeGVsRm9ybWF0IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndp
ZHRoKCkgKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKLSAg
ICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY1BpeGVsRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdFBp
eGVsRm9ybWF0LCAmZGVzdFJvd3NbeF0pOwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBj
b3B5RnVuY3Rvcihzb3VyY2VQaXhlbEZvcm1hdCwgJnNvdXJjZVJvd3NbeF0sIGRlc3RpbmF0aW9u
UGl4ZWxGb3JtYXQsICZkZXN0aW5hdGlvblJvd3NbeF0pOworICAgICAgICBzb3VyY2VSb3dzICs9
IHNvdXJjZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0aW5hdGlvblJvd3MgKz0gZGVzdGluYXRp
b25CeXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc291cmNlUGl4
ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBzb3VyY2VSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25CeXRl
c1BlclJvdywgdWludDhfdCogZGVzdGluYXRpb25Sb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAogewogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldHRpbmcgb3IgcHV0
dGluZyBwaXhlbCBkYXRhIHdpdGggZGVlcCBjb2xvciBidWZmZXJzLgotICAgIEFTU0VSVChzcmNQ
aXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc3JjUGl4ZWxGb3JtYXQgPT0gUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBBU1NFUlQoZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpSR0JBOCB8fCBkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBBU1NFUlQoc291cmNlUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJj
ZVBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGRlc3RpbmF0aW9uUGl4ZWxG
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKLSAgICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0
ID09IGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZUFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3Ms
IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0
aW9uUm93cywgc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgICAgICBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc291
cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlv
blBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIHNp
emUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKGRlc3RpbmF0
aW9uQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZD4oc291cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93
LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVy
Um93LCBkZXN0aW5hdGlvblJvd3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQ
aXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
Pihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRlc3Rp
bmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgc2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0aW5hdGlvbkFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBk
YXRhKSBjb25zdAogewotICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOworICAgIGF1dG8gc291cmNlUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNvdXJjZVJlY3QpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBzb3VyY2VSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBp
bnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgp
LCBzb3VyY2VSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CiAKLSAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQotICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVk
LngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGlu
YXRpb25SZWN0LnNldFgoLXNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0
U2NhbGVkLnkoKSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgp
KTsKKyAgICBpZiAoc291cmNlUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2V0WSgtc291cmNlUmVjdFNjYWxlZC55KCkpOwogCi0gICAgaWYgKGRlc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKLSAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCku
emVyb0ZpbGwoKTsKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSkKKyAgICAgICAgcGl4ZWxCdWZmZXItPmRhdGEoKS56ZXJvRmlsbCgpOwog
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgdW5z
aWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VSZWN0U2NhbGVkLndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5k
YXRhKCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRl
c3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBi
eXRlc1BlclJvdygpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgc291cmNlUmVjdENsaXBwZWQueSgpICogc291cmNlQnl0ZXNQZXJS
b3cgKyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAot
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhl
bEZvcm1hdDo6UkdCQTgsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVs
Rm9ybWF0KCksIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5h
dGlvbkFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci0+Zm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQ
ZXJSb3csIGRlc3RpbmF0aW9uUm93cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiAKLSAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0LCB2b2lkKiBkYXRhKQordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlQWxwaGFGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uUG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRp
b25BbHBoYUZvcm1hdCwgdm9pZCogZGF0YSkKIHsKLSAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRT
Y2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGF1dG8gc291cmNl
UmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworICAgIGF1dG8g
ZGVzdGluYXRpb25Qb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RpbmF0aW9u
UG9pbnQpOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAg
SW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOwotICAgIGRlc3RSZWN0Lm1vdmVCeShk
ZXN0UG9pbnRTY2FsZWQpOworICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBwZWQgPSBpbnRlcnNl
Y3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkgfSwgc291cmNlUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBzb3VyY2VSZWN0Q2xpcHBl
ZDsKKyAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQpOwog
Ci0gICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKLSAgICAgICAgZGVzdFJlY3Quc2V0WChk
ZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2Fs
ZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFgoZGVzdGluYXRpb25SZWN0
LngoKSAtIHNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2NhbGVkLnko
KSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxl
ZC55KCkpOworICAgIGlmIChzb3VyY2VSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5zZXRZKGRlc3RpbmF0aW9uUmVjdC55KCkgLSBzb3VyY2VSZWN0U2NhbGVkLnko
KSk7CiAKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7Ci0gICAgc3JjUmVj
dENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRl
c1BlclJvdyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3Vy
Y2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50
OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RD
bGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICog
NDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCi0gICAgICAgIGRlc3RGb3JtYXQs
IHBpeGVsRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIHNvdXJjZUFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSwgc291
cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsCisgICAgICAgIGRlc3RpbmF0aW9uQWxwaGFGb3Jt
YXQsIHBpeGVsRm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OCArNDMsOCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRH
TDsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKIGNs
YXNzIE5hdGl2ZUltYWdlOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAKIGVudW0gQmFja2luZ1N0b3Jl
Q29weSB7CiAgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgpAQCAtMTA5LDggKzEwOSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE1NCw4ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRh
dGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOwogCiAgICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw1MyBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+IGNvbXB1dGVCdWZmZXJTaXplKFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZvcm1hdHMgYXJl
IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUX1VOVVNFRChmb3JtYXQsIGZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworCisgICAg
cmV0dXJuIHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIGJ5dGVzUGVyUGl4ZWw7Cit9CisK
K09wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdWludDY0X3QgcHJvcG9zZWRCdWZmZXJTaXplKQoreworICAgIEFT
U0VSVChmb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9PSBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghKGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9y
bWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBhdXRvIGNvbXB1dGVkQnVmZmVyU2l6ZSA9IGNvbXB1dGVCdWZmZXJTaXplKGZvcm1h
dCwgc2l6ZSk7CisgICAgaWYgKGNvbXB1dGVkQnVmZmVyU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoY29tcHV0ZWRCdWZmZXJTaXpl
LnVuc2FmZUdldCgpICE9IHByb3Bvc2VkQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisgICAgaWYgKCFwaXhlbEFy
cmF5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgY29sb3JT
cGFjZSwgZm9ybWF0LCBzaXplLCBwaXhlbEFycmF5LnJlbGVhc2VOb25OdWxsKCkgfSB9OworfQor
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIC8vIE5PVEU6IE9ubHkgOC1iaXQgZm9ybWF0cyBhcmUgY3VycmVudGx5
IHN1cHBvcnRlZC4KKyAgICBBU1NFUlQoZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCBm
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGNv
bXB1dGVCdWZmZXJTaXplKGZvcm1hdCwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUuaGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gcGl4ZWxB
cnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNp
emUudW5zYWZlR2V0KCkpOworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgcGl4
ZWxBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKK30KKwogUGl4ZWxCdWZmZXI6OlBpeGVsQnVm
ZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBmb3JtYXQs
IGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiYmIGRhdGEp
CiAgICAgOiBtX2NvbG9yU3BhY2UgeyBjb2xvclNwYWNlIH0KICAgICAsIG1fZm9ybWF0IHsgZm9y
bWF0IH0KQEAgLTQ2LDQgKzkwLDkgQEAgUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9u
ZSgpIGNvbgogICAgIHJldHVybiB7IG1fY29sb3JTcGFjZSwgbV9mb3JtYXQsIG1fc2l6ZSwgVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5sZW5ndGgoKSkg
fTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQoreworICAgIHJldHVybiB0cyA8PCAmcGl4ZWxCdWZmZXIu
ZGF0YSgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
aXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICsz
MCwyMCBAQAogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3Ry
ZWFtOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBpeGVsQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaXhlbEJ1ZmZlcik7CiBwdWJsaWM6CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiB0cnlDcmVhdGUoRGVzdGluYXRp
b25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gdHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIHVpbnQ2
NF90IHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisKICAgICBQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0LCBjb25zdCBJbnRTaXplJiwgUmVmPEpTQzo6VWludDhDbGFt
cGVkQXJyYXk+JiYpOwotICAgIH5QaXhlbEJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Q
aXhlbEJ1ZmZlcigpOwogCiAgICAgUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0
OwogICAgIFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0OwpA
QCAtNDgsNiArNTUsOSBAQCBwdWJsaWM6CiAKICAgICBQaXhlbEJ1ZmZlciBkZWVwQ2xvbmUoKSBj
b25zdDsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6CiAgICAgRGVzdGluYXRpb25D
b2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBQaXhlbEZvcm1hdCBtX2Zvcm1hdDsKQEAgLTU1
LDQgKzY1LDQ2IEBAIHByaXZhdGU6CiAgICAgUmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IG1f
ZGF0YTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBjb25zdCBQaXhlbEJ1ZmZlciYpOworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsKKyAgICBlbmNvZGVyIDw8IG1fZm9ybWF0
OworICAgIGVuY29kZXIgPDwgbV9zaXplOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG1fZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShmb3JtYXQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgSW50U2l6ZSBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICB1aW50NjRfdCBkYXRhQnl0ZUxlbmd0aDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gcmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0
ZUZvckRlY29kaW5nKGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgZGF0YUJ5dGVMZW5ndGgpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+ZGF0YSgpLCBy
ZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTkwNCwxMiArOTA0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cihJbWFnZUIKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2lu
dCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICgh
bGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXllckRh
dGEtPmRhdGEoKS5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQp
OwotICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOworICAgIGxheWVySW1hZ2UucHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5
ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hh
ZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0
ZVNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGlu
Zy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgpAQCAtNzcsMTEgKzc3LDExIEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBo
YUNoYW5uZWxGcm9tUGl4ZWxzKGkKIH0KICNlbmRpZgogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIFNjb3BlZFBpeGVsU3RvcmFnZU1vZGUgcGFj
a0FsaWdubWVudChHTF9QQUNLX0FMSUdOTUVOVCk7CiAgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0
KQogICAgICAgICBwYWNrQWxpZ25tZW50LnBpeGVsU3RvcmUoNCk7CkBAIC05MCwxNiArOTAsMTYg
QEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuRwogICAgIFNjb3BlZFBp
eGVsU3RvcmFnZU1vZGUgcGFja1NraXBQaXhlbHMoR0xfUEFDS19TS0lQX1BJWEVMUywgMCwgbV9p
c0ZvcldlYkdMMik7CiAgICAgU2NvcGVkQnVmZmVyQmluZGluZyBzY29wZWRQaXhlbFBhY2tCdWZm
ZXJSZXNldChHTF9QSVhFTF9QQUNLX0JVRkZFUiwgMCwgbV9pc0ZvcldlYkdMMik7CiAKLSAgICBn
bDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdl
RGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0
YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpKTsKKyAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgp
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7
CiAgICAgLy8gRklYTUU6IFJlbmRlcmluZyB0byBHTF9SR0IgdGV4dHVyZXMgd2l0aCBhIElPU3Vy
ZmFjZSBib3VuZCB0byB0aGUgdGV4dHVyZSBpbWFnZSBsZWF2ZXMKICAgICAvLyB0aGUgYWxwaGEg
aW4gdGhlIElPU3VyZmFjZSBpbiBpbmNvcnJlY3Qgc3RhdGUuIEFsc28gQU5HTEUgZ2w6OlJlYWRQ
aXhlbHMgd2lsbCBpbiBzb21lCiAgICAgLy8gY2FzZXMgZXhwb3NlIHRoZSBub24tMjU1IHZhbHVl
cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1ODA0
CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICghY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhl
bHMoaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRh
dGEoKS5kYXRhKCkpOworICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhwaXhlbEJ1
ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIHBpeGVs
QnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKICNlbmRpZgotICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXgKICNlbmRpZgogfQogCi1SZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQorT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCiB7CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgZmJvQmlu
ZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTyk7CiAgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRH
TENhaXJvLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJJbWFnZS5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2lu
Y2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTEwNiwxNSArMTA2
LDE1IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXgKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZh
cyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1
dGVzLCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJU
KCFpbWFnZURhdGEtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIu
c2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBDb252ZXJ0IFJHQkEgdG8gQkdSQS4gQkdSQSBpcyBDQUlST19G
T1JNQVRfQVJHQjMyIG9uIGxpdHRsZS1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4KLSAgICBzaXplX3Qg
dG90YWxCeXRlcyA9IGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKLSAgICB1aW50OF90
KiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCk7CisgICAgc2l6ZV90IHRvdGFsQnl0
ZXMgPSBwaXhlbEJ1ZmZlci5kYXRhKCkuYnl0ZUxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVs
cyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCiAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOwogCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFRvQ2FuCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOworICAgIGF1dG8gaW1hZ2VTaXplID0gcGl4ZWxCdWZmZXIu
c2l6ZSgpOwogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIGltYWdl
RGF0YS0+ZGF0YSgpLmRhdGEoKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VEYXRhLT53aWR0
aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPndpZHRoKCkgKiA0KSk7CisgICAg
ICAgIHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGltYWdlU2l6ZS53aWR0aCgpICogNCkp
OwogCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVN1
cmZhY2UpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogI2lmIFVTRShDQUlSTykKQEAgLTEy
MCwxNCArMTIwLDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUIK
ICAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1fc3VyZmFjZS5nZXQoKSkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVm
ZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3Jt
YXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IHNy
Y1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKICAgICBJbnRQb2lu
dCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4
IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJiwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xORU9OLmgiCkBAIC01MDYsOSArNTA2LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yOjpleAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFJlZjxJbWFnZURhdGE+JiYgaW1h
Z2VEYXRhLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBBU1NFUlQoIWltYWdlRGF0YS0+c2l6ZSgpLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBp
ZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBJbnB1dCBp
cyBHTF9SR0JBID09IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYSpMYXN0
LgpAQCAtNTIxLDEzICs1MjEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRUb0NhbgogICAgIGVsc2UKICAgICAgICAgYml0bWFwSW5mbyB8PSBrQ0dJbWFnZUFscGhhTGFz
dDsKIAotICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7Ci0gICAgaW50IHJv
d0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OwotICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJv
d0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwotICAgIHVpbnQ4X3QqIGltYWdlUGl4ZWxzID0g
aW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IG1ha2VSZWYo
cGl4ZWxCdWZmZXIuZGF0YSgpKTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLnNp
emUoKTsKKyAgICBhdXRvIHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAgIGF1
dG8gZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICB1aW50OF90
KiBpbWFnZVBpeGVscyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChpbWFnZVBpeGVscywgZGF0YVNpemUpOwotICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZpbWFnZURh
dGEubGVha1JlZigpLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBj
b25zdCB2b2lkKiwgc2l6ZV90KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VEYXRh
Kj4oY29udGV4dCktPmRlcmVmKCk7CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmcGl4ZWxBcnJheS5sZWFrUmVmKCksIGltYWdl
UGl4ZWxzLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3Qp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNDOjpVaW50OENsYW1wZWRBcnJheSo+KGNvbnRleHQp
LT5kZXJlZigpOwogICAgIH0pKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3Jl
YXRlKGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhl
aWdodCgpLCA4LCAzMiwgcm93Qnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8s
IGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0xODcsMTggKzE4NiwxOCBAQCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAg
ICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkK
KyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIXBp
eGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXV0byYg
cGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgICAgICBhdXRvIGRhdGFTaXplID0g
cGl4ZWxBcnJheS5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBpbWFnZURhdGEtPnNpemUoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5ID0gbWFrZVJl
ZihwaXhlbEJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJy
YXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBp
eGVsQnVmZmVyLT5zaXplKCk7CiAKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChwaXhlbEFycmF5LmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZl
cklzQmlnRW5vdWdoKHBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUpOwogCi0gICAgICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKGlt
YWdlRGF0YS5sZWFrUmVmKCksIHBpeGVsQXJyYXkuZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQq
IGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8SW1hZ2VEYXRhKj4oY29udGV4dCktPmRlcmVmKCk7CisgICAgICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhlbEFycmF5
LmxlYWtSZWYoKSwgcGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRl
eHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6
VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICAgICAgfSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTksMTQgKzE1OSwxNCBAQCBWZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlCiAgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
aW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CisgICAg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZm
ZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9kYXRhKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4
IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3Ju
ZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkg
KzI5LDkgQEAKICNpZiBIQVZFKElPU1VSRkFDRSkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC0xNjgsMTEgKzE2OCwxMSBAQCB2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6ZHJhd0NvCiAKIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAogewotICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1hZ2VEYXRhKSB7CisgICAg
aWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikgewogICAgICAgICAvLyBGb3Jj
ZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgogICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFp
bmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCiAgICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChG
bG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotICAgICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1h
Z2VEYXRhID0gZmFsc2U7CisgICAgICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZl
ciA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQpAQCAtMTgzLDE3
ICsxODMsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFjawogICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAg
SU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhl
bEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
OwogfQogCi12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1
cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOwotICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgPSB0cnVlOworICAgIEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IHRydWU7CiB9CiAKIElPU3VyZmFjZSogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzdXJmYWNlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAKICAgICBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
JiYpOwogCisgICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7CisKICAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlOwogCkBAIC02MSw5ICs2Myw4IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0gICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7
CiAKICAgICBib29sIGlzSW5Vc2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHJlbGVhc2VH
cmFwaGljc0NvbnRleHQoKSBvdmVycmlkZTsKQEAgLTc4LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgbXV0YWJsZSBib29sIG1fcmVxdWly
ZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX3Jl
cXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgeyBmYWxzZSB9OwogCiAgICAgbXV0YWJsZSBi
b29sIG1fbmVlZHNTZXR1cENvbnRleHQgeyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksOCArMjksOCBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SW1hZ2VJTy9JbWFn
ZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQmFzZTY0Lmg+CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cgogICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRh
dGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCkBAIC0xMzEs
NyArMTMxLDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiAg
ICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdz
IGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21w
b3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uu
d2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291
cmNlLnNpemUoKS53aWR0aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgaWYg
KCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTU0LDEyICsxNTQsMTIgQEAgc3RhdGljIFJldGFpblB0
cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERh
dGEuZGF0YSgpOwogICAgIH0KIAotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0
YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0
ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCkgKiBzb3Vy
Y2Uuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLnNpemUoKS53aWR0
aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKSwgMCkpOwogICAgIGlmICghZGF0YVByb3ZpZGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBz
b3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVm
YXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKHNvdXJjZS5zaXplKCkud2lkdGgoKSwgc291cmNlLnNpemUoKS5oZWlnaHQoKSwgOCwg
MzIsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0Jp
dG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAKICAgICBhdXRvIGNmRGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CiAgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBj
ZkRhdGEuZ2V0KCkpKQpAQCAtMTc2LDcgKzE3Niw3IEBAIFN0cmluZyBkYXRhVVJMKENGRGF0YVJl
ZiBkYXRhLCBjb25zdCBTdHIKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CiB9CiAKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
CitTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7CiAgICAgaWYgKGF1dG8gZGF0
YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKICAgICAgICAgcmV0dXJuIGRh
dGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIFZlY3Rvcjx1
aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkQKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
VmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKICAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNv
dXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQogICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogCiBXRUJDT1JF
X0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCog
YnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQCBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlCiBib29sIGVuY29kZUltYWdlKENHSW1h
Z2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFi
bGVEYXRhUmVmKTsKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CitTdHJpbmcgZGF0YVVSTChjb25z
dCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CiAKIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7Ci1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3Qg
UGl4ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjYxLDEzICs2NjEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvcgogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsK
IH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21w
b3NpdGVkUmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgYXV0byYgZGlzcGxheUJ1ZmZl
ciA9IG1fc3dhcENoYWluLT5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVy
LnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoZGlzcGxheUJ1ZmZlci5z
dXJmYWNlLT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gTm90
ZTogV2UgYXJlIHVzaW5nIEdMIHRvIHJlYWQgdGhlIElPU3VyZmFjZS4gQXQgdGhlIHRpbWUgb2Yg
d3JpdGluZywgdGhlcmUgYXJlIG5vIGNvbnZpbmllbnQKICAgICAvLyBmdW5jdGlvbnMgdG8gY29u
dmVydCB0aGUgSU9TdXJmYWNlIHBpeGVsIGRhdGEgdG8gSW1hZ2VEYXRhLiBUaGUgaW1hZ2UgZGF0
YSBlbmRzIHVwIGJlaW5nCiAgICAgLy8gZHJhd24gdG8gYSBJbWFnZUJ1ZmZlciwgYnV0IGF0IHRo
ZSB0aW1lIHRoZXJlJ3Mgbm8gZnVuY3Rpb25zIHRvIGNvbnN0cnVjdCBhIE5hdGl2ZUltYWdlCkBA
IC02NzgsNyArNjc4LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
RwogICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5KCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQg
IT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKICAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRh
cmdldCwgdGV4dHVyZSk7CiAgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxheU9iaiwg
ZGlzcGxheUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAg
ICBTY29wZWRGcmFtZWJ1ZmZlciBmYm87CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZl
ckJpbmRpbmcgZmJvQmluZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTywg
ZmJvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUJsZW5kTkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVC
bGVuZE5FT04uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKIAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGFybV9uZW9uLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiwzMyArMTEyLDM0IEBAIHZvaWQgRkVCbGVu
ZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAg
IGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QSA9IGluLT5w
cmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QiA9
IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAotICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7Ci0gICAgQVNT
RVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKKyAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxBcnJh
eUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAotICAg
IGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04o
c3JjUGl4ZWxBcnJheUEtPmRhdGEoKSwgc3JjUGl4ZWxBcnJheUItPmRhdGEoKSwgZHN0UGl4ZWxB
cnJheS0+ZGF0YSgpLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VQaXhl
bEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOworICAgIEFTU0VSVChw
aXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CisKKyAgICBp
ZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CisgICAgICAgIHBsYXRmb3JtQXBwbHlO
RU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCks
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVs
IHdlIGV4cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPiAwKTsK
KyAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwogICAgIHVpbnQzMl90IHNv
dXJjZUFbMl0gPSB7MCwgMH07CiAgICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7MCwg
MH07CiAKLSAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Bp
eGVsQXJyYXlBLT5kYXRhKCkpWzBdOwotICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KHNyY1BpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOworICAgIHNvdXJj
ZUFbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUEtPmRh
dGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSlbMF07CiAgICAgcGxhdGZvcm1BcHBseU5F
T04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291
cmNlQkFuZERlc3QpLCA4KTsKLSAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZHN0UGl4
ZWxBcnJheS0+ZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJj
ZUJBbmREZXN0WzBdOwogfQogCiB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2ln
bmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5Qiwg
dW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDEw
ICsyOTgsMTAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbQogICAg
ICAgICByZXR1cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZl
cj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAg
IHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPihpdGVtLmdldDxNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxHZXRJbWFnZURhdGE+KGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxH
ZXRQaXhlbEJ1ZmZlcj4oaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dFBpeGVsQnVm
ZmVyPihpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJuIGFwcGVu
ZDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsx
ODgsOCBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgogICAg
IGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKLSAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAg
Y2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CiAgICAgICAgIC8vIFNob3VsZCBhbHJlYWR5
IGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgwLDExICsyODAsMTEgQEAgdm9pZCBJdGVtSGFuZGxl
OjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAg
IGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxHZXRJbWFnZURhdGE+Ojp2YWx1ZSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEdldFBpeGVsQnVmZmVyPjo6dmFsdWUp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAg
ICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgZ2V0PFB1dFBpeGVsQnVmZmVyPigpLn5QdXRQ
aXhlbEJ1ZmZlcigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6CiAgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKQEAgLTUw
NCwxMCArNTA0LDEwIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbUhhbmRsZSBkZXMK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAg
ICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88
R2V0SW1hZ2VEYXRhPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88UHV0SW1hZ2VEYXRhPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAg
IHJldHVybiBjb3B5SW50bzxHZXRQaXhlbEJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOworICAg
IGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88
UHV0UGl4ZWxCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVEYXNoPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwogICAgIGNhc2UgSXRlbVR5
cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHZXRJbWFnZURhdGEpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihQdXRJbWFnZURhdGEp
OworICAgIGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdldFBpeGVsQnVmZmVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihQdXRQaXhlbEJ1ZmZlcik7CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJu
IHNpemVvZihQYWludEZyYW1lRm9yTWVkaWEpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgaXNE
cmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6CkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBl
IHR5cGUpCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYToKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICBj
YXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6CkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
OgorICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVBhdGg6CkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
IGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhl
bEJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4
IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGbHVzaENvbnRleHQsCiAg
ICAgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyLAogICAgIE1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlciwKLSAgICBHZXRJbWFnZURhdGEsCi0gICAgUHV0SW1hZ2VEYXRh
LAorICAgIEdldFBpeGVsQnVmZmVyLAorICAgIFB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShW
SURFTykKICAgICBQYWludEZyYW1lRm9yTWVkaWEsCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVw
bGF5ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CkBAIC03NjksMzUgKzc2OCw0NCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR2V0SW1hZ2VEYXRhJiBpdGVtKQorc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdldFBpeGVsQnVmZmVyJiBp
dGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgib3V0cHV0Rm9ybWF0IiwgaXRlbS5vdXRwdXRG
b3JtYXQoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3Jj
UmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQotICAgICwgbV9pbWFn
ZURhdGEoaW1hZ2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVx
dWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KKyAgICAs
IG1fcGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpIC8vIFRoaXMgY29weSBpcyBh
Y3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNzIG9mIHB1dFBpeGVsQnVm
ZmVyKCkuCiAgICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQogICAgICwgbV9kZXN0Rm9y
bWF0KGRlc3RGb3JtYXQpCiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogICAgIDogbV9zcmNSZWN0
KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCi0gICAgLCBtX2ltYWdlRGF0
YShXVEZNb3ZlKGltYWdlRGF0YSkpCisgICAgLCBtX3BpeGVsQnVmZmVyKFdURk1vdmUocGl4ZWxC
dWZmZXIpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZv
cm1hdChkZXN0Rm9ybWF0KQogewogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQorUHV0UGl4ZWxCdWZmZXI6
OlB1dFBpeGVsQnVmZmVyKGNvbnN0IFB1dFBpeGVsQnVmZmVyJiBvdGhlcikKKyAgICA6IG1fc3Jj
UmVjdChvdGhlci5tX3NyY1JlY3QpCisgICAgLCBtX2Rlc3RQb2ludChvdGhlci5tX2Rlc3RQb2lu
dCkKKyAgICAsIG1fcGl4ZWxCdWZmZXIob3RoZXIubV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkK
KyAgICAsIG1faW5wdXRGb3JtYXQob3RoZXIubV9pbnB1dEZvcm1hdCkKKyAgICAsIG1fZGVzdEZv
cm1hdChvdGhlci5tX2Rlc3RGb3JtYXQpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRQaXhlbEJ1ZmZlciYgaXRlbSkKIHsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUo
KSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwaXhlbEJ1ZmZlclNpemUiLCBpdGVtLnBpeGVsQnVm
ZmVyKCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1Jl
Y3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0UG9pbnQiLCBpdGVtLmRlc3RQb2ludCgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3RGb3JtYXQiLCBpdGVtLmRlc3RGb3JtYXQoKSk7
CkBAIC0xMDY0LDggKzEwNzIsOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OiB0cyA8PCAiZmx1c2gtY29u
dGV4dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtZGVzdGluYXRpb24t
aW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFu
Z2VJdGVtQnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5kLWNoYW5nZS1pdGVtLWJ1ZmZlciI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YTogdHMgPDwgImdldC1pbWFnZS1k
YXRhIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB0cyA8PCAicHV0
LWltYWdlLWRhdGEiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjog
dHMgPDwgImdldC1waXhlbC1idWZmZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQ
aXhlbEJ1ZmZlcjogdHMgPDwgInB1dC1waXhlbC1idWZmZXIiOyBicmVhazsKICNpZiBFTkFCTEUo
VklERU8pCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB0cyA8PCAicGFp
bnQtZnJhbWUtZm9yLW1lZGlhIjsgYnJlYWs7CiAjZW5kaWYKQEAgLTEyMzEsMTEgKzEyMzksMTEg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSQogICAgIGNhc2UgSXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1h
Z2VEYXRhPigpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICB0
cyA8PCBpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIkdyYWRpZW50
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllcklkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIFRl
eHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VEYXRhOwogY2xh
c3MgTWVkaWFQbGF5ZXI7CiBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CiAKQEAgLTE5MDAs
MTMgKzE4OTksMTMgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotY2xh
c3MgR2V0SW1hZ2VEYXRhIHsKK2NsYXNzIEdldFBpeGVsQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkdldEltYWdlRGF0
YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6Okdl
dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAK
LSAgICBHZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCisgICAgR2V0UGl4ZWxCdWZm
ZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCiAgICAgICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAg
ICAgICAgICwgbV9vdXRwdXRGb3JtYXQob3V0cHV0Rm9ybWF0KQogICAgIHsKQEAgLTE5MjAsMTcg
KzE5MTksMTkgQEAgcHJpdmF0ZToKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fb3V0cHV0
Rm9ybWF0OwogfTsKIAotY2xhc3MgUHV0SW1hZ2VEYXRhIHsKK2NsYXNzIFB1dFBpeGVsQnVmZmVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlB1dEltYWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXIm
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKworICAgIFB1dFBpeGVsQnVmZmVyKGNv
bnN0IFB1dFBpeGVsQnVmZmVyJik7CiAKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdDsgfQotICAgIEltYWdlRGF0YSYg
aW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1faW1hZ2VEYXRhOyB9CisgICAgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlcjsgfQog
ICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQogICAgIElu
dFBvaW50IGRlc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFBvaW50OyB9CiAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0Rm9y
bWF0OyB9CkBAIC0xOTM5LDMxICsxOTQwLDMxIEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1fZGVzdFBvaW50LCBtX3Ny
Y1JlY3Quc2l6ZSgpIH19OyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IGRlY29kZShEZWNv
ZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3NyY1JlY3Q7CiAgICAgSW50UG9pbnQg
bV9kZXN0UG9pbnQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV9pbWFnZURhdGE7CisgICAgUGl4
ZWxCdWZmZXIgbV9waXhlbEJ1ZmZlcjsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5w
dXRGb3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBQdXRJbWFnZURhdGE6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBQdXRQaXhlbEJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVu
Y29kZXIgPDwgbWFrZVJlZigqbV9pbWFnZURhdGEpOworICAgIGVuY29kZXIgPDwgbV9waXhlbEJ1
ZmZlcjsKICAgICBlbmNvZGVyIDw8IG1fc3JjUmVjdDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdFBv
aW50OwogICAgIGVuY29kZXIgPDwgbV9kZXN0Rm9ybWF0OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IFB1dFBpeGVsQnVmZmVyOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uPiBpbnB1dEZvcm1hdDsKLSAgICBPcHRpb25hbDxSZWY8SW1hZ2VEYXRhPj4gaW1hZ2VE
YXRhOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwaXhlbEJ1ZmZlcjsKICAgICBPcHRpb25h
bDxJbnRSZWN0PiBzcmNSZWN0OwogICAgIE9wdGlvbmFsPEludFBvaW50PiBkZXN0UG9pbnQ7CiAg
ICAgT3B0aW9uYWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gZGVzdEZvcm1hdDsKQEAgLTE5NzIs
OCArMTk3Myw4IEBAIE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VEYXRhOjpkZWMKICAg
ICBpZiAoIWlucHV0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ZGVjb2RlciA+PiBpbWFnZURhdGE7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgZGVjb2RlciA+
PiBwaXhlbEJ1ZmZlcjsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgZGVjb2RlciA+PiBzcmNSZWN0OwpAQCAtMTk4OCw3ICsxOTg5LDcg
QEAgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlYwogICAgIGlmICghZGVz
dEZvcm1hdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiB7eyAq
aW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAq
ZGVzdEZvcm1hdCB9fTsKKyAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCpwaXhl
bEJ1ZmZlciksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCB9fTsKIH0KIAogI2lm
IEVOQUJMRShWSURFTykKQEAgLTIzMTcsMTAgKzIzMTgsMTAgQEAgdXNpbmcgRGlzcGxheUxpc3RJ
dGVtID0gVmFyaWFudAogICAgICwgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUKICAgICAsIEZpbGxS
b3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0Ci0gICAgLCBHZXRJbWFnZURhdGEKKyAgICAs
IEdldFBpeGVsQnVmZmVyCiAgICAgLCBNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIKICAgICAsIE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcgotICAgICwgUHV0SW1hZ2VE
YXRhCisgICAgLCBQdXRQaXhlbEJ1ZmZlcgogICAgICwgUmVzdG9yZQogICAgICwgUm90YXRlCiAg
ICAgLCBTYXZlCkBAIC0yNDE5LDggKzI0MjAsOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRpCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVz
aENvbnRleHQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIsCi0gICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRJbWFnZURhdGEsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEsCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlciwKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShWSURFTykKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSwKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNCArNTUsMTQgQEAgUmVjb3Jk
ZXI6On5SZWNvcmRlcigpCiAgICAgTE9HKERpc3BsYXlMaXN0cywgIlJlY29yZGVkIGRpc3BsYXkg
bGlzdDpcbiVzIiwgbV9kaXNwbGF5TGlzdC5kZXNjcmlwdGlvbigpLmRhdGEoKSk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KQogewotICAgIGFwcGVuZDxHZXRJbWFnZURhdGE+KG91dHB1dEZvcm1hdCwg
c291cmNlUmVjdCk7CisgICAgYXBwZW5kPEdldFBpeGVsQnVmZmVyPihvdXRwdXRGb3JtYXQsIHNv
dXJjZVJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKK3ZvaWQgUmVjb3JkZXI6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVy
JiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQogewotICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9ybWF0LCBp
bWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgYXBwZW5kPFB1
dFBpeGVsQnVmZmVyPihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2lu
dCwgZGVzdEZvcm1hdCk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRl
Q2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxNCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90Owor
CiBjbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR2x5cGhCdWZmZXI7
CiBjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udDsKK2NsYXNz
IEdseXBoQnVmZmVyOwogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7CitjbGFzcyBQaXhl
bEJ1ZmZlcjsKIAogc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwogc3RydWN0IEltYWdlUGFp
bnRpbmdPcHRpb25zOwpAQCAtNTcsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5S
ZWNvcmRlcigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCk7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0LmlzRW1wdHkoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZW51bSBjbGFzcyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIDogdWludDhfdDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIEltYWdlRGF0YTsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0yODYsMTIgKzI4NiwxMiBAQCB2b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRh
ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNp
emUoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBh
dXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKIAogICAgIFZl
Y3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CiAgICAgCkBA
IC0zMTMsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgaW1h
Z2VSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ck1hdHJpeFR5cGUmIHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMTA4LDExICsxMDgsMTEgQEAgdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5UwogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlUmVzdWx0KQorICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0LT5kYXRhKCk7CisgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwog
CiAgICAgTG9va3VwVGFibGUgcmVkVGFibGU7CiAgICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsK
QEAgLTEyMCwxMSArMTIwLDExIEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseVMKICAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwogICAgIGNvbXB1dGVMb29rdXBUYWJs
ZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKLSAgICBJ
bnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQocGl4
ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVVubXVsdGlwbGllZFJl
c3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDFdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSwyMSArMjI5LDIxIEBAIHZvaWQgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKSB7Ci0gICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5k
YXRhKCk7CisgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlm
ICghc3JjUGl4ZWxBcnJheSkKKyAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGlm
ICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBJbnRS
ZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
ICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBl
ZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgcGxh
dGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNyY1BpeGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIG1f
azEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2Fy
ZSgqc291cmNlUGl4ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBt
X2szLCBtX2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM3MSwzMyArMzcx
LDI4IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnQKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFnZURhdGEqIHJlc3Vs
dEltYWdlOwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHJlc3VsdEltYWdlID0g
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3Vs
dEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZl
QWxwaGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRh
dGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHNyY1BpeGVsQXJyYXk7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3Vy
Y2VQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNyY1BpeGVs
QXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlw
bGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAg
ICBlbHNlCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNyY1Bp
eGVsQXJyYXkpCisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJl
c3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAo
IXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFNpemUgcGFpbnRT
aXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAgICAgcGFpbnRTaXplLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9
IHsKLSAgICAgICAgKnNyY1BpeGVsQXJyYXksCi0gICAgICAgIGRzdFBpeGVsQXJyYXksCisgICAg
ICAgICpzb3VyY2VQaXhlbEFycmF5LAorICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCiAg
ICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCiAg
ICAgICAgIG1fYmlhcyAqIDI1NSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5LDE2
ICs5OSwxNiBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mCiAgICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBhdXRvIGlucHV0SW1h
Z2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1
ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBj
b2xvciB2YWx1ZXMuCiAgICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCkBAIC0xMzYsMTggKzEzNiwxOCBA
QCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mCiAgICAgICAgIGludCBs
aW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7CiAKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZHN0SW5kZXgg
PSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbklu
ZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFj
ZW1lbnRJbWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxl
ZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50Pihz
Y2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlzcGxh
Y2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9
IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2Ut
Pml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9m
ZnNldFgpOworICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2Fs
ZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBk
aXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5z
aWduZWQqIGRzdFBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVs
QXJyYXkuZGF0YSgpICsgZHN0SW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1gg
PCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBw
YWludFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZHN0UGl4ZWxQdHIgPSAwOwor
ICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgKmRzdFBpeGVsUHRyID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zm
c2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAgICAgICAgKmRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRh
dGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtOTksMTYgKzk5LDE1IEBAIHZvaWQgRkVEcm9w
U2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKIAogICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwogCi0gICAgLy8gVE9ETzog
RGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRo
ZSBJbWFnZURhdGEuCiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93
QXJlYSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3Vs
dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgY29u
dGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LmRhdGEoKSwgaW1hZ2VEYXRh
LT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICBhdXRvJiBzb3Vy
Y2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJs
dXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsKICAgICAKLSAgICByZXN1bHRJbWFn
ZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIHNoYWRvd0FyZWEpOworICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZmZXIsIHNoYWRv
d0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dD
b2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ck5FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQpA
QCAtNTIzLDE2ICs1MjMsMTYgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1
dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVz
dWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBp
bi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYg
KCFtX3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDUsNyArNTQ1LDcg
QEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YQogICAgIGlmICghdG1w
SW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KGRzdFBpeGVs
QXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWln
aHQoKSwgcGFpbnRTaXplKTsKKyAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgp
LCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDc1LDIzICs0NzUsMjMgQEAgdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKIAotICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBy
ZXN1bHRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBz
ZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChyZXN1bHRQaXhlbEFycmF5LCBlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgx
LDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBu
byB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBo
YXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Rocywg
YW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNv
bnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAogICAgIElu
dFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBkcmF3TGlnaHRpbmcocmVzdWx0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgo
KSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIGRyYXdMaWdodGluZyhkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRT
aXplLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjQzLDIzICsyNDMsMjMgQEAgdm9p
ZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
OworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwog
Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogCiAgICAgSW50U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9h
dFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsKICAgICBpZiAocGxhdGZvcm1BcHBseURlZ2Vu
ZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndp
ZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9
IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBp
eGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0
aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0Lmhl
aWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM5NiwxNyArMzk2LDE3IEBAIHZvaWQgRkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGwKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJ
bnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwogICAgIHJlc3Vs
dFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBpZiAocmVzdWx0U2l6
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kp
IHsKICAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhp
czsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5OworICAg
ICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsK
ICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAg
ICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIEZF
VHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgfQogCiAgICAgLy8gRmFsbGJh
Y2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcg
dGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKHBp
eGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBmaWxs
UmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAw
LCBoZWlnaHQpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlz
aW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTc3LDcgKzc3LDcgQEAgRmxvYXRQb2lu
dCBGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZQogICAgIHJldHVybiBhYnNvbHV0ZVBvaW50
OwogfQogCi1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAorSW50UmVjdCBGaWx0ZXJFZmZl
Y3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZl
Y3RSZWN0KSBjb25zdAogewogICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50
UmVjdC5sb2NhdGlvbigpOwogICAgIGxvY2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlv
bigpKTsKQEAgLTI0Nyw4ICsyNDcsOCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFBy
ZU11bHRpcGxpCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewogICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBudWxscHRyOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKKyAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OworICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFn
ZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVy
UmVzdWx0IDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCk7CiAKICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAq
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQot
ICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVz
dGluYXRpb25SZWN0KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKIH0KIApAQCAtMjkwLDExICsyOTAsMTQgQEAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OgogICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwogICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVy
Zmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqaW1hZ2VEYXRh
LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGF1dG8gcGl4
ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNr
ZWRBcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3Qs
IGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEFycmF5OwogfQogCiBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBA
IC0zMDIsMTEgKzMwNSwxNCBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CiAgICAgc2NhbGVkU2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChzY2FsZWRTaXplLmFyZWEo
KSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIGNoZWNr
ZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAo
Y2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChjaGVja2VkQXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFwaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqaW1hZ2VE
YXRhLCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gcGl4ZWxBcnJheTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKQEAgLTQzMyw3OCArNDM5LDgwIEBA
IHN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY28KICNlbmRpZgogfQogCi1S
ZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIEltYWdlRGF0YSYgaW5w
dXREYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKIHsKLSAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBpbnB1dERhdGEuc2l6ZSgpKTsKKyAgICAv
LyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2Ug
Y29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgorCisgICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsK
ICAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwog
ICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0
aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3Rv
cmUgaW5jb21pbmcgSW1hZ2VEYXRhCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0
b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCiAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
ICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYnVmZmVyLT5w
dXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBpbnB1dERhdGEsIGRlc3RpbmF0aW9uUmVjdCk7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihv
dXRwdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwg
ZGVzdGluYXRpb25SZWN0LCBvdXRwdXRGb3JtYXQpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKK09w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZm
ZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCkKIHsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwogICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1
ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRs
ZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCiAgICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7CiAgICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIg
dG8gYW5vdGhlcgogICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKG91dHB1dEZvcm1hdCwgcmVjdCk7CisgICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCByZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQog
ewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0
LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkSW1hZ2VEYXRhID0g
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsICptX2ltYWdlQnVmZmVy
UmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0sIG91dHB1
dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRJbWFnZURhdGEpCisgICAgYXV0byBjb252ZXJ0
ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNl
LCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOworICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEt
PmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252
ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAogICAg
IC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1
dG8gY29udmVydGVkSW1hZ2VEYXRhID0gY29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCBpbWFnZURhdGEsIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRJbWFn
ZURhdGEpCisgICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZl
clRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlciwgb3V0cHV0Rm9ybWF0KTsKKyAg
ICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgY29weUlt
YWdlQnl0ZXMoY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7CisgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAg
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAi
IDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwg
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwogCiAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNp
b24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3Vs
dCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNp
b24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKICAgICAgICAgICAgICAgICBjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
SW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAg
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAg
ICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5w
dXRTaXplKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1
ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6
OkJHUkE4LCBpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3Bh
Y2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CisgICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29w
eUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7CkBAIC01MTQsMzEgKzUyMiwzMSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUo
KSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAi
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KTsKIAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewogICAg
ICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGlu
YXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCByZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1h
Z2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0
YVRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
KmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3Qp
OworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKKyAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwpAQCAtNTU4LDcxICs1NjYsNzMgQEAgSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdQogICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyUmVzdWx0LmdldCgpOwogfQogCi1JbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywg
IkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRl
ck5hbWUoKSwgdGhpcyk7CiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2Vk
LgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAgIEFTU0VSVChtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID09IFdURjo6bnVsbG9wdCk7CisKICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LmdldCgpOworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBy
ZXN1bHRTaXplKTsKKyAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIH0KIAot
SW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCiAg
ICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jl
c3VsdCgpKTsKKyAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPT0gV1RGOjpu
dWxsb3B0KTsKKwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6
ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXpl
KTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCByZXN1bHRTaXplKTsKKyAg
ICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiB9CiAKLWJvb2wgRmlsdGVyRWZm
ZWN0OjpyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKE9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gZHN0Q29sb3JTcGFjZSkKK2Jvb2wgRmlsdGVyRWZmZWN0OjpyZXF1
aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCiB7CiAjaWYgVVNFKENHKQogICAgIC8v
IFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4g
ZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgogICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBj
b2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBp
bnB1dAogICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxz
Ci0gICAgcmV0dXJuIGRzdENvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkc3RD
b2xvclNwYWNlOworICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29s
b3JTcGFjZSgpICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7CiAjZWxzZQogICAgIC8vIEFkZGl0
aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAg
IFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b25Db2xvclNwYWNlKTsKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAotdm9pZCBGaWx0
ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
IGRzdENvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdGluYXRpb25Db2xvclNwYWNlKQogewogI2lm
IFVTRShDRykKICAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVy
bmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOworICAgIFVOVVNFRF9QQVJB
TShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8
IGRzdENvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQorICAgIGlmICghaGFzUmVzdWx0
KCkgfHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5
IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCiAgICAgLy8gY29s
b3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJy
YXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1
bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKyAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50
cmFuc2Zvcm1Db2xvclNwYWNlKG1fcmVzdWx0Q29sb3JTcGFjZSwgZGVzdGluYXRpb25Db2xvclNw
YWNlKTsKIAotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRzdENvbG9yU3BhY2U7CisgICAgbV9y
ZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwogCi0gICAgaWYgKG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBudWxscHRyOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxscHRyOworICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw4ICsyNywxMCBAQAogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDEsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJF
ZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVs
QnVmZmVyOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZm
ZWN0VmVjdG9yOwogCkBAIC0xMDAsNyArMTAzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsK
LSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMu
CiAgICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwpAQCAt
MTg1LDggKzE4OCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUg
Y29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAs
MjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTIwMiwxOCAr
MjA1LDE4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZl
cnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFnZURhdGEm
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
T3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
Y29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdl
RGF0YSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdl
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIHZv
aWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYsIFBpeGVsQnVmZmVyJiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7CisgICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIAogCiAgICAgRmlsdGVyJiBtX2ZpbHRlcjsKICAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KIAogI2lmIFVTRShB
VkZPVU5EQVRJT04pCkBAIC0yMDksMTAgKzIwOSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFJlbmRlCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisg
ICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0
dHJpYnV0ZXMoKSwgaW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxsKCksIGltYWdlQnVmZmVyLmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CisgICAgcGFpbnRUb0NhbnZhcyhjb250
ZXh0QXR0cmlidXRlcygpLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCkBAIC0yMjEsNDAgKzIyMSw0MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludENvbXBvCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwotICAgIGlmICghaW1hZ2VEYXRhKQor
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRUb0NhbnZhcyhjb250ZXh0
QXR0cmlidXRlcygpLCBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXIuYmFj
a2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFzKGNv
bnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXIuYmFj
a2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0
YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpCiB7CiAgICAgLy8gUmVhZGluZyBwcmVt
dWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMg
bG9zc3kuCiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogfQogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHNG
b3JQYWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9CiAKLVJlZlB0cjxJbWFn
ZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQ
YWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHJldHVybiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAogI2lmICFQTEFURk9S
TShDT0NPQSkKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
Q29tcG9zaXRlZFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewogICAgIHJldHVybiByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw4
ICs4Nyw4IEBAIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKICNlbmRpZgogY2xhc3MgSG9zdFdp
bmRvdzsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgTWVkaWFQ
bGF5ZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBjbGFz
cyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKQEAgLTQ2MywxMSArNDYz
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24oKTsKIAogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZm
ZXImKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpIGZpbmFsOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKIAotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKLSAgICBSZWZQdHI8SW1h
Z2VEYXRhPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworICAgIE9wdGlvbmFs
PFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCk7CisgICAgT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CiAK
ICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBs
YXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZpbmFsOwpAQCAtNTI2
LDcgKzUyNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5
cGVGb3JJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0mIGZv
cm1hdCwgR0NHTGVudW0mIHR5cGUpOwogI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSAgICBzdGF0
aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYs
IFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXImJiwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBA
IC01NTMsOSArNTUzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CiAK
IAotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0gICAgUmVm
UHRyPEltYWdlRGF0YT4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7Ci0gICAgUmVmUHRyPEltYWdl
RGF0YT4gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBy
ZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFBp
eGVsc0ZvclBhaW50UmVzdWx0cygpOwogCiAgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRT
aXplJik7CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaWYgRU5B
QkxFKFdFQkdMKSAmJiBVU0UoT1BFTkdMKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdM
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0cmluZz4K
QEAgLTYxLDEyICs2MSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotUmVmUHRyPElt
YWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3Vs
dHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
UGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0
YTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwotICAgIGlmICghaW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7CisgICAgaWYgKCFwaXhl
bEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEdMaW50IHBhY2tB
bGlnbm1lbnQgPSA0OwogICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7
CkBAIC03NiwxMiArNzUsMTIgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuRwogICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KIAot
ICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0
YSgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRo
KCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKIAogICAgIGlmIChtdXN0UmVzdG9yZVBh
Y2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwg
cGFja0FsaWdubWVudCk7CiAKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhl
bEJ1ZmZlcjsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRy
aWJ1dGVzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29t
bW9uLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksMTAgKzM5LDEwIEBACiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CiAjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgogI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhw
cmVzc2lvbi5oPgpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnByZXBhcmVUZXgKICAgICA6OmdsRmx1c2goKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK09wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3Vs
dHMoKQogewogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAoY29udGV4
dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0Uo
T1BFTkdMX0VTKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
IAogI2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcuaD4KIApAQCAtNDYsNyArNDYsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0KICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKQEAgLTY1LDExICs2
NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVs
c0ZvclBhaW50UmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VE
YXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0g
ICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4
ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsK
KyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CiAgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGln
bm1lbnQgPSBmYWxzZTsKQEAgLTc5LDEyICs3OCwxMiBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRy
dWU7CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgp
LCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURh
dGEtPmRhdGEoKS5kYXRhKCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIHBpeGVsQnVmZmVy
LT5zaXplKCkud2lkdGgoKSwgcGl4ZWxCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogCiAgICAgaWYg
KG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BB
Q0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAotICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJDT01QdHIuaCIKICNp
bmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJE
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxXzEuaD4K
ICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0zMTIsMTYgKzMxMiwxNiBAQCBWZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29u
c3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0
LCBudWxscHRyKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZl
cihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOwogfQogCi12b2lkIEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsK
KyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhl
bEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhl
bEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByb3Rl
Y3RlZDoKICAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBJbnRSZWN0IENTU0Zp
bHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CiAgICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0
cy5sYXN0KCkuZ2V0KCk7CiAgICAgCiAgICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkgfHwg
KG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQotICAg
ICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKElu
dFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKKyAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9
KTsKICAgICAKICAgICByZXR1cm4geyB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4
IEBACiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiUG9seWdvblNoYXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKICNpbmNsdWRlICJS
ZWN0YW5nbGVTaGFwZS5oIgpAQCAtMTk3LDE0ICsxOTcsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNo
YXBlPiBTaGFwZTo6Y3JlYXRlUmFzdAogICAgIGlmIChpbWFnZSkKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNp
emUoKSkpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBp
bWFnZVJlY3Quc2l6ZSgpIH0pOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CiAgICAgCi0gICAgLy8gV2UgY291bGQg
Z2V0IHRvIGEgdmFsdWUgd2hlcmUgaW1hZ2VEYXRhIGNvdWxkIGJlIG51bGxwdHIuIEEgY2FzZSB3
aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1Z2UsIGltYWdlRGF0YTo6Y3JlYXRlCi0gICAgLy8g
Y2FuIHJldHVybiBhIG51bGxwdHIgYmVjYXVzZSBkYXRhIHNpemUgaGFzIG92ZXJmbG93ZWQuIFJl
ZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgLy8g
V2UgY291bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgUGl4ZWxCdWZmZXIgY291bGQgYmUgbnVsbG9w
dC4gQSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZQorICAgIC8vIGNhbiByZXR1cm4gYSBudWxsb3B0IGJlY2F1c2UgZGF0YSBzaXplIGhh
cyBvdmVyZmxvd2VkLiBSZWZlciByZGFyOi8vcHJvYmxlbS82MTc5Mzg4NAorICAgIGlmICghcGl4
ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwogCi0gICAgYXV0byYgcGl4
ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFy
cmF5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNo
IHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNo
b2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hv
bGQsIDAsIDEpICogMjU1LjBmKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MyBAQAor
MjAyMS0wNS0wOSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IFBpeGVsQnVmZmVyIHJhdGhlciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBm
aXggbGF5ZXJpbmcgdmlvbGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjU1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHRoZSBET00gbGF5ZXIgb2JqZWN0IFdl
YkNvcmU6OkltYWdlRGF0YSB3aXRoIHRoZSBuZXcgcGxhdGZvcm0KKyAgICAgICAgbGF5ZXIgV2Vi
Q29yZTo6UGl4ZWxCdWZmZXIsIHdoaWNoIGZpeGVzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIFdlYkNv
cmUgYW5kIGF2b2lkcworICAgICAgICB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyAvIHJlZmVyZW5j
ZSBjb3VudGluZy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UGl4ZWxCdWZmZXJU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OnBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW46CisgICAg
ICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9u
c0dlbmVyYXRlZC5oOgorICAgICAgICAocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZl
cik6CisgICAgICAgIChwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9y
eUZvckdldFBpeGVsQnVmZmVySGVscGVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRQaXhlbEJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNo
YXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9wdWxhdGVH
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmRlY29kZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFy
ZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1v
cnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9w
dWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6Q0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NH
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWY8V2Vi
Q29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5j
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2VEYXRhPj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oklt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpz
aGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFn
ZURhdGFUb0NvbXBsZXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURh
dGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOgorCiAyMDIxLTA1LTA5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIElQQyB0ZXN0aW5nIEFQSSBz
aG91bGQgaGF2ZSB0aGUgYWJpbGl0eSB0byBzZW5kIGFuZCByZWNlaXZlIHNoYXJlZCBtZW1vcnkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDE2ICsxOTgsMTYgQEAgdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6bm90aWZ5TWFyawogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlQnVmZmVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKLSAgICBw
YWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVyaW5nUmVzdWx0
c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVy
aW5nUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwotICAgIHBhaW50SW1h
Z2VEYXRhVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBh
aW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkQ29tcG9zaXRlZFJl
c3VsdHNGb3JQYWludGluZygpLCBpbWFnZUJ1ZmZlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludEltYWdlRGF0YVRv
SW1hZ2VCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4mJiBpbWFnZURhdGEsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVs
QnVmZmVyPiYmIHBpeGVsQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAvLyBGSVhNRTog
V2UgZG8gbm90IGhhdmUgZnVuY3Rpb25pbmcgcmVhZC93cml0ZSBmZW5jZXMgaW4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC4gVGh1cyB0aGlzIGlzIHN5bmNocm9ub3VzLApAQCAtMjE5LDggKzIxOSw4
IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50SW1hZ2UKICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbmRlcmluZ0JhY2tlbmQtPnJlbW90ZVJlc291cmNlQ2Fj
aGUoKS5jYWNoZWRJbWFnZUJ1ZmZlcih0YXJnZXQpKSB7CiAgICAgICAgICAgICAvLyBIZXJlIHdl
IGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29tbWFuZHMgZm9yIGltYWdlQnVmZmVy
LiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBmb3IgZW1wdHkKICAgICAgICAgICAg
IC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gYWRkIGRpc3BsYXkg
bGlzdHMuCi0gICAgICAgICAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBpbWFn
ZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRB
dHRyaWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmNsZWFyUmVjdCh7IEludFBvaW50KCksIGlt
YWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpIH0pOwogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVs
eSAiZmx1c2giIGltcGxlbWVudGF0aW9uIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgb3Zlcmxv
YWRzIG9yZGVyaW5nIGFuZCBlZmZlY3RzLgpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgJKHJl
dmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAg
cHJvdGVjdGVkOgogCiAjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNH
ZW5lcmF0ZWQuaCIgLy8gTk9MSU5UCiAKLSAgICB2b2lkIHBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1
ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBw
YWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZl
cj4mJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
PiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVmUHRyPElQQzo6U3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+IG1fc3RyZWFtQ29ubmVjdGlv
bjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4
NCw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIE5vdFIKICAgICB2b2lk
IE11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8aW50MzJfdD4gZmlyc3RzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGNv
dW50cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBpbnN0YW5jZUNvdW50cywgaW50MzJf
dCBkcmF3Y291bnQpCiAgICAgdm9pZCBNdWx0aURyYXdFbGVtZW50c0FOR0xFKHVpbnQzMl90IG1v
ZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gY291bnRzLCB1aW50MzJfdCB0eXBlLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IG9mZnNldHMsIGludDMyX3QgZHJhd2NvdW50KQog
ICAgIHZvaWQgTXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSh1aW50MzJfdCBtb2RlLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpB
cnJheVJlZmVyZW5jZTxpbnQzMl90PiBvZmZzZXRzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMy
X3Q+IGluc3RhbmNlQ291bnRzLCBpbnQzMl90IGRyYXdjb3VudCkKLSAgICB2b2lkIFBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgLT4gKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cworICAgIHZvaWQgUGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9QaXhlbEJ1ZmZlcigpIC0+IChPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcmV0dXJu
VmFsdWUpIFN5bmNocm9ub3VzCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc5LDExICsxMzc5
LDExIEBACiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAg
IG1fY29udGV4dC0+bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBtYWtlR0NH
TFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihjb3VudHMuZGF0YSgpKSwg
Y291bnRzLnNpemUoKSksIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xpbnQqPihvZmZzZXRzLmRhdGEoKSksIG9mZnNldHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVpKj4oaW5zdGFuY2VDb3VudHMuZGF0YSgp
KSwgaW5zdGFuY2VDb3VudHMuc2l6ZSgpKSwgZHJhd2NvdW50KTsKICAgICB9Ci0gICAgdm9pZCBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHZv
aWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKICAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHJldHVyblZhbHVl
ID0geyB9OworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcmV0dXJuVmFs
dWUgPSB7IH07CiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Ci0gICAg
ICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpOworICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9QaXhlbEJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KHJldHVyblZhbHVlKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3MjU1
KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVtb3RlSW1hZ2VCdWZm
ZXIgOiBwdWJsaWMgV2ViQ29yZQogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0g
V2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFz
ZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXI6Om1fYmFja2VuZDsKLSAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6
cHV0SW1hZ2VEYXRhOworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhl
bEJ1ZmZlcjsKIAogcHVibGljOgogICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9y
bWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQpAQCAtNzYsMTYgKzc2LDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBhcHBs
eShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS5pczxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpKSB7Ci0gICAgICAgICAgICBhdXRv
JiBnZXRJbWFnZURhdGFJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldElt
YWdlRGF0YT4oKTsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBn
ZXRJbWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7Ci0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQucG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoaW1hZ2VEYXRhLmdldCgp
KTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVsQnVm
ZmVyPigpKSB7CisgICAgICAgICAgICBhdXRvJiBnZXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdl
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KCk7CisgICAgICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
KGdldFBpeGVsQnVmZmVySXRlbS5vdXRwdXRGb3JtYXQoKSwgZ2V0UGl4ZWxCdWZmZXJJdGVtLnNy
Y1JlY3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucG9wdWxhdGVH
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShXVEZNb3ZlKHBpeGVsQnVmZmVyKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHB1
dEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VE
YXRhPigpOwotICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRG
b3JtYXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5z
cmNSZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0u
ZGVzdEZvcm1hdCgpKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlB1dFBpeGVsQnVmZmVyPigpKSB7CisgICAgICAgICAgICBhdXRvJiBwdXRQaXhlbEJ1ZmZlckl0
ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KCk7Cisg
ICAgICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1ZmZlckl0ZW0uaW5wdXRGb3JtYXQo
KSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnBpeGVsQnVmZmVyKCksIHB1dFBpeGVsQnVmZmVySXRlbS5z
cmNSZWN0KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0UG9pbnQoKSwgcHV0UGl4ZWxCdWZmZXJJ
dGVtLmRlc3RGb3JtYXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNSw2NSArMzE1LDY1IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6c2V0TmV4dEl0ZW0KICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3t7IGlkZW50
aWZpZXIsIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksIGRlc3RpbmF0aW9u
SWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQgfSwgV1RGOjpu
dWxsb3B0IH19OwogfQogCi1PcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVy
KHNpemVfdCBieXRlQ291bnQpCitPcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJI
ZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCkKIHsKLSAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJO
X1ZBTFVFKCFtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSB8fCBieXRlQ291bnQgPiBtX2dldElt
YWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCBXVEY6Om51bGxvcHQsICJUaGUgZXhpc3Rpbmcg
U2htZW0gZm9yIGdldEltYWdlRGF0YSgpIGlzIGFscmVhZHkgYmlnIGVub3VnaCB0byBoYW5kbGUg
dGhlIHJlcXVlc3QiKTsKKyAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFtX2dl
dFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5IHx8IGJ5dGVDb3VudCA+IG1fZ2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnktPnNpemUoKSwgV1RGOjpudWxsb3B0LCAiVGhlIGV4aXN0aW5nIFNobWVtIGZv
ciBnZXRQaXhlbEJ1ZmZlcigpIGlzIGFscmVhZHkgYmlnIGVub3VnaCB0byBoYW5kbGUgdGhlIHJl
cXVlc3QiKTsKIAogICAgIGlmIChieXRlQ291bnQgPiA2NCAqIE1CKSB7CiAgICAgICAgIC8vIEp1
c3QgYSBzYW5pdHkgY2hlY2suIEEgNEsgaW1hZ2UgaXMgMzZNQi4KICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
KCk7Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9j
YXRlKGJ5dGVDb3VudCk7CisgICAgZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCk7
CisgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2Nh
dGUoYnl0ZUNvdW50KTsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYg
KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7Ci0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZSho
YW5kbGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1fZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5LT5zaXplKCkgOiAwIH07CisgICAgaWYgKG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1v
cnkpCisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZSho
YW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIHJldHVybiBT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeSA/IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSA6IDAg
fTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVs
QnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRl
U2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVDb3VudCkpCisgICAgaWYgKGF1
dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoYnl0
ZUNvdW50KSkKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUudmFsdWUo
KSkpOwogICAgIGVsc2UKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAotdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRQaXhlbEJ1
ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOworICAgIGNvbXBsZXRp
b25IYW5kbGVyKG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwogfQogCi12b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdl
RGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1v
cnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJ
UEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVt
b3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVDb3VudCkpCi0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoaGFuZGxlLnZhbHVlKCkpLCBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7
CisgICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZm
ZXJIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSho
YW5kbGUudmFsdWUoKSksIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwogICAgIGVsc2UKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9LCBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSk7
CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldEltYWdlRGF0YVNo
YXJlZE1lbW9yeSgpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkg
PSBudWxscHRyOworICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxscHRyOwog
fQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5KFdlYkNvcmU6OkltYWdlRGF0YSogaW1hZ2VEYXRhKQordm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KE9wdGlvbmFs
PFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmIHBpeGVsQnVmZmVyKQogewotICAgIE1FU1NBR0VfQ0hF
Q0sobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnksICJXZSBjYW4ndCBydW4gZ2V0SW1hZ2VEYXRh
IHdpdGhvdXQgYSBidWZmZXIgdG8gd3JpdGUgaW50byIpOworICAgIE1FU1NBR0VfQ0hFQ0sobV9n
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRQaXhlbEJ1ZmZlciB3
aXRob3V0IGEgYnVmZmVyIHRvIHdyaXRlIGludG8iKTsKIAotICAgIGlmIChpbWFnZURhdGEpIHsK
LSAgICAgICAgTUVTU0FHRV9DSEVDSyhpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCkgPD0g
bV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4gb2Yg
Z2V0SW1hZ2VEYXRhIGlzIHRvbyBzbWFsbCIpOwotICAgICAgICBtZW1jcHkobV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBpbWFnZURh
dGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCkpOworICAgIGlmIChwaXhlbEJ1ZmZlcikgeworICAgICAg
ICBNRVNTQUdFX0NIRUNLKHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgpIDw9IG1fZ2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4gb2YgZ2V0
UGl4ZWxCdWZmZXIgaXMgdG9vIHNtYWxsIik7CisgICAgICAgIG1lbWNweShtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5LT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpLCBwaXhl
bEJ1ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1lbXNl
dChtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBtX2dldEltYWdlRGF0YVNo
YXJlZE1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgbWVtc2V0KG1fZ2V0UGl4ZWxCdWZmZXJTaGFy
ZWRNZW1vcnktPmRhdGEoKSwgMCwgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+c2l6ZSgp
KTsKIAotICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlLnNpZ25hbCgpOworICAgIG1fZ2V0UGl4
ZWxCdWZmZXJTZW1hcGhvcmUuc2lnbmFsKCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC01MjEsOCArNTIxLDggQEAgT3B0aW9uYWw8RGlzcGxh
eUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVQogICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPERpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOworICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoK
KyAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZm
ZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwogICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwog
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKQEAgLTU4MSw3ICs1ODEs
NyBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VCiAgICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRy
YW5zbGF0ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOiB7
CisgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOiB7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZXh0SXRlbUJ1ZmZlclRv
UmVhZChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbik7CiAKLSAgICB2b2lkIHBv
cHVsYXRlR2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KFdlYkNvcmU6OkltYWdlRGF0YSopOworICAg
IHZvaWQgcG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShPcHRpb25hbDxXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcj4mJik7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNz
dXJlKCkgY29uc3Q7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgc3VibWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbik7CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZl
ckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGluaXRpYWxE
ZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVhZGVySGFuZGxl
JiwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbik7CiAKLSAgICBPcHRpb25hbDxTaGFyZWRNZW1vcnk6
OklQQ0hhbmRsZT4gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKHNpemVf
dCBieXRlQ291bnQpOworICAgIE9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRh
dGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KTsK
ICAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNlUmVxdWVzdCgpOwogCiAgICAgLy8gSVBD
OjpNZXNzYWdlU2VuZGVyLgpAQCAtMTIzLDEwICsxMjMsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBN
ZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBX
ZWJDb3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKICAgICB2b2lkIHdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dh
a2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKLSAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdl
dEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7Ci0gICAgdm9pZCBzZW1hcGhvcmVGb3JH
ZXRJbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYp
PiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdl
RGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKLSAgICB2
b2lkIGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsKKyAgICB2b2lkIHVwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKKyAgICB2
b2lkIHNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CisgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlBbmRT
ZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNl
bWFwaG9yZSYpPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eSgpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKQEAgLTE2MSw4ICsxNjEsOCBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBS
ZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxl
czsKICAgICBPcHRpb25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24+IG1fcGVuZGluZ1dha2V1
cEluZm87CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsK
LSAgICBJUEM6OlNlbWFwaG9yZSBtX2dldEltYWdlRGF0YVNlbWFwaG9yZTsKLSAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsKKyAgICBJUEM6OlNlbWFw
aG9yZSBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7CiAgICAgU2NvcGVkUmVuZGVyaW5nUmVzb3Vy
Y2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMCBAQAogbWVzc2FnZXMg
LT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIGVudW06dWludDhfdCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZv
cm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKICAgICBXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KHN0cnVjdCBXZWJL
aXQ6OkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzIGFyZ3VtZW50cykKLSAgICBVcGRh
dGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCi0gICAgU2Vt
YXBob3JlRm9yR2V0SW1hZ2VEYXRhKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3lu
Y2hyb25vdXMKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURh
dGEodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSBoYW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKLSAgICBEZXN0
cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKKyAgICBTZW1hcGhvcmVGb3JHZXRQaXhl
bEJ1ZmZlcigpIC0+IChJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAg
VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3Qg
Ynl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIElQ
Qzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKKyAgICBEZXN0cm95R2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnkoKQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJp
bmcgdXJsU3RyaW5nKSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJp
bmcgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rv
cjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldEJHUkFEYXRhRm9ySW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwpJbmRleDog
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE0LDc3ICszMTE0LDYgQEAgT3B0aW9uYWw8V2Vi
Q29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpNZQogfQogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci12b2lkIEFyZ3VtZW50Q29k
ZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUmVmPFdlYkNvcmU6OkltYWdlRGF0YT4mIGltYWdlRGF0YSkKLXsKLSAgICBlbmNvZGVyIDw8
IGltYWdlRGF0YS0+c2l6ZSgpOwotCi0gICAgYXV0byYgcmF3RGF0YSA9IGltYWdlRGF0YS0+ZGF0
YSgpOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0RhdGEuYnl0ZUxl
bmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLmRhdGEo
KSwgcmF3RGF0YS5ieXRlTGVuZ3RoKCksIDEpOwotfQotCi10ZW1wbGF0ZQotdm9pZCBBcmd1bWVu
dENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXIm
LCBjb25zdCBSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotdGVtcGxhdGUKLXZvaWQgQXJndW1l
bnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9u
RW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBjb25zdCBSZWY8V2ViQ29yZTo6SW1h
Z2VEYXRhPiYpOwotCi1PcHRpb25hbDxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gQXJndW1lbnRD
b2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEludFNpemU+IGltYWdlRGF0YVNpemU7Ci0gICAgZGVjb2RlciA+PiBp
bWFnZURhdGFTaXplOwotICAgIGlmICghaW1hZ2VEYXRhU2l6ZSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBkYXRhTGVuZ3RoOwotICAgIGRl
Y29kZXIgPj4gZGF0YUxlbmd0aDsKLSAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvIHJhd0RhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCgqZGF0YUxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPmxlbmd0aCgpLCAxKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUoKmltYWdlRGF0YVNpemUsIFdURk1vdmUocmF3RGF0YSkpOwotICAgIGlm
ICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IHsgaW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxsKCkgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRh
PiYgaW1hZ2VEYXRhKQotewotICAgIGlmICghaW1hZ2VEYXRhKSB7Ci0gICAgICAgIGVuY29kZXIg
PDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7
Ci0gICAgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZShlbmNv
ZGVyLCBpbWFnZURhdGEuY29weVJlZigpLnJlbGVhc2VOb25OdWxsKCkpOwotfQotCi10ZW1wbGF0
ZQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotCi10ZW1wbGF0
ZQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2Rl
KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4mKTsKLQotT3B0aW9uYWw8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+IEFyZ3VtZW50Q29k
ZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBib29sIGlzRW5nYWdlZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5nYWdl
ZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIWlzRW5nYWdlZCkK
LSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9OwotCi0gICAgYXV0byByZXN1bHQgPSBBcmd1bWVu
dENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZGVjb2RlKGRlY29kZXIpOwotICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiB7IFdU
Rk1vdmUoKnJlc3VsdCkgfTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxF
KFdFQkdMKQogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRlclR5cGVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0luZGV4ZWREQi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRN
b2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgpAQCAtODA0
LDE4ICs4MDMsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiB9
OwogI2VuZGlmCiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNv
cmU6OkltYWdlRGF0YT4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+IGRl
Y29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJl
ZjxXZWJDb3JlOjpJbWFnZURhdGE+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4K
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFJlZjxXZWJDb3JlOjpJbWFn
ZURhdGE+Jik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+PiBk
ZWNvZGUoRGVjb2RlciYpOwotfTsKLQogI2lmIEhBVkUoUEFTU0tJVF9JTlNUQUxMTUVOVFMpCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRJbnN0YWxsbWVu
dENvbmZpZ3VyYXRpb24+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb24mKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXll
clRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAog
I2lmIEVOQUJMRShDR19ESVNQTEFZX0xJU1RfQkFDS0VEX0lNQUdFX0JVRkZFUikKIAogI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURh
dGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BpeGVsQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViS2l0
QWRkaXRpb25zL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckFkZGl0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTEwNSwxMyArMTA1LDEzIEBAIFZlY3Rvcjx1
aW50OF90PiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIKICAgICByZXR1cm4geyB9OwogfQogCi1S
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxXZWJD
b3JlOjpQaXhlbEJ1ZmZlcj4gQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXZvaWQgQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIENHRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24sIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NH
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gTk9URTogVGhlc2UgYWxsIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIFJlZlB0cjxXZWJD
b3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNv
cHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6V2ViQ29yZTo6UGl4ZWxC
dWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRV
cHBlckxlZnRDb3JuZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BpeGVs
QnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTE2MywxNCArMTYzLDE0IEBAIFZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
Ojp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
K09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6
OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fYml0bWFwLT5kYXRhKCkp
OworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShp
bnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1f
Yml0bWFwLT5kYXRhKCkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIo
aW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQs
IG1fYml0bWFwLT5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMx
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg+CiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJ
bWFnZURhdGE7Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBTaGFyZWFibGVCaXRt
YXA7CkBAIC02Myw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+
IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tp
bmdTdG9yZSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6
UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBA
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnQKIAogICAgIC8vIEZJWE1F
OiBXZSBjYW5ub3Qgc3luY2hyb25pemUgc28gdGhhdCB3ZSB3b3VsZCBrbm93IG5vIHBlbmRpbmcg
b3BlcmF0aW9ucyBhcmUgdXNpbmcgdGhlIGBidWZmZXJgLgogCi0gICAgLy8gRklYTUU6IEN1cnJl
bnRseSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpnZXRJbWFnZURhdGEgZXQgYWwgZG8gbm90IHdh
aXQgZm9yIHRoZSBmbHVzaGVzIG9mIHRoZSBpbWFnZXMKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5
IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmdldFBpeGVsQnVmZmVyIGV0IGFsIGRvIG5vdCB3YWl0
IGZvciB0aGUgZmx1c2hlcyBvZiB0aGUgaW1hZ2VzCiAgICAgLy8gaW5zaWRlIHRoZSBkaXNwbGF5
IGxpc3RzLiBSYXRoZXIsIGl0IGFzc3VtZXMgdGhhdCBwcm9jZXNzaW5nIGl0cyBzZXF1ZW5jZSAo
ZS5nLiB0aGUgZGlzcGxheSBsaXN0KSB3aWxsIGVxdWFsIHRvIHJlYWQgZmx1c2ggYmVpbmcKICAg
ICAvLyBmdWxmaWxsZWQuIEZvciBiZWxvdywgd2UgY2Fubm90IGNyZWF0ZSBhIG5ldyBmbHVzaCBp
ZCBzaW5jZSB3ZSBnbyB0aHJvdWdoIGRpZmZlcmVudCBzZXF1ZW5jZSAoUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wgc2VxdWVuY2UpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eS5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzE1LDcgKzMxNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG11bHRpRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0
cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIGZpbmFsOwogICAgIHZv
aWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
b2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgZmluYWw7CiAgICAgdm9pZCBtdWx0aURyYXdF
bGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZz
ZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkg
ZHJhd2NvdW50KSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpIGZpbmFsOworICAgIE9wdGlvbmFsPFdlYkNvcmU6
OlBpeGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7
CiAgICAgLy8gRW5kIG9mIGxpc3QgdXNlZCBieSBnZW5lcmF0ZS1ncHVwLXdlYmdsIHNjcmlwdC4K
IAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCShyZXZpc2lvbiAyNzcy
NTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzY2LDExICsyMzY2LDExIEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
bXVsdGkKICAgICB9CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK09w
dGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKIHsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPiByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICBPcHRpb25hbDxXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcj4gcmV0dXJuVmFsdWUgPSB7IH07CiAgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKLSAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyOjpSZXBseShyZXR1cm5WYWx1
ZSkpOwogICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCiAgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwzOCArMTk0LDM4IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9CiAK
LSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZm
ZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IGltYWdlRGF0
YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFdlYkNv
cmU6OlBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIHNyY1JlY3Quc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1
ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHNpemVfdCBk
YXRhU2l6ZSA9IHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOwogCiAgICAgICAgIElQ
Qzo6VGltZW91dCB0aW1lb3V0ID0gNV9zOwotICAgICAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1l
bW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFyZWRNZW1vcnlGb3JHZXRJ
bWFnZURhdGEoZGF0YVNpemUsIHRpbWVvdXQpOworICAgICAgICBTaGFyZWRNZW1vcnkqIHNoYXJl
ZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5zaGFyZWRNZW1vcnlGb3JH
ZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSwgdGltZW91dCk7CiAgICAgICAgIGlmICghc2hhcmVkTWVt
b3J5KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgICAgIGF1dG8mIG11dGFibGVUaGlzID0gY29uc3RfY2FzdDxSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5Jj4oKnRoaXMpOwotICAgICAgICBtdXRhYmxlVGhpcy5tX2RyYXdp
bmdDb250ZXh0LnJlY29yZGVyKCkuZ2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7
CisgICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRQaXhl
bEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOwogICAgICAgICBtdXRhYmxlVGhpcy5mbHVz
aERyYXdpbmdDb250ZXh0QXN5bmMoKTsKIAotICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKHRpbWVvdXQpKQotICAg
ICAgICAgICAgbWVtY3B5KGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5k
YXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT53YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKHRpbWVvdXQpKQorICAgICAgICAg
ICAgbWVtY3B5KHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEo
KSwgZGF0YVNpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1zZXQoaW1hZ2VEYXRh
LT5kYXRhKCkuZGF0YSgpLCAwLCBkYXRhU2l6ZSk7Ci0gICAgICAgIHJldHVybiBpbWFnZURhdGE7
CisgICAgICAgICAgICBtZW1zZXQocGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCksIDAsIGRhdGFT
aXplKTsKKyAgICAgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQorICAgIHZvaWQgcHV0UGl4
ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9LCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQgPSBXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlkZQogICAgIHsKLSAgICAg
ICAgLy8gVGhlIG1hdGggaW5zaWRlIEltYWdlRGF0YTo6Y3JlYXRlKCkgZG9lc24ndCBhZ3JlZSB3
aXRoIHRoZSBtYXRoIGluc2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSgpIGFi
b3V0IGhvdyBtX3Jlc29sdXRpb25TY2FsZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBpbiB0aGUg
SW1hZ2VCdWZmZXIuCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBwdXRJbWFnZURhdGEoKSBp
cyBvbmx5IGNhbGxlZCB3aGVuIHJlc29sdXRpb25TY2FsZSgpID09IDEuCisgICAgICAgIC8vIFRo
ZSBtYXRoIGluc2lkZSBQaXhlbEJ1ZmZlcjo6Y3JlYXRlKCkgZG9lc24ndCBhZ3JlZSB3aXRoIHRo
ZSBtYXRoIGluc2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKCkgYWJvdXQg
aG93IG1fcmVzb2x1dGlvblNjYWxlIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIGluIHRoZSBJbWFn
ZUJ1ZmZlci4KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHB1dFBpeGVsQnVmZmVyKCkgaXMg
b25seSBjYWxsZWQgd2hlbiByZXNvbHV0aW9uU2NhbGUoKSA9PSAxLgogICAgICAgICBBU1NFUlQo
cmVzb2x1dGlvblNjYWxlKCkgPT0gMSk7Ci0gICAgICAgIG1fZHJhd2luZ0NvbnRleHQucmVjb3Jk
ZXIoKS5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1
dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0KTsKICAgICB9CiAKICAgICBib29sIHByZWZlcnNQcmVwYXJhdGlvbkZvckRp
c3BsYXkoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw1MCArMTUwLDUwIEBAIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gUmVtb3RlUmVuZGVyaW5nQmFja2UKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotU2hhcmVk
TWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZvckdldElt
YWdlRGF0YShzaXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCB0aW1lb3V0KQorU2hhcmVkTWVt
b3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZvckdldFBpeGVs
QnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0IHRpbWVvdXQpCiB7CiAgICAgc2Vu
ZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKLSAgICBib29sIG5lZWRzU2hhcmVk
TWVtb3J5ID0gIW1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IHx8IGRhdGFTaXplID4gbV9nZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnlMZW5ndGg7Ci0gICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFt
X2dldEltYWdlRGF0YVNlbWFwaG9yZTsKKyAgICBib29sIG5lZWRzU2hhcmVkTWVtb3J5ID0gIW1f
Z2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldFBpeGVsQnVmZmVy
U2hhcmVkTWVtb3J5TGVuZ3RoOworICAgIGJvb2wgbmVlZHNTZW1hcGhvcmUgPSAhbV9nZXRQaXhl
bEJ1ZmZlclNlbWFwaG9yZTsKIAogICAgIGlmIChuZWVkc1NoYXJlZE1lbW9yeSkKLSAgICAgICAg
bV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBudWxscHRyOworICAgICAgICBtX2dldFBpeGVs
QnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKIAogICAgIFNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlIGhhbmRsZTsKICAgICBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmU7CiAKICAgICBpZiAobmVl
ZHNTaGFyZWRNZW1vcnkgJiYgbmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhv
cmVGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhOjpSZXBs
eShoYW5kbGUsIHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVv
dXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdl
cyk7CisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpV
cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSks
IE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRT
ZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxlLCBzZW1hcGhvcmUpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpN
YWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOwogICAgIGVsc2UgaWYgKG5lZWRzU2hh
cmVkTWVtb3J5KQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGRhdGFTaXplKSwgTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdl
RGF0YTo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91
dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2Vz
KTsKKyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVw
ZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVy
OjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJ
UEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOwog
ICAgIGVsc2UgaWYgKG5lZWRzU2VtYXBob3JlKQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKCksIE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJl
cGx5KHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQpOwor
ICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBo
b3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShzZW1hcGhvcmUpLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0KTsKIAogICAgIGlmICghaGFuZGxlLmhhbmRsZS5p
c051bGwoKSkgewotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IFNoYXJlZE1l
bW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOwotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeUxlbmd0aCA9IGhhbmRsZS5k
YXRhU2l6ZTsKKyAgICAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IFNoYXJlZE1l
bW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOworICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3RoID0gaGFuZGxl
LmRhdGFTaXplOwogICAgIH0KICAgICBpZiAobmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIG1fZ2V0
SW1hZ2VEYXRhU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUpOworICAgICAgICBtX2dldFBp
eGVsQnVmZmVyU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUpOwogCi0gICAgaWYgKG1fZGVz
dHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1f
ZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLnN0b3AoKTsKLSAgICBtX2Rlc3Ry
b3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lci5zdGFydE9uZVNob3QoNV9zKTsKKyAgICBp
ZiAobV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5pc0FjdGl2ZSgpKQor
ICAgICAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLnN0b3AoKTsK
KyAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLnN0YXJ0T25lU2hv
dCg1X3MpOwogCi0gICAgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LmdldCgpOwor
ICAgIHJldHVybiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LmdldCgpOwogfQogCi1ib29s
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxl
dGUoSVBDOjpUaW1lb3V0IHRpbWVvdXQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdGltZW91dCkK
IHsKLSAgICBBU1NFUlQobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOwotICAgIHJldHVybiBtX2dl
dEltYWdlRGF0YVNlbWFwaG9yZS0+d2FpdEZvcih0aW1lb3V0KTsKKyAgICBBU1NFUlQobV9nZXRQ
aXhlbEJ1ZmZlclNlbWFwaG9yZSk7CisgICAgcmV0dXJuIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhv
cmUtPndhaXRGb3IodGltZW91dCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKQogewot
ICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5KCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlz
cGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBtX2dldFBpeGVs
QnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKSwgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3Nh
Z2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCiBTdHJpbmcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw3ICs0OCw3IEBAIGNsYXNzIERpc3BsYXlMaXN0OwogY2xhc3MgSXRlbTsKIH0KIGNsYXNzIEZs
b2F0U2l6ZTsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogZW51bSBjbGFz
cyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIDogdWludDhfdDsKIGVudW0gY2xhc3MgRGVzdGluYXRp
b25Db2xvclNwYWNlIDogdWludDhfdDsKIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7
CkBAIC03OCw5ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBzZW5kRGVmZXJyZWRX
YWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5
Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsKLSAgICBib29s
IHdhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKElQQzo6VGltZW91dCk7Ci0gICAgdm9pZCBk
ZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCk7CisgICAgU2hhcmVkTWVtb3J5KiBzaGFy
ZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihzaXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCk7
CisgICAgYm9vbCB3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCk7
CisgICAgdm9pZCBkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKTsKIAogICAgIC8v
IElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzYsMTAgKzEzNiwxMCBAQCBwcml2YXRl
OgogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gbV9j
dXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXI7CiAgICAgT3B0aW9uYWw8R1BV
UHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHM+IG1fZGVmZXJyZWRXYWtldXBNZXNzYWdlQXJn
dW1lbnRzOwogICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nSXRlbXNUb0FwcGVuZEJlZm9yZVNlbmRp
bmdXYWtldXAgeyAwIH07Ci0gICAgT3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0SW1hZ2VE
YXRhU2VtYXBob3JlOwotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5OwotICAgIHVpbnQ2NF90IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5TGVuZ3Ro
IHsgMCB9OwotICAgIFdlYkNvcmU6OlRpbWVyIG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1l
bW9yeVRpbWVyIHsgKnRoaXMsICZSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lH
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgfTsKKyAgICBPcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4g
bV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dl
dFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5OworICAgIHVpbnQ2NF90IG1fZ2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnlMZW5ndGggeyAwIH07CisgICAgV2ViQ29yZTo6VGltZXIgbV9kZXN0cm95R2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lciB7ICp0aGlzLCAmUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfTsKICAgICBXZWFr
UHRyPEdQVVByb2Nlc3NDb25uZWN0aW9uPiBtX2dwdVByb2Nlc3NDb25uZWN0aW9uOwogfTsKIApJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTMgKzEyMCwxMyBAQCBWZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1CiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
JikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW1hZ2VEYXRhJiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKK3Zv
aWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9j
b2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAs
OCArNjAsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQ
b2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBp
eGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdp
bkF0VXBwZXJMZWZ0Q29ybmVyID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgY2Fu
TWFwQmFja2luZ1N0b3JlID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428174</attachid>
            <date>2021-05-10 08:44:31 -0700</date>
            <delta_ts>2021-05-10 10:17:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225584-20210510084430.patch</filename>
            <type>text/plain</type>
            <size>226390</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBAQAorMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhl
ciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIHVzZSBvZiB0aGUgRE9NIGxheWVyICYgcmVmLWNvdW50ZWQgSW1hZ2VEYXRhIGNsYXNzIHdp
dGggdGhlIG5ldyAKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgUGl4ZWxCdWZmZXIgY2xhc3MsIHdo
aWNoIEltYWdlRGF0YSBub3cgdXNlcyBpbnRlcm5hbGx5LgorCisgICAgICAgIFNpbmNlIFBpeGVs
QnVmZmVyIGlzIG5vdC1yZWZlcmVuY2UgY291bnRlZCBvciBoZWFwLWFsbG9jYXRlZCBpbiBtb3N0
IGNhc2VzLAorICAgICAgICBtYW55IHVzZXMgb2YgUmVmUHRyPEltYWdlRGF0YT4gdG8gaW5kaWNh
dGUgYSBwb3RlbnRpYWxseSBudWxsIEltYWdlRGF0YSBoYXZlCisgICAgICAgIGJlZW4gcmVwbGFj
ZWQgd2l0aCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4uIEdlbmVyYWxseSwgdGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gdGhhdCB3YXMgb25s
eSBuZWVkZWQgZm9yIHRoZSBET00gb2JqZWN0LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdG8g
bWFueSBmdW5jdGlvbnMgd2l0aCBJbWFnZURhdGEgaW4gdGhlaXIgbmFtZSBub3cgaGF2ZQorICAg
ICAgICBQaXhlbEJ1ZmZlciBpbiB0aGVpciBuYW1lIGluc3RlYWQsIGUuZy4gSW1hZ2VCdWZmZXI6
OmdldEltYWdlRGF0YSBpcyBub3cKKyAgICAgICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
ICh0aG91Z2ggSSB0aGluayBjaGFuZ2luZyB0aGlzIGluIHRoZSBmdXR1cmUgdG8gCisgICAgICAg
IEltYWdlQnVmZmVyOjpjb3B5UGl4ZWxCdWZmZXIgaXMgYSBnb29kIGlkZWEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ltYWdl
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpwaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0UGl4ZWxCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQnVmZmVyU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBl
bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpk
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZl
Q29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNp
emVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdp
bmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpQdXRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQ
dXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6OkdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcjo6cGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YTo6R2V0SW1hZ2VEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE6Om91
dHB1dEZvcm1hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0SW1hZ2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmlucHV0Rm9ybWF0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE6OmRlc3RQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZXN0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
RGF0YVRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0
c0ZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgcHJvdGVjdGlvbiBv
ZiB0aGUgcGl4ZWwgYnVmZmVyIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSByZW1v
dmVkIGluIHIyNzcyMzcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3NiwxMyArMTA3NiwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSB9KTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgaWYg
KCFwaXhlbEJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFy
ZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHBpeGVsQnVmZmVyLT5kYXRh
KCkucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewog
ICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJy
b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTUwLDYgKzMxNTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICBJbnRTaXplIGltYWdlRGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKICAgICAgICAgaW1h
Z2VEYXRhU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBD
cmVhdGluZyB0aGlzIEltYWdlRGF0YSBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgc2tpcCBy
aWdodCB0byBjcmVhdGluZyBhIFBpeGVsQnVmZmVyIGRpcmVjdGx5LgogICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVNpemUsIGFycmF5LnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgZmFpbCgp
OwpAQCAtMzE2Miw3ICszMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6
ZXJvKCksIGxvZ2ljYWxTaXplIH0pOworICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZm
ZXIoKSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRv
IGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
YnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXph
dGlvblN0YXRlKSkpOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsNyArNzQzLDcgQEAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhU
TUxDYW52YXNFbAogI2lmIFVTRShDRykKICAgICAvLyBUcnkgdG8gZ2V0IEltYWdlRGF0YSBmaXJz
dCwgYXMgdGhhdCBtYXkgYXZvaWQgbG9zc3kgY29udmVyc2lvbnMuCiAgICAgaWYgKGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBVbmNhY2hlZFN0cmluZyB7
IGRhdGFVUkwoKmltYWdlRGF0YSwgZW5jb2RpbmdNSU1FVHlwZSwgcXVhbGl0eSkgfTsKKyAgICAg
ICAgcmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgZGF0YVVSTChpbWFnZURhdGEtPnBpeGVsQnVmZmVy
KCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpIH07CiAjZW5kaWYKIAogICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC03NzQsNyArNzc0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIFVTRShDRykKICAgICBpZiAoYXV0byBp
bWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYjsK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0gZGF0YSgqaW1hZ2VEYXRhLCBlbmNv
ZGluZ01JTUVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRh
ID0gZGF0YShpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxp
dHkpOwogICAgICAgICBpZiAoIWJsb2JEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJsb2Ig
PSBCbG9iOjpjcmVhdGUoJmRvY3VtZW50KCksIFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01J
TUVUeXBlKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgV1RG
TW92ZShibG9iKSk7CkBAIC04MTIsNyArODEyLDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldAogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2Nv
bnRleHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVy
biBJbWFnZURhdGE6OmNyZWF0ZShkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
bV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJp
dG1hcC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDYsMTAgKzgwNiw5IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyBJZiBubyBjcm9wcGluZywgcmVz
aXppbmcsIGZsaXBwaW5nLCBldGMuIGFyZSBuZWVkZWQsIHRoZW4gc2ltcGx5IHVzZSB0aGUKICAg
ICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBhbHBoYVByZW11
bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEo
b3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKLSAgICBpZiAoc291cmNlUmVjdGFuZ2xlLnJldHVy
blZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJuVmFs
dWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkKLSAgICAgICAgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUKLSAgICAgICAgJiYgb3B0aW9u
cy5pbWFnZU9yaWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5v
bmUpIHsKLSAgICAgICAgYml0bWFwRGF0YS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIGlmIChz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5sb2NhdGlvbigpLmlzWmVybygpICYmIHNvdXJj
ZVJlY3RhbmdsZS5yZXR1cm5WYWx1ZSgpLnNpemUoKSA9PSBpbWFnZURhdGEtPnNpemUoKSAmJiBz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZSAmJiBvcHRp
b25zLmltYWdlT3JpZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6
Tm9uZSkgeworICAgICAgICBiaXRtYXBEYXRhLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgc291
cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworICAgICAgICAKICAgICAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSkpOwogICAgICAgICAvLyBUaGUgcmVz
dWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRp
b24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgICAgICBwcm9taXNlLnJlc29sdmUoV1RG
TW92ZShpbWFnZUJpdG1hcCkpOwpAQCAtODIzLDcgKzgyMiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6
OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVm
ZmVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRydWUsIFdURk1vdmUocHJvbWlzZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHRlbXBCaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRSZWN0
KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgdGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhLT5waXhl
bEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGVtcEJpdG1hcERhdGEsIGRlc3RSZWN0LCBzb3VyY2VSZWN0
YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNp
emVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmll
bnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIxICs0MywxNiBAQCBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gSW1hZ2VECiAgICAgcmV0dXJuIGNoZWNrZWREYXRh
U2l6ZTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgaWYgKCFzdyB8fCAhc2gpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIEludFNpemUg
c2l6ZShzdywgc2gpOwotICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNp
emUpOwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoaXMg
c2l6ZSJfcyB9OwotICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOwotICAgIGlmICghYnl0ZUFy
cmF5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhICJyZWFsIiBv
dXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxsZWQgb24gaXQ/
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9mIG1lbW9yeSJf
cyB9OwotICAgIH0KLSAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoV1RGTW92ZShwaXhlbEJ1ZmZlcikpKTsKK30K
KworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKFdURk1vdmUoKnBpeGVs
QnVmZmVyKSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC04MCw2ICs3NSwyMyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZURhdGE6OmNyZWF0ZShjb25zCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdU
Rk1vdmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKK0V4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJ
bWFnZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCit7CisgICAgaWYgKCFz
dyB8fCAhc2gpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owor
ICAgIEludFNpemUgc2l6ZShzdywgc2gpOworICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6
OmRhdGFTaXplKHNpemUpOworICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVm
ZmVyIG9mIHRoaXMgc2l6ZSJfcyB9OworICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOworICAg
IGlmICghYnl0ZUFycmF5KSB7CisgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBi
ZSBhICJyZWFsIiBvdXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBj
YWxsZWQgb24gaXQ/CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0
IG9mIG1lbW9yeSJfcyB9OworICAgIH0KKyAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgp
IH0pKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25h
bDx1bnNpZ25lZD4gc2gpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5n
dGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZURhdGE+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWdu
ZWQgc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SW1hZ2VEYXRhPiBjcmVhdGUo
UGl4ZWxCdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQg
c2gpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gY3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFs
PHVuc2lnbmVkPiBzaCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCkBAIC01
Miw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CiAgICAgUGl4
ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsg
fQogCisgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbEJ1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlRGF0YShQaXhl
bEJ1ZmZlciYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDE0ICsyMTk5LDE0IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAot
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKLSAgICBpZiAoIWltYWdl
RGF0YSkgeworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBidWZmZXItPmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7Cisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8g
Z2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURh
dGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJl
dHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIHsgeyBJbWFnZURhdGE6OmNyZWF0ZShXVEZNb3Zl
KCpwaXhlbEJ1ZmZlcikpIH0gfTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBpbnQgZHgsIGludCBkeSkKQEAgLTIy
NDYsNyArMjI0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW0K
ICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBk
YXRhLmhlaWdodCgpIH0pOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAg
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVz
dE9mZnNldCB9KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzYsMTIgKzEy
MzYsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbgogICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKmJhc2UuYnVmZmVyKCkpOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoQ2xlYXJDYWxsZXJPdGhlcik7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4dHVyZUV4dGVuc2lvbkZs
YWdzKCkgY29uc3QKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgogICAgICAg
ICAgICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC0+ZXh0cmFjdFBpeGVsQnVmZmVyKHBpeGVscy0+cGl4ZWxCdWZmZXIoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBhZGp1c3RlZFNvdXJjZUltYWdl
UmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlbW92ZVNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChX
ZWJHTENvbnRleHRPYmplY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNl
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VC
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b25jcmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMCwyMCArMjMwLDIwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAg
ICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzY0LDEyICs3NjQsMTAgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRh
LCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGlu
dCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFn
ZURhdGEtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IHBpeGVsQnVmZmVyLnNpemUoKS53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBwaXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICB1bnNpZ25lZCBwYWNrZWRTaXplOwogICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCkBAIC03NzksNyArNzc3LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0
YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFn
ZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9O
b3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhwaXhlbEJ1
ZmZlci5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFP
cDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBF
eHRlbnNpb25zR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEFWRk9VTkRBVElPTikKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1Y7CkBAIC0xMjkyLDcg
KzEyOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSBidWZmZXIgYWJzdHJhY3Rpb25zIHRo
YXQgdGhlIGNhbGxlciBzaG91bGQgaG9sZCBzZXBhcmF0ZSB0bwogICAgIC8vIHRoZSBjb250ZXh0
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpID0gMDsK
IAogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgbGF5ZXIgc2hvdWxk
IGJlIG1hcmtlZCBjb21wb3NpdGVkIGJ5CkBAIC0xMzQzLDExICsxMzQzLDExIEBAIHB1YmxpYzoK
ICAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgogICAgIHN0
YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVp
IGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0
ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0
aGUgZ2l2ZW4gUGl4ZWxCdWZmZXIgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNr
aW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBl
LAogICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
cy4gUmV0dXJucyB0cnVlCiAgICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4
dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKICAgICAvLyBk
YXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
OCArMTI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MiwyMjcgKzYyLDIyNyBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
CiAgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwgc291
cmNlUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwot
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHNy
Y1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICB1aW50OF90IGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKICAgICAgICAg
aWYgKCFhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgdWludDhfdCByID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbE9mZnNldCArIDIpOwogCiAgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAotICAgIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2lu
dDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAog
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRh
KSBjb25zdAogewogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXplKCku
YXJlYSgpLnVuc2FmZUdldCgpKTsKLSAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbG9naWNh
bFNpemUoKS53aWR0aCgpICogNDsKLSAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdygpOworICAgIHNpemVfdCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUo
KS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc291cmNlQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOwogCi0gICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpOworICAgIHVpbnQ4X3QqIHNvdXJjZVJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKTsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxv
Z2ljYWxTaXplKCkpOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBwaXhlbEZvcm1hdCgpLCBzb3VyY2VCeXRlc1BlclJvdywgc291cmNlUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2ljYWxTaXpl
KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlQ
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCBj
b25zdCB1aW50OF90KiBzcmNQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVsRm9ybWF0LCB1aW50
OF90KiBkZXN0UGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90
KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAgaWYgKCFhbHBoYSkgewot
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7Cisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9
IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4ZWxGb3JtYXQgPT0g
ZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVs
KVswXTsKKyAgICBpZiAoc291cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhl
bClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlUGl4ZWwpWzBd
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgotICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOwotICAgIGRlc3RQ
aXhlbFsxXSA9IHNyY1BpeGVsWzFdOwotICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOwot
ICAgIGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0g
PSBzb3VyY2VQaXhlbFsyXTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gc291cmNlUGl4ZWxb
MV07CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IHNvdXJjZVBpeGVsWzBdOworICAgIGRlc3Rp
bmF0aW9uUGl4ZWxbM10gPSBzb3VyY2VQaXhlbFszXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNvdXJjZVBpeGVsRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1h
dCwgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCkKIHsKLSAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgdWludDhfdCBhbHBoYSA9IHNvdXJjZVBpeGVsWzNdOwogICAgIGlmICgh
YWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Ci0gICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKHNyY1BpeGVsRm9ybWF0LCBzcmNQaXhlbCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0
UGl4ZWwpOworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzb3VyY2VQ
aXhlbEZvcm1hdCwgc291cmNlUGl4ZWwsIGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0
aW9uUGl4ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyY1BpeGVsRm9y
bWF0ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICBpZiAoc291
cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkgeworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzJdID0gKHNvdXJjZVBpeGVsWzJdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxwaGE7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0g
ICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwotICAgIGRlc3RQ
aXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7
CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IChzb3VyY2VQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFs
cGhhOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMF0gKiAyNTUpIC8g
YWxwaGE7CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IGFscGhhOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChQaXhlbEZvcm1hdCBz
cmNQaXhlbEZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIFBpeGVsRm9ybWF0IGRlc3RQ
aXhlbEZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3Jt
YXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNQaXhlbFszXTsKKyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAg
ICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKLSAgICAgICAgY29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoc3JjUGl4ZWxGb3JtYXQsIHNyY1BpeGVsLCBkZXN0UGl4ZWxGb3Jt
YXQsIGRlc3RQaXhlbCk7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KHNvdXJjZVBpeGVsRm9ybWF0LCBzb3VyY2VQaXhlbCwgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwg
ZGVzdGluYXRpb25QaXhlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3Jj
UGl4ZWxGb3JtYXQgPT0gZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgIGlmIChzb3VyY2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0KSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSAoc291cmNlUGl4ZWxb
MF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAo
c291cmNlUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxbM10gPSBhbHBoYTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KLSAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291cmNlUGl4ZWxbMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IChzb3VyY2VQ
aXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0g
YWxwaGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQo
UGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVs
LCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsKQogewotICAgIGlmIChzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQpIHsK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgIGlmIChzb3Vy
Y2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVsRm9ybWF0KSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2VQaXhlbClbMF07CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAg
ZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Ci0gICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxb
MV07Ci0gICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07Ci0gICAgZGVzdFBpeGVsWzNdID0g
c3JjUGl4ZWxbM107CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOwor
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICBkZXN0aW5hdGlv
blBpeGVsWzJdID0gc291cmNlUGl4ZWxbMF07CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IHNv
dXJjZVBpeGVsWzNdOwogfQogCiB0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKFBpeGVsRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgUGl4ZWxGb3JtYXQsIHVpbnQ4X3QqKT4KIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAotICAgIFBpeGVsRm9ybWF0IHNy
Y1BpeGVsRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywK
LSAgICBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgUGl4ZWxGb3Jt
YXQgc291cmNlUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90
KiBzb3VyY2VSb3dzLAorICAgIFBpeGVsRm9ybWF0IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndp
ZHRoKCkgKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKLSAg
ICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY1BpeGVsRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdFBp
eGVsRm9ybWF0LCAmZGVzdFJvd3NbeF0pOwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBj
b3B5RnVuY3Rvcihzb3VyY2VQaXhlbEZvcm1hdCwgJnNvdXJjZVJvd3NbeF0sIGRlc3RpbmF0aW9u
UGl4ZWxGb3JtYXQsICZkZXN0aW5hdGlvblJvd3NbeF0pOworICAgICAgICBzb3VyY2VSb3dzICs9
IHNvdXJjZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0aW5hdGlvblJvd3MgKz0gZGVzdGluYXRp
b25CeXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc291cmNlUGl4
ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBzb3VyY2VSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25CeXRl
c1BlclJvdywgdWludDhfdCogZGVzdGluYXRpb25Sb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAogewogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldHRpbmcgb3IgcHV0
dGluZyBwaXhlbCBkYXRhIHdpdGggZGVlcCBjb2xvciBidWZmZXJzLgotICAgIEFTU0VSVChzcmNQ
aXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc3JjUGl4ZWxGb3JtYXQgPT0gUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBBU1NFUlQoZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpSR0JBOCB8fCBkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBBU1NFUlQoc291cmNlUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJj
ZVBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGRlc3RpbmF0aW9uUGl4ZWxG
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKLSAgICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0
ID09IGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZUFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3Ms
IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0
aW9uUm93cywgc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgICAgICBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc291
cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlv
blBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIHNp
emUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKGRlc3RpbmF0
aW9uQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZD4oc291cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93
LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVy
Um93LCBkZXN0aW5hdGlvblJvd3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQ
aXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
Pihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRlc3Rp
bmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgc2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0aW5hdGlvbkFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBk
YXRhKSBjb25zdAogewotICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOworICAgIGF1dG8gc291cmNlUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNvdXJjZVJlY3QpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBzb3VyY2VSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBp
bnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgp
LCBzb3VyY2VSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CiAKLSAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQotICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVk
LngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGlu
YXRpb25SZWN0LnNldFgoLXNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0
U2NhbGVkLnkoKSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgp
KTsKKyAgICBpZiAoc291cmNlUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2V0WSgtc291cmNlUmVjdFNjYWxlZC55KCkpOwogCi0gICAgaWYgKGRlc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKLSAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCku
emVyb0ZpbGwoKTsKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSkKKyAgICAgICAgcGl4ZWxCdWZmZXItPmRhdGEoKS56ZXJvRmlsbCgpOwog
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgdW5z
aWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VSZWN0U2NhbGVkLndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5k
YXRhKCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRl
c3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBi
eXRlc1BlclJvdygpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgc291cmNlUmVjdENsaXBwZWQueSgpICogc291cmNlQnl0ZXNQZXJS
b3cgKyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAot
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhl
bEZvcm1hdDo6UkdCQTgsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVs
Rm9ybWF0KCksIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5h
dGlvbkFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci0+Zm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQ
ZXJSb3csIGRlc3RpbmF0aW9uUm93cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiAKLSAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0LCB2b2lkKiBkYXRhKQordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlQWxwaGFGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uUG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRp
b25BbHBoYUZvcm1hdCwgdm9pZCogZGF0YSkKIHsKLSAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRT
Y2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGF1dG8gc291cmNl
UmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworICAgIGF1dG8g
ZGVzdGluYXRpb25Qb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RpbmF0aW9u
UG9pbnQpOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAg
SW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOwotICAgIGRlc3RSZWN0Lm1vdmVCeShk
ZXN0UG9pbnRTY2FsZWQpOworICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBwZWQgPSBpbnRlcnNl
Y3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkgfSwgc291cmNlUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBzb3VyY2VSZWN0Q2xpcHBl
ZDsKKyAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQpOwog
Ci0gICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKLSAgICAgICAgZGVzdFJlY3Quc2V0WChk
ZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2Fs
ZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFgoZGVzdGluYXRpb25SZWN0
LngoKSAtIHNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2NhbGVkLnko
KSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxl
ZC55KCkpOworICAgIGlmIChzb3VyY2VSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5zZXRZKGRlc3RpbmF0aW9uUmVjdC55KCkgLSBzb3VyY2VSZWN0U2NhbGVkLnko
KSk7CiAKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7Ci0gICAgc3JjUmVj
dENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRl
c1BlclJvdyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3Vy
Y2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50
OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RD
bGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICog
NDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCi0gICAgICAgIGRlc3RGb3JtYXQs
IHBpeGVsRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIHNvdXJjZUFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSwgc291
cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsCisgICAgICAgIGRlc3RpbmF0aW9uQWxwaGFGb3Jt
YXQsIHBpeGVsRm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OCArNDMsOCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRH
TDsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKIGNs
YXNzIE5hdGl2ZUltYWdlOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAKIGVudW0gQmFja2luZ1N0b3Jl
Q29weSB7CiAgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgpAQCAtMTA5LDggKzEwOSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE1NCw4ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRh
dGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOwogCiAgICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw1MyBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+IGNvbXB1dGVCdWZmZXJTaXplKFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZvcm1hdHMgYXJl
IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUX1VOVVNFRChmb3JtYXQsIGZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworCisgICAg
cmV0dXJuIHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIGJ5dGVzUGVyUGl4ZWw7Cit9CisK
K09wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdWludDY0X3QgcHJvcG9zZWRCdWZmZXJTaXplKQoreworICAgIEFT
U0VSVChmb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9PSBQaXhlbEZvcm1h
dDo6QkdSQTgpOworICAgIGlmICghKGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9y
bWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBhdXRvIGNvbXB1dGVkQnVmZmVyU2l6ZSA9IGNvbXB1dGVCdWZmZXJTaXplKGZvcm1h
dCwgc2l6ZSk7CisgICAgaWYgKGNvbXB1dGVkQnVmZmVyU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoY29tcHV0ZWRCdWZmZXJTaXpl
LnVuc2FmZUdldCgpICE9IHByb3Bvc2VkQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisgICAgaWYgKCFwaXhlbEFy
cmF5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgY29sb3JT
cGFjZSwgZm9ybWF0LCBzaXplLCBwaXhlbEFycmF5LnJlbGVhc2VOb25OdWxsKCkgfSB9OworfQor
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIC8vIE5PVEU6IE9ubHkgOC1iaXQgZm9ybWF0cyBhcmUgY3VycmVudGx5
IHN1cHBvcnRlZC4KKyAgICBBU1NFUlQoZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCBm
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGNv
bXB1dGVCdWZmZXJTaXplKGZvcm1hdCwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlclNpemUuaGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gcGl4ZWxB
cnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGJ1ZmZlclNp
emUudW5zYWZlR2V0KCkpOworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgcGl4
ZWxBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsKK30KKwogUGl4ZWxCdWZmZXI6OlBpeGVsQnVm
ZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBmb3JtYXQs
IGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiYmIGRhdGEp
CiAgICAgOiBtX2NvbG9yU3BhY2UgeyBjb2xvclNwYWNlIH0KICAgICAsIG1fZm9ybWF0IHsgZm9y
bWF0IH0KQEAgLTQ2LDQgKzkwLDkgQEAgUGl4ZWxCdWZmZXIgUGl4ZWxCdWZmZXI6OmRlZXBDbG9u
ZSgpIGNvbgogICAgIHJldHVybiB7IG1fY29sb3JTcGFjZSwgbV9mb3JtYXQsIG1fc2l6ZSwgVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5sZW5ndGgoKSkg
fTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQoreworICAgIHJldHVybiB0cyA8PCAmcGl4ZWxCdWZmZXIu
ZGF0YSgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
aXhlbEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICsz
MCwyMCBAQAogI2luY2x1ZGUgIlBpeGVsRm9ybWF0LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KIAorbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3Ry
ZWFtOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBpeGVsQnVmZmVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaXhlbEJ1ZmZlcik7CiBwdWJsaWM6CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiB0cnlDcmVhdGUoRGVzdGluYXRp
b25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gdHJ5Q3JlYXRlRm9yRGVjb2Rpbmco
RGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIHVpbnQ2
NF90IHByb3Bvc2VkQnVmZmVyU2l6ZSk7CisKICAgICBQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0LCBjb25zdCBJbnRTaXplJiwgUmVmPEpTQzo6VWludDhDbGFt
cGVkQXJyYXk+JiYpOwotICAgIH5QaXhlbEJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5Q
aXhlbEJ1ZmZlcigpOwogCiAgICAgUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0
OwogICAgIFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oUGl4ZWxCdWZmZXImJikgPSBkZWZhdWx0OwpA
QCAtNDgsNiArNTUsOSBAQCBwdWJsaWM6CiAKICAgICBQaXhlbEJ1ZmZlciBkZWVwQ2xvbmUoKSBj
b25zdDsKIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6CiAgICAgRGVzdGluYXRpb25D
b2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBQaXhlbEZvcm1hdCBtX2Zvcm1hdDsKQEAgLTU1
LDQgKzY1LDQ2IEBAIHByaXZhdGU6CiAgICAgUmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IG1f
ZGF0YTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBjb25zdCBQaXhlbEJ1ZmZlciYpOworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsKKyAgICBlbmNvZGVyIDw8IG1fZm9ybWF0
OworICAgIGVuY29kZXIgPDwgbV9zaXplOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG1fZGF0YS0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5ieXRlTGVuZ3RoKCksIDEpOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gUGl4ZWxCdWZmZXI6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQ7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShmb3JtYXQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgSW50U2l6ZSBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICB1aW50NjRfdCBkYXRhQnl0ZUxlbmd0aDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KGRhdGFCeXRlTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gcmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0
ZUZvckRlY29kaW5nKGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgZGF0YUJ5dGVMZW5ndGgpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZXN1bHQtPm1fZGF0YS0+ZGF0YSgpLCBy
ZXN1bHQtPm1fZGF0YS0+Ynl0ZUxlbmd0aCgpLCAxKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTkwNCwxMiArOTA0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZl
cihJbWFnZUIKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2lu
dCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICgh
bGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXllckRh
dGEtPmRhdGEoKS5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQp
OwotICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOworICAgIGxheWVySW1hZ2UucHV0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5
ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hh
ZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0
ZVNpemUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGlu
Zy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgpAQCAtNzcsMTEgKzc3LDExIEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBo
YUNoYW5uZWxGcm9tUGl4ZWxzKGkKIH0KICNlbmRpZgogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIFNjb3BlZFBpeGVsU3RvcmFnZU1vZGUgcGFj
a0FsaWdubWVudChHTF9QQUNLX0FMSUdOTUVOVCk7CiAgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0
KQogICAgICAgICBwYWNrQWxpZ25tZW50LnBpeGVsU3RvcmUoNCk7CkBAIC05MCwxNiArOTAsMTYg
QEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuRwogICAgIFNjb3BlZFBp
eGVsU3RvcmFnZU1vZGUgcGFja1NraXBQaXhlbHMoR0xfUEFDS19TS0lQX1BJWEVMUywgMCwgbV9p
c0ZvcldlYkdMMik7CiAgICAgU2NvcGVkQnVmZmVyQmluZGluZyBzY29wZWRQaXhlbFBhY2tCdWZm
ZXJSZXNldChHTF9QSVhFTF9QQUNLX0JVRkZFUiwgMCwgbV9pc0ZvcldlYkdMMik7CiAKLSAgICBn
bDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBpbWFnZURhdGEtPndpZHRoKCksIGltYWdl
RGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS0+ZGF0
YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpKTsKKyAgICBnbDo6UmVhZG5QaXhlbHNSb2J1c3RBTkdMRSgwLCAwLCBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgp
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7
CiAgICAgLy8gRklYTUU6IFJlbmRlcmluZyB0byBHTF9SR0IgdGV4dHVyZXMgd2l0aCBhIElPU3Vy
ZmFjZSBib3VuZCB0byB0aGUgdGV4dHVyZSBpbWFnZSBsZWF2ZXMKICAgICAvLyB0aGUgYWxwaGEg
aW4gdGhlIElPU3VyZmFjZSBpbiBpbmNvcnJlY3Qgc3RhdGUuIEFsc28gQU5HTEUgZ2w6OlJlYWRQ
aXhlbHMgd2lsbCBpbiBzb21lCiAgICAgLy8gY2FzZXMgZXhwb3NlIHRoZSBub24tMjU1IHZhbHVl
cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1ODA0
CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmICghY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhl
bHMoaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPmRh
dGEoKS5kYXRhKCkpOworICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhwaXhlbEJ1
ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIHBpeGVs
QnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKICNlbmRpZgotICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXgKICNlbmRpZgogfQogCi1SZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQorT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cygpCiB7CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgZmJvQmlu
ZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTyk7CiAgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRH
TENhaXJvLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJJbWFnZS5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2lu
Y2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTEwNiwxNSArMTA2
LDE1IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXgKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZh
cyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1
dGVzLCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJj
ZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJU
KCFpbWFnZURhdGEtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIu
c2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBDb252ZXJ0IFJHQkEgdG8gQkdSQS4gQkdSQSBpcyBDQUlST19G
T1JNQVRfQVJHQjMyIG9uIGxpdHRsZS1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4KLSAgICBzaXplX3Qg
dG90YWxCeXRlcyA9IGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKLSAgICB1aW50OF90
KiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCk7CisgICAgc2l6ZV90IHRvdGFsQnl0
ZXMgPSBwaXhlbEJ1ZmZlci5kYXRhKCkuYnl0ZUxlbmd0aCgpOworICAgIHVpbnQ4X3QqIHBpeGVs
cyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCiAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOwogCkBAIC0xMjYsMTAgKzEyNiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFRvQ2FuCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOworICAgIGF1dG8gaW1hZ2VTaXplID0gcGl4ZWxCdWZmZXIu
c2l6ZSgpOwogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIGltYWdl
RGF0YS0+ZGF0YSgpLmRhdGEoKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VEYXRhLT53aWR0
aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBpbWFnZURhdGEtPndpZHRoKCkgKiA0KSk7CisgICAg
ICAgIHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGltYWdlU2l6ZS53aWR0aCgpICogNCkp
OwogCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVN1
cmZhY2UpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIAogI2lmIFVTRShDQUlSTykKQEAgLTEy
MCwxNCArMTIwLDE0IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUIK
ICAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1fc3VyZmFjZS5nZXQoKSkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVm
ZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3Jt
YXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IHNy
Y1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKICAgICBJbnRQb2lu
dCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4
IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJiwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xORU9OLmgiCkBAIC01MDYsOSArNTA2LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yOjpleAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFJlZjxJbWFnZURhdGE+JiYgaW1h
Z2VEYXRhLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgc291cmNlQ29udGV4dEF0dHJpYnV0ZXMsIFBpeGVs
QnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBBU1NFUlQoIWltYWdlRGF0YS0+c2l6ZSgpLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKCFwaXhlbEJ1ZmZlci5zaXplKCkuaXNFbXB0eSgpKTsKICAgICBp
ZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBJbnB1dCBp
cyBHTF9SR0JBID09IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYSpMYXN0
LgpAQCAtNTIxLDEzICs1MjEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRUb0NhbgogICAgIGVsc2UKICAgICAgICAgYml0bWFwSW5mbyB8PSBrQ0dJbWFnZUFscGhhTGFz
dDsKIAotICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7Ci0gICAgaW50IHJv
d0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OwotICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJv
d0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwotICAgIHVpbnQ4X3QqIGltYWdlUGl4ZWxzID0g
aW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IG1ha2VSZWYo
cGl4ZWxCdWZmZXIuZGF0YSgpKTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLnNp
emUoKTsKKyAgICBhdXRvIHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAgIGF1
dG8gZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICB1aW50OF90
KiBpbWFnZVBpeGVscyA9IHBpeGVsQnVmZmVyLmRhdGEoKS5kYXRhKCk7CiAgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChpbWFnZVBpeGVscywgZGF0YVNpemUpOwotICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZpbWFnZURh
dGEubGVha1JlZigpLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBj
b25zdCB2b2lkKiwgc2l6ZV90KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2VEYXRh
Kj4oY29udGV4dCktPmRlcmVmKCk7CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmcGl4ZWxBcnJheS5sZWFrUmVmKCksIGltYWdl
UGl4ZWxzLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3Qp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SlNDOjpVaW50OENsYW1wZWRBcnJheSo+KGNvbnRleHQp
LT5kZXJlZigpOwogICAgIH0pKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3Jl
YXRlKGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhl
aWdodCgpLCA4LCAzMiwgcm93Qnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8s
IGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0xODcsMTggKzE4NiwxOCBAQCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAg
ICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkK
KyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIXBp
eGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXV0byYg
cGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgICAgICBhdXRvIGRhdGFTaXplID0g
cGl4ZWxBcnJheS5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBpbWFnZURhdGEtPnNpemUoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5ID0gbWFrZVJl
ZihwaXhlbEJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJy
YXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBp
eGVsQnVmZmVyLT5zaXplKCk7CiAKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChwaXhlbEFycmF5LmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZl
cklzQmlnRW5vdWdoKHBpeGVsQXJyYXktPmRhdGEoKSwgZGF0YVNpemUpOwogCi0gICAgICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKGlt
YWdlRGF0YS5sZWFrUmVmKCksIHBpeGVsQXJyYXkuZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQq
IGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8SW1hZ2VEYXRhKj4oY29udGV4dCktPmRlcmVmKCk7CisgICAgICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhlbEFycmF5
LmxlYWtSZWYoKSwgcGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRl
eHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6
VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICAgICAgfSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTksMTQgKzE1OSwxNCBAQCBWZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlCiAgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
aW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CisgICAg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZm
ZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9kYXRhKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4
IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3Ju
ZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkg
KzI5LDkgQEAKICNpZiBIQVZFKElPU1VSRkFDRSkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC0xNjgsMTEgKzE2OCwxMSBAQCB2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6ZHJhd0NvCiAKIFJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAogewotICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1hZ2VEYXRhKSB7CisgICAg
aWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikgewogICAgICAgICAvLyBGb3Jj
ZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgogICAgICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFp
bmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCiAgICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChG
bG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotICAgICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1h
Z2VEYXRhID0gZmFsc2U7CisgICAgICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZl
ciA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQpAQCAtMTgzLDE3
ICsxODMsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFjawogICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAg
SU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhl
bEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
OwogfQogCi12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1
cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOwotICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgPSB0cnVlOworICAgIEltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworICAgIG1fcmVx
dWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IHRydWU7CiB9CiAKIElPU3VyZmFjZSogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzdXJmYWNlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAKICAgICBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
JiYpOwogCisgICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7CisKICAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlOwogCkBAIC02MSw5ICs2Myw4IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0gICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7
CiAKICAgICBib29sIGlzSW5Vc2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHJlbGVhc2VH
cmFwaGljc0NvbnRleHQoKSBvdmVycmlkZTsKQEAgLTc4LDcgKzc5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgbXV0YWJsZSBib29sIG1fcmVxdWly
ZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX3Jl
cXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgeyBmYWxzZSB9OwogCiAgICAgbXV0YWJsZSBi
b29sIG1fbmVlZHNTZXR1cENvbnRleHQgeyBmYWxzZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksOCArMjksOCBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SW1hZ2VJTy9JbWFn
ZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQmFzZTY0Lmg+CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cgogICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRh
dGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCkBAIC0xMzEs
NyArMTMxLDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogCiAg
ICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdz
IGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21w
b3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uu
d2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291
cmNlLnNpemUoKS53aWR0aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgaWYg
KCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTU0LDEyICsxNTQsMTIgQEAgc3RhdGljIFJldGFpblB0
cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERh
dGEuZGF0YSgpOwogICAgIH0KIAotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0
YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0
ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCkgKiBzb3Vy
Y2Uuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLnNpemUoKS53aWR0
aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKSwgMCkpOwogICAgIGlmICghZGF0YVByb3ZpZGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBz
b3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVm
YXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKHNvdXJjZS5zaXplKCkud2lkdGgoKSwgc291cmNlLnNpemUoKS5oZWlnaHQoKSwgOCwg
MzIsIDQgKiBzb3VyY2Uuc2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0Jp
dG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAKICAgICBhdXRvIGNmRGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CiAgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBj
ZkRhdGEuZ2V0KCkpKQpAQCAtMTc2LDcgKzE3Niw3IEBAIFN0cmluZyBkYXRhVVJMKENGRGF0YVJl
ZiBkYXRhLCBjb25zdCBTdHIKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7CiB9CiAKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
CitTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7CiAgICAgaWYgKGF1dG8gZGF0
YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKICAgICAgICAgcmV0dXJuIGRh
dGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIFZlY3Rvcjx1
aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkQKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
VmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKIHsKICAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNv
dXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQogICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogCiBXRUJDT1JF
X0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCog
YnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQCBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlCiBib29sIGVuY29kZUltYWdlKENHSW1h
Z2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFi
bGVEYXRhUmVmKTsKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CitTdHJpbmcgZGF0YVVSTChjb25z
dCBQaXhlbEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CiAKIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7Ci1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3Qg
UGl4ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xD
b2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjYxLDEzICs2NjEsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvcgogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsK
IH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21w
b3NpdGVkUmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgYXV0byYgZGlzcGxheUJ1ZmZl
ciA9IG1fc3dhcENoYWluLT5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVy
LnN1cmZhY2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoZGlzcGxheUJ1ZmZlci5z
dXJmYWNlLT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gTm90
ZTogV2UgYXJlIHVzaW5nIEdMIHRvIHJlYWQgdGhlIElPU3VyZmFjZS4gQXQgdGhlIHRpbWUgb2Yg
d3JpdGluZywgdGhlcmUgYXJlIG5vIGNvbnZpbmllbnQKICAgICAvLyBmdW5jdGlvbnMgdG8gY29u
dmVydCB0aGUgSU9TdXJmYWNlIHBpeGVsIGRhdGEgdG8gSW1hZ2VEYXRhLiBUaGUgaW1hZ2UgZGF0
YSBlbmRzIHVwIGJlaW5nCiAgICAgLy8gZHJhd24gdG8gYSBJbWFnZUJ1ZmZlciwgYnV0IGF0IHRo
ZSB0aW1lIHRoZXJlJ3Mgbm8gZnVuY3Rpb25zIHRvIGNvbnN0cnVjdCBhIE5hdGl2ZUltYWdlCkBA
IC02NzgsNyArNjc4LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
RwogICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5KCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQg
IT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKICAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRh
cmdldCwgdGV4dHVyZSk7CiAgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxheU9iaiwg
ZGlzcGxheUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUikpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGdsOjpUZXhQYXJhbWV0
ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAg
ICBTY29wZWRGcmFtZWJ1ZmZlciBmYm87CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZl
ckJpbmRpbmcgZmJvQmluZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTywg
ZmJvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUJsZW5kTkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVC
bGVuZE5FT04uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKIAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGFybV9uZW9uLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiwzMyArMTEyLDM0IEBAIHZvaWQgRkVCbGVu
ZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAg
IGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QSA9IGluLT5w
cmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QiA9
IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIEludFJl
Y3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAotICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7Ci0gICAgQVNT
RVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKKyAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxBcnJh
eUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAotICAg
IGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04o
c3JjUGl4ZWxBcnJheUEtPmRhdGEoKSwgc3JjUGl4ZWxBcnJheUItPmRhdGEoKSwgZHN0UGl4ZWxB
cnJheS0+ZGF0YSgpLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VQaXhl
bEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOworICAgIEFTU0VSVChw
aXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CisKKyAgICBp
ZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CisgICAgICAgIHBsYXRmb3JtQXBwbHlO
RU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCks
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVs
IHdlIGV4cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPiAwKTsK
KyAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwogICAgIHVpbnQzMl90IHNv
dXJjZUFbMl0gPSB7MCwgMH07CiAgICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7MCwg
MH07CiAKLSAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Bp
eGVsQXJyYXlBLT5kYXRhKCkpWzBdOwotICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KHNyY1BpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOworICAgIHNvdXJj
ZUFbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUEtPmRh
dGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSlbMF07CiAgICAgcGxhdGZvcm1BcHBseU5F
T04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291
cmNlQkFuZERlc3QpLCA4KTsKLSAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZHN0UGl4
ZWxBcnJheS0+ZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJj
ZUJBbmREZXN0WzBdOwogfQogCiB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2ln
bmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5Qiwg
dW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDEw
ICsyOTgsMTAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbQogICAg
ICAgICByZXR1cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZl
cj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAg
IHJldHVybiBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPihpdGVtLmdldDxNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxHZXRJbWFnZURhdGE+KGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxH
ZXRQaXhlbEJ1ZmZlcj4oaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dFBpeGVsQnVm
ZmVyPihpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJuIGFwcGVu
ZDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsx
ODgsOCBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgogICAg
IGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKLSAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAg
Y2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CiAgICAgICAgIC8vIFNob3VsZCBhbHJlYWR5
IGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgwLDExICsyODAsMTEgQEAgdm9pZCBJdGVtSGFuZGxl
OjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAg
IGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxHZXRJbWFnZURhdGE+Ojp2YWx1ZSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEdldFBpeGVsQnVmZmVyPjo6dmFsdWUp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAg
ICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgZ2V0PFB1dFBpeGVsQnVmZmVyPigpLn5QdXRQ
aXhlbEJ1ZmZlcigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6CiAgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKQEAgLTUw
NCwxMCArNTA0LDEwIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbUhhbmRsZSBkZXMK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAg
ICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88
R2V0SW1hZ2VEYXRhPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88UHV0SW1hZ2VEYXRhPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAg
IHJldHVybiBjb3B5SW50bzxHZXRQaXhlbEJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOworICAg
IGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88
UHV0UGl4ZWxCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVEYXNoPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwogICAgIGNhc2UgSXRlbVR5
cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihN
ZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdl
RGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHZXRJbWFnZURhdGEpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihQdXRJbWFnZURhdGEp
OworICAgIGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKEdldFBpeGVsQnVmZmVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihQdXRQaXhlbEJ1ZmZlcik7CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJu
IHNpemVvZihQYWludEZyYW1lRm9yTWVkaWEpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgaXNE
cmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6CkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBl
IHR5cGUpCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYToKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICBj
YXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6CkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
OgorICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVBhdGg6CkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBpc0lubGluZUl0ZW0o
SXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
IGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhl
bEJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4
IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGbHVzaENvbnRleHQsCiAg
ICAgTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyLAogICAgIE1ldGFDb21t
YW5kQ2hhbmdlSXRlbUJ1ZmZlciwKLSAgICBHZXRJbWFnZURhdGEsCi0gICAgUHV0SW1hZ2VEYXRh
LAorICAgIEdldFBpeGVsQnVmZmVyLAorICAgIFB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShW
SURFTykKICAgICBQYWludEZyYW1lRm9yTWVkaWEsCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVw
bGF5ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CkBAIC03NjksMzUgKzc2OCw0NCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR2V0SW1hZ2VEYXRhJiBpdGVtKQorc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdldFBpeGVsQnVmZmVyJiBp
dGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgib3V0cHV0Rm9ybWF0IiwgaXRlbS5vdXRwdXRG
b3JtYXQoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3Jj
UmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQotICAgICwgbV9pbWFn
ZURhdGEoaW1hZ2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVx
dWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KKyAgICAs
IG1fcGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpIC8vIFRoaXMgY29weSBpcyBh
Y3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNzIG9mIHB1dFBpeGVsQnVm
ZmVyKCkuCiAgICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQogICAgICwgbV9kZXN0Rm9y
bWF0KGRlc3RGb3JtYXQpCiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogICAgIDogbV9zcmNSZWN0
KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCi0gICAgLCBtX2ltYWdlRGF0
YShXVEZNb3ZlKGltYWdlRGF0YSkpCisgICAgLCBtX3BpeGVsQnVmZmVyKFdURk1vdmUocGl4ZWxC
dWZmZXIpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZv
cm1hdChkZXN0Rm9ybWF0KQogewogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQorUHV0UGl4ZWxCdWZmZXI6
OlB1dFBpeGVsQnVmZmVyKGNvbnN0IFB1dFBpeGVsQnVmZmVyJiBvdGhlcikKKyAgICA6IG1fc3Jj
UmVjdChvdGhlci5tX3NyY1JlY3QpCisgICAgLCBtX2Rlc3RQb2ludChvdGhlci5tX2Rlc3RQb2lu
dCkKKyAgICAsIG1fcGl4ZWxCdWZmZXIob3RoZXIubV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkK
KyAgICAsIG1faW5wdXRGb3JtYXQob3RoZXIubV9pbnB1dEZvcm1hdCkKKyAgICAsIG1fZGVzdEZv
cm1hdChvdGhlci5tX2Rlc3RGb3JtYXQpCit7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRQaXhlbEJ1ZmZlciYgaXRlbSkKIHsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUo
KSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwaXhlbEJ1ZmZlclNpemUiLCBpdGVtLnBpeGVsQnVm
ZmVyKCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1Jl
Y3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0UG9pbnQiLCBpdGVtLmRlc3RQb2ludCgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3RGb3JtYXQiLCBpdGVtLmRlc3RGb3JtYXQoKSk7
CkBAIC0xMDY0LDggKzEwNzIsOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OiB0cyA8PCAiZmx1c2gtY29u
dGV4dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGlu
YXRpb25JbWFnZUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtZGVzdGluYXRpb24t
aW1hZ2UtYnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFu
Z2VJdGVtQnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5kLWNoYW5nZS1pdGVtLWJ1ZmZlciI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YTogdHMgPDwgImdldC1pbWFnZS1k
YXRhIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB0cyA8PCAicHV0
LWltYWdlLWRhdGEiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjog
dHMgPDwgImdldC1waXhlbC1idWZmZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQ
aXhlbEJ1ZmZlcjogdHMgPDwgInB1dC1waXhlbC1idWZmZXIiOyBicmVhazsKICNpZiBFTkFCTEUo
VklERU8pCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB0cyA8PCAicGFp
bnQtZnJhbWUtZm9yLW1lZGlhIjsgYnJlYWs7CiAjZW5kaWYKQEAgLTEyMzEsMTEgKzEyMzksMTEg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSQogICAgIGNhc2UgSXRl
bVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldElt
YWdlRGF0YT4oKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1h
Z2VEYXRhPigpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICB0
cyA8PCBpdGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIkdyYWRpZW50
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllcklkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIFRl
eHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VEYXRhOwogY2xh
c3MgTWVkaWFQbGF5ZXI7CiBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CiAKQEAgLTE5MDAs
MTMgKzE4OTksMTMgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotY2xh
c3MgR2V0SW1hZ2VEYXRhIHsKK2NsYXNzIEdldFBpeGVsQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkdldEltYWdlRGF0
YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6Okdl
dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAK
LSAgICBHZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCisgICAgR2V0UGl4ZWxCdWZm
ZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCiAgICAgICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAg
ICAgICAgICwgbV9vdXRwdXRGb3JtYXQob3V0cHV0Rm9ybWF0KQogICAgIHsKQEAgLTE5MjAsMTcg
KzE5MTksMTkgQEAgcHJpdmF0ZToKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fb3V0cHV0
Rm9ybWF0OwogfTsKIAotY2xhc3MgUHV0SW1hZ2VEYXRhIHsKK2NsYXNzIFB1dFBpeGVsQnVmZmVy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlB1dEltYWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXIm
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKworICAgIFB1dFBpeGVsQnVmZmVyKGNv
bnN0IFB1dFBpeGVsQnVmZmVyJik7CiAKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdDsgfQotICAgIEltYWdlRGF0YSYg
aW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1faW1hZ2VEYXRhOyB9CisgICAgY29uc3QgUGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlcjsgfQog
ICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQogICAgIElu
dFBvaW50IGRlc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdFBvaW50OyB9CiAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0Rm9y
bWF0OyB9CkBAIC0xOTM5LDMxICsxOTQwLDMxIEBAIHB1YmxpYzoKICAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1fZGVzdFBvaW50LCBtX3Ny
Y1JlY3Quc2l6ZSgpIH19OyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IGRlY29kZShEZWNv
ZGVyJik7CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3NyY1JlY3Q7CiAgICAgSW50UG9pbnQg
bV9kZXN0UG9pbnQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV9pbWFnZURhdGE7CisgICAgUGl4
ZWxCdWZmZXIgbV9waXhlbEJ1ZmZlcjsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5w
dXRGb3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBQdXRJbWFnZURhdGE6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBQdXRQaXhlbEJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVu
Y29kZXIgPDwgbWFrZVJlZigqbV9pbWFnZURhdGEpOworICAgIGVuY29kZXIgPDwgbV9waXhlbEJ1
ZmZlcjsKICAgICBlbmNvZGVyIDw8IG1fc3JjUmVjdDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdFBv
aW50OwogICAgIGVuY29kZXIgPDwgbV9kZXN0Rm9ybWF0OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0UGl4ZWxCdWZmZXI+IFB1dFBpeGVsQnVmZmVyOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxp
Y2F0aW9uPiBpbnB1dEZvcm1hdDsKLSAgICBPcHRpb25hbDxSZWY8SW1hZ2VEYXRhPj4gaW1hZ2VE
YXRhOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwaXhlbEJ1ZmZlcjsKICAgICBPcHRpb25h
bDxJbnRSZWN0PiBzcmNSZWN0OwogICAgIE9wdGlvbmFsPEludFBvaW50PiBkZXN0UG9pbnQ7CiAg
ICAgT3B0aW9uYWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gZGVzdEZvcm1hdDsKQEAgLTE5NzIs
OCArMTk3Myw4IEBAIE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VEYXRhOjpkZWMKICAg
ICBpZiAoIWlucHV0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ZGVjb2RlciA+PiBpbWFnZURhdGE7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgZGVjb2RlciA+
PiBwaXhlbEJ1ZmZlcjsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgZGVjb2RlciA+PiBzcmNSZWN0OwpAQCAtMTk4OCw3ICsxOTg5LDcg
QEAgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlYwogICAgIGlmICghZGVz
dEZvcm1hdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiB7eyAq
aW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAq
ZGVzdEZvcm1hdCB9fTsKKyAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCpwaXhl
bEJ1ZmZlciksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCB9fTsKIH0KIAogI2lm
IEVOQUJMRShWSURFTykKQEAgLTIzMTcsMTAgKzIzMTgsMTAgQEAgdXNpbmcgRGlzcGxheUxpc3RJ
dGVtID0gVmFyaWFudAogICAgICwgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUKICAgICAsIEZpbGxS
b3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0Ci0gICAgLCBHZXRJbWFnZURhdGEKKyAgICAs
IEdldFBpeGVsQnVmZmVyCiAgICAgLCBNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VC
dWZmZXIKICAgICAsIE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcgotICAgICwgUHV0SW1hZ2VE
YXRhCisgICAgLCBQdXRQaXhlbEJ1ZmZlcgogICAgICwgUmVzdG9yZQogICAgICwgUm90YXRlCiAg
ICAgLCBTYXZlCkBAIC0yNDE5LDggKzI0MjAsOCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRpCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGbHVz
aENvbnRleHQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIsCi0gICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRJbWFnZURhdGEsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEsCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlciwKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShWSURFTykKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSwKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNCArNTUsMTQgQEAgUmVjb3Jk
ZXI6On5SZWNvcmRlcigpCiAgICAgTE9HKERpc3BsYXlMaXN0cywgIlJlY29yZGVkIGRpc3BsYXkg
bGlzdDpcbiVzIiwgbV9kaXNwbGF5TGlzdC5kZXNjcmlwdGlvbigpLmRhdGEoKSk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmdldFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KQogewotICAgIGFwcGVuZDxHZXRJbWFnZURhdGE+KG91dHB1dEZvcm1hdCwg
c291cmNlUmVjdCk7CisgICAgYXBwZW5kPEdldFBpeGVsQnVmZmVyPihvdXRwdXRGb3JtYXQsIHNv
dXJjZVJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKK3ZvaWQgUmVjb3JkZXI6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVy
JiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQogewotICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9ybWF0LCBp
bWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CisgICAgYXBwZW5kPFB1
dFBpeGVsQnVmZmVyPihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2lu
dCwgZGVzdEZvcm1hdCk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRl
Q2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxNCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90Owor
CiBjbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR2x5cGhCdWZmZXI7
CiBjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRm9udDsKK2NsYXNz
IEdseXBoQnVmZmVyOwogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7CitjbGFzcyBQaXhl
bEJ1ZmZlcjsKIAogc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwogc3RydWN0IEltYWdlUGFp
bnRpbmdPcHRpb25zOwpAQCAtNTcsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5S
ZWNvcmRlcigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCk7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0LmlzRW1wdHkoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZW51bSBjbGFzcyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIDogdWludDhfdDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIEltYWdlRGF0YTsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0yODYsMTIgKzI4NiwxMiBAQCB2b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRh
ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgYXV0byBw
aXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+
ZGF0YSgpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNp
emUoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBh
dXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKIAogICAgIFZl
Y3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CiAgICAgCkBA
IC0zMTMsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgaW1h
Z2VSZWN0KTsKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ck1hdHJpeFR5cGUmIHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMTA4LDExICsxMDgsMTEgQEAgdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5UwogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlUmVzdWx0KQorICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0LT5kYXRhKCk7CisgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwog
CiAgICAgTG9va3VwVGFibGUgcmVkVGFibGU7CiAgICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsK
QEAgLTEyMCwxMSArMTIwLDExIEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseVMKICAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwogICAgIGNvbXB1dGVMb29rdXBUYWJs
ZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKLSAgICBJ
bnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQocGl4
ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgdWludDhfdCog
ZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVVubXVsdGlwbGllZFJl
c3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aCA9IGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0gZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0XV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtw
aXhlbE9mZnNldCArIDFdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSwyMSArMjI5LDIxIEBAIHZvaWQgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKSB7Ci0gICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5k
YXRhKCk7CisgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlm
ICghc3JjUGl4ZWxBcnJheSkKKyAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGlm
ICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBJbnRS
ZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
ICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBl
ZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgcGxh
dGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNyY1BpeGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIG1f
azEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2Fy
ZSgqc291cmNlUGl4ZWxBcnJheSwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBt
X2szLCBtX2s0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM3MSwzMyArMzcx
LDI4IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnQKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBJbWFnZURhdGEqIHJlc3Vs
dEltYWdlOwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHJlc3VsdEltYWdlID0g
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3Vs
dEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZl
QWxwaGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRh
dGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHNyY1BpeGVsQXJyYXk7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3Vy
Y2VQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNyY1BpeGVs
QXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlw
bGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAg
ICBlbHNlCi0gICAgICAgIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNyY1Bp
eGVsQXJyYXkpCisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJl
c3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAo
IXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFNpemUgcGFpbnRT
aXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAgICAgcGFpbnRTaXplLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9
IHsKLSAgICAgICAgKnNyY1BpeGVsQXJyYXksCi0gICAgICAgIGRzdFBpeGVsQXJyYXksCisgICAg
ICAgICpzb3VyY2VQaXhlbEFycmF5LAorICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCiAg
ICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCiAg
ICAgICAgIG1fYmlhcyAqIDI1NSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5LDE2
ICs5OSwxNiBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mCiAgICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8qIHJl
c3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBhdXRvIGlucHV0SW1h
Z2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1
ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBj
b2xvciB2YWx1ZXMuCiAgICAgYXV0byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCkBAIC0xMzYsMTggKzEzNiwxOCBA
QCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mCiAgICAgICAgIGludCBs
aW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7CiAKICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZHN0SW5kZXgg
PSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbklu
ZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFj
ZW1lbnRJbWFnZS0+aXRlbShkc3RJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxl
ZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50Pihz
Y2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlzcGxh
Y2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9
IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2Ut
Pml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9m
ZnNldFgpOworICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2Fs
ZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBk
aXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5z
aWduZWQqIGRzdFBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVs
QXJyYXkuZGF0YSgpICsgZHN0SW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhl
bEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1gg
PCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBw
YWludFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZHN0UGl4ZWxQdHIgPSAwOwor
ICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgKmRzdFBpeGVsUHRyID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zm
c2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAgICAgICAgKmRlc3RpbmF0
aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRh
dGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtOTksMTYgKzk5LDE1IEBAIHZvaWQgRkVEcm9w
U2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKIAogICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwogCi0gICAgLy8gVE9ETzog
RGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRo
ZSBJbWFnZURhdGEuCiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93
QXJlYSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3Vs
dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgY29u
dGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LmRhdGEoKSwgaW1hZ2VEYXRh
LT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICBhdXRvJiBzb3Vy
Y2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJs
dXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsKICAgICAKLSAgICByZXN1bHRJbWFn
ZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpp
bWFnZURhdGEsIHNoYWRvd0FyZWEpOworICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqcGl4ZWxCdWZmZXIsIHNoYWRv
d0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dD
b2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ck5FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQpA
QCAtNTIzLDE2ICs1MjMsMTYgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1
dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVz
dWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBp
bi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYg
KCFtX3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDUsNyArNTQ1LDcg
QEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YQogICAgIGlmICghdG1w
SW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KGRzdFBpeGVs
QXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWln
aHQoKSwgcGFpbnRTaXplKTsKKyAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgp
LCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDc1LDIzICs0NzUsMjMgQEAgdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKIAotICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBy
ZXN1bHRQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBz
ZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChyZXN1bHRQaXhlbEFycmF5LCBlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgx
LDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBu
byB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBo
YXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Rocywg
YW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNv
bnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAogICAgIElu
dFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBkcmF3TGlnaHRpbmcocmVzdWx0UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgo
KSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIGRyYXdMaWdodGluZyhkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRT
aXplLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMjQzLDIzICsyNDMsMjMgQEAgdm9p
ZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogewogICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgp
OworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwog
Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJ
bWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogCiAgICAgSW50U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9h
dFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsKICAgICBpZiAocGxhdGZvcm1BcHBseURlZ2Vu
ZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndp
ZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9
IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQ
aXhlbEFycmF5ID0gc3JjUGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBp
eGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0
aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAgICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0Lmhl
aWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM5NiwxNyArMzk2LDE3IEBAIHZvaWQgRkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGwKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBJ
bnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwogICAgIHJlc3Vs
dFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBpZiAocmVzdWx0U2l6
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kp
IHsKICAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihpKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhp
czsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5OworICAg
ICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsK
ICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAg
ICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIEZF
VHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgfQogCiAgICAgLy8gRmFsbGJh
Y2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcg
dGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKHBp
eGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBmaWxs
UmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAw
LCBoZWlnaHQpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlz
aW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTc3LDcgKzc3LDcgQEAgRmxvYXRQb2lu
dCBGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZQogICAgIHJldHVybiBhYnNvbHV0ZVBvaW50
OwogfQogCi1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAorSW50UmVjdCBGaWx0ZXJFZmZl
Y3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZl
Y3RSZWN0KSBjb25zdAogewogICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50
UmVjdC5sb2NhdGlvbigpOwogICAgIGxvY2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlv
bigpKTsKQEAgLTI0Nyw4ICsyNDcsOCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFBy
ZU11bHRpcGxpCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewogICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBudWxscHRyOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKKyAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OworICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFn
ZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVy
UmVzdWx0IDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCk7CiAKICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAq
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQot
ICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVz
dGluYXRpb25SZWN0KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKIH0KIApAQCAtMjkwLDExICsyOTAsMTQgQEAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OgogICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwogICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVy
Zmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqaW1hZ2VEYXRh
LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGF1dG8gcGl4
ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNr
ZWRBcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3Qs
IGNvbG9yU3BhY2UpOworICAgIHJldHVybiBwaXhlbEFycmF5OwogfQogCiBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCkBA
IC0zMDIsMTEgKzMwNSwxNCBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7CiAgICAgc2NhbGVkU2l6
ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChzY2FsZWRTaXplLmFyZWEo
KSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIGNoZWNr
ZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAo
Y2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChjaGVja2VkQXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFwaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqaW1hZ2VE
YXRhLCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gcGl4ZWxBcnJheTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVz
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKQEAgLTQzMyw3OCArNDM5LDgwIEBA
IHN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY28KICNlbmRpZgogfQogCi1S
ZWZQdHI8SW1hZ2VEYXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIEltYWdlRGF0YSYgaW5w
dXREYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKIHsKLSAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBpbnB1dERhdGEuc2l6ZSgpKTsKKyAgICAv
LyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIgdG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2Ug
Y29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2UgY2FuIGRvIGl0IGRpcmVjdGx5LgorCisgICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsK
ICAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAvIG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwog
ICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0
aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3Rv
cmUgaW5jb21pbmcgSW1hZ2VEYXRhCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0
b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCiAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZp
bHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
ICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYnVmZmVyLT5w
dXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBpbnB1dERhdGEsIGRlc3RpbmF0aW9uUmVjdCk7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihv
dXRwdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UodGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwg
ZGVzdGluYXRpb25SZWN0LCBvdXRwdXRGb3JtYXQpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCkKK09w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZm
ZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCkKIHsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwogICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1
ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRs
ZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCiAgICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCksIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7CiAgICAgaWYgKCFjb252ZXJ0ZWRCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNp
b24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIg
dG8gYW5vdGhlcgogICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cihpbnB1dEJ1ZmZlciwgcmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKG91dHB1dEZvcm1hdCwgcmVjdCk7CisgICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCByZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQog
ewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0
LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkSW1hZ2VEYXRhID0g
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsICptX2ltYWdlQnVmZmVy
UmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0sIG91dHB1
dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRJbWFnZURhdGEpCisgICAgYXV0byBjb252ZXJ0
ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNwYWNl
LCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOworICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEt
PmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252
ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBJbWFnZURhdGEmIGltYWdlRGF0YSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAogICAg
IC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1
dG8gY29udmVydGVkSW1hZ2VEYXRhID0gY29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCBpbWFnZURhdGEsIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRJbWFn
ZURhdGEpCisgICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZl
clRvQ29sb3JTcGFjZShjb2xvclNwYWNlLCBwaXhlbEJ1ZmZlciwgb3V0cHV0Rm9ybWF0KTsKKyAg
ICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgY29weUlt
YWdlQnl0ZXMoY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVj
dCk7CisgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIGRlc3RSZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCiB7CiAg
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRo
aXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAi
IDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwg
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwogCiAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNp
b24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3Vs
dCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNp
b24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKICAgICAgICAgICAgICAgICBjb3B5Q29u
dmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
SW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAg
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAg
ICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5w
dXRTaXplKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1
ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6
OkJHUkE4LCBpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3Bh
Y2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CisgICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29w
eUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7CkBAIC01MTQsMzEgKzUyMiwzMSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5h
bWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFs
dWVPck51bGwobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUo
KSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAi
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KTsKIAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURh
dGFDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgaWYgKHJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewogICAg
ICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGlu
YXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCByZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1h
Z2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0
YVRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
KmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3Qp
OworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKKyAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwpAQCAtNTU4LDcxICs1NjYsNzMgQEAgSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdQogICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyUmVzdWx0LmdldCgpOwogfQogCi1JbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywg
IkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRl
ck5hbWUoKSwgdGhpcyk7CiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2Vk
LgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAgIEFTU0VSVChtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID09IFdURjo6bnVsbG9wdCk7CisKICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6
Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LmdldCgpOworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBy
ZXN1bHRTaXplKTsKKyAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIH0KIAot
SW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCiAg
ICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jl
c3VsdCgpKTsKKyAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPT0gV1RGOjpu
dWxsb3B0KTsKKwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6
ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXpl
KTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCByZXN1bHRTaXplKTsKKyAg
ICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiB9CiAKLWJvb2wgRmlsdGVyRWZm
ZWN0OjpyZXF1aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKE9wdGlvbmFsPERlc3Rp
bmF0aW9uQ29sb3JTcGFjZT4gZHN0Q29sb3JTcGFjZSkKK2Jvb2wgRmlsdGVyRWZmZWN0OjpyZXF1
aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCiB7CiAjaWYgVVNFKENHKQogICAgIC8v
IFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4g
ZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgogICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBj
b2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBp
bnB1dAogICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxz
Ci0gICAgcmV0dXJuIGRzdENvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgpICE9ICpkc3RD
b2xvclNwYWNlOworICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29s
b3JTcGFjZSgpICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7CiAjZWxzZQogICAgIC8vIEFkZGl0
aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAg
IFVOVVNFRF9QQVJBTShkc3RDb2xvclNwYWNlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b25Db2xvclNwYWNlKTsKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIAotdm9pZCBGaWx0
ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
IGRzdENvbG9yU3BhY2UpCit2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdGluYXRpb25Db2xvclNwYWNlKQogewogI2lm
IFVTRShDRykKICAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVy
bmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOworICAgIFVOVVNFRF9QQVJB
TShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogI2Vsc2UKLSAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8
IGRzdENvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQorICAgIGlmICghaGFzUmVzdWx0
KCkgfHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5
IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCiAgICAgLy8gY29s
b3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJy
YXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1
bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKyAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50
cmFuc2Zvcm1Db2xvclNwYWNlKG1fcmVzdWx0Q29sb3JTcGFjZSwgZGVzdGluYXRpb25Db2xvclNw
YWNlKTsKIAotICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRzdENvbG9yU3BhY2U7CisgICAgbV9y
ZXN1bHRDb2xvclNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwogCi0gICAgaWYgKG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBudWxscHRyOwotICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxscHRyOworICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBXVEY6Om51bGxvcHQ7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw4ICsyNywxMCBAQAogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDEsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJF
ZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVs
QnVmZmVyOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZm
ZWN0VmVjdG9yOwogCkBAIC0xMDAsNyArMTAzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsK
LSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMu
CiAgICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwpAQCAt
MTg1LDggKzE4OCw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUg
Y29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAs
MjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTIwMiwxOCAr
MjA1LDE4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9E
ZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZl
cnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFnZURhdGEm
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IElu
dFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
T3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
Y29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdl
RGF0YSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdl
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIHZv
aWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYsIFBpeGVsQnVmZmVyJiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7CisgICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIAogCiAgICAgRmlsdGVyJiBtX2ZpbHRlcjsKICAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KIAogI2lmIFVTRShB
VkZPVU5EQVRJT04pCkBAIC0yMDksMTAgKzIwOSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludFJlbmRlCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCisg
ICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgaWYgKCFw
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0
dHJpYnV0ZXMoKSwgaW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxsKCksIGltYWdlQnVmZmVyLmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CisgICAgcGFpbnRUb0NhbnZhcyhjb250
ZXh0QXR0cmlidXRlcygpLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLmJhY2tl
bmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIpCkBAIC0yMjEsNDAgKzIyMSw0MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWludENvbXBvCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwotICAgIGlmICghaW1hZ2VEYXRhKQor
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBpZiAo
IXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRUb0NhbnZhcyhjb250ZXh0
QXR0cmlidXRlcygpLCBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXIuYmFj
a2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKKyAgICBwYWludFRvQ2FudmFzKGNv
bnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZmZXIuYmFj
a2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0
YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpCiB7CiAgICAgLy8gUmVhZGluZyBwcmVt
dWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMg
bG9zc3kuCiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogfQogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHNG
b3JQYWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQogewogICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9CiAKLVJlZlB0cjxJbWFn
ZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQ
YWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCkKIHsKICAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIHJldHVybiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAogI2lmICFQTEFURk9S
TShDT0NPQSkKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
Q29tcG9zaXRlZFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewogICAgIHJldHVybiByZWFkUmVu
ZGVyaW5nUmVzdWx0cygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw4
ICs4Nyw4IEBAIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKICNlbmRpZgogY2xhc3MgSG9zdFdp
bmRvdzsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgTWVkaWFQ
bGF5ZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBjbGFz
cyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKQEAgLTQ2MywxMSArNDYz
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24oKTsKIAogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZm
ZXImKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpIGZpbmFsOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKIAotICAgIFJlZlB0cjxJbWFn
ZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKLSAgICBSZWZQdHI8SW1h
Z2VEYXRhPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworICAgIE9wdGlvbmFs
PFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCk7CisgICAgT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CiAK
ICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBs
YXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZpbmFsOwpAQCAtNTI2
LDcgKzUyNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5
cGVGb3JJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0mIGZv
cm1hdCwgR0NHTGVudW0mIHR5cGUpOwogI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSAgICBzdGF0
aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYs
IFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29u
dGV4dCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXImJiwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBA
IC01NTMsOSArNTUzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CiAK
IAotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0gICAgUmVm
UHRyPEltYWdlRGF0YT4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7Ci0gICAgUmVmUHRyPEltYWdl
RGF0YT4gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBy
ZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFBp
eGVsc0ZvclBhaW50UmVzdWx0cygpOwogCiAgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRT
aXplJik7CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaWYgRU5B
QkxFKFdFQkdMKSAmJiBVU0UoT1BFTkdMKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdM
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0cmluZz4K
QEAgLTYxLDEyICs2MSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotUmVmUHRyPElt
YWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3Vs
dHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
UGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0
YTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwotICAgIGlmICghaW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7CisgICAgaWYgKCFwaXhl
bEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEdMaW50IHBhY2tB
bGlnbm1lbnQgPSA0OwogICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7
CkBAIC03NiwxMiArNzUsMTIgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuRwogICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KIAot
ICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0
YSgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRo
KCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKIAogICAgIGlmIChtdXN0UmVzdG9yZVBh
Y2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwg
cGFja0FsaWdubWVudCk7CiAKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhl
bEJ1ZmZlcjsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRy
aWJ1dGVzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29t
bW9uLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksMTAgKzM5LDEwIEBACiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CiAjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgogI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhw
cmVzc2lvbi5oPgpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnByZXBhcmVUZXgKICAgICA6OmdsRmx1c2goKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK09wdGlvbmFs
PFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3Vs
dHMoKQogewogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAoY29udGV4
dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0Uo
T1BFTkdMX0VTKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
IAogI2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcuaD4KIApAQCAtNDYsNyArNDYsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0KICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKQEAgLTY1LDExICs2
NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVs
c0ZvclBhaW50UmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VE
YXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0g
ICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4
ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsK
KyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CiAgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGln
bm1lbnQgPSBmYWxzZTsKQEAgLTc5LDEyICs3OCwxMiBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRy
dWU7CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgp
LCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURh
dGEtPmRhdGEoKS5kYXRhKCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIHBpeGVsQnVmZmVy
LT5zaXplKCkud2lkdGgoKSwgcGl4ZWxCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogCiAgICAgaWYg
KG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BB
Q0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAotICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJDT01QdHIuaCIKICNp
bmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJE
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxXzEuaD4K
ICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0zMTIsMTYgKzMxMiwxNiBAQCBWZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29u
c3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0
LCBudWxscHRyKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZl
cihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOwogfQogCi12b2lkIEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBw
aXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsK
KyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhl
bEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhl
bEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByb3Rl
Y3RlZDoKICAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBJbnRSZWN0IENTU0Zp
bHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CiAgICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0
cy5sYXN0KCkuZ2V0KCk7CiAgICAgCiAgICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkgfHwg
KG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQotICAg
ICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKElu
dFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKKyAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9
KTsKICAgICAKICAgICByZXR1cm4geyB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4
IEBACiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiUG9seWdvblNoYXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKICNpbmNsdWRlICJS
ZWN0YW5nbGVTaGFwZS5oIgpAQCAtMTk3LDE0ICsxOTcsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNo
YXBlPiBTaGFwZTo6Y3JlYXRlUmFzdAogICAgIGlmIChpbWFnZSkKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNp
emUoKSkpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBp
bWFnZVJlY3Quc2l6ZSgpIH0pOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+
Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CiAgICAgCi0gICAgLy8gV2UgY291bGQg
Z2V0IHRvIGEgdmFsdWUgd2hlcmUgaW1hZ2VEYXRhIGNvdWxkIGJlIG51bGxwdHIuIEEgY2FzZSB3
aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1Z2UsIGltYWdlRGF0YTo6Y3JlYXRlCi0gICAgLy8g
Y2FuIHJldHVybiBhIG51bGxwdHIgYmVjYXVzZSBkYXRhIHNpemUgaGFzIG92ZXJmbG93ZWQuIFJl
ZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0Ci0gICAgaWYgKCFpbWFnZURhdGEpCisgICAgLy8g
V2UgY291bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgUGl4ZWxCdWZmZXIgY291bGQgYmUgbnVsbG9w
dC4gQSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgUGl4ZWxCdWZmZXI6OnRy
eUNyZWF0ZQorICAgIC8vIGNhbiByZXR1cm4gYSBudWxsb3B0IGJlY2F1c2UgZGF0YSBzaXplIGhh
cyBvdmVyZmxvd2VkLiBSZWZlciByZGFyOi8vcHJvYmxlbS82MTc5Mzg4NAorICAgIGlmICghcGl4
ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwogCi0gICAgYXV0byYgcGl4
ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFy
cmF5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNo
IHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgdWludDhfdCBhbHBoYVBpeGVsVGhyZXNo
b2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0aHJlc2hv
bGQsIDAsIDEpICogMjU1LjBmKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MyBAQAor
MjAyMS0wNS0wOSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IFBpeGVsQnVmZmVyIHJhdGhlciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBm
aXggbGF5ZXJpbmcgdmlvbGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjU1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHRoZSBET00gbGF5ZXIgb2JqZWN0IFdl
YkNvcmU6OkltYWdlRGF0YSB3aXRoIHRoZSBuZXcgcGxhdGZvcm0KKyAgICAgICAgbGF5ZXIgV2Vi
Q29yZTo6UGl4ZWxCdWZmZXIsIHdoaWNoIGZpeGVzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIFdlYkNv
cmUgYW5kIGF2b2lkcworICAgICAgICB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyAvIHJlZmVyZW5j
ZSBjb3VudGluZy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0wuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UGl4ZWxCdWZmZXJU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6
OnBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW46CisgICAg
ICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9u
c0dlbmVyYXRlZC5oOgorICAgICAgICAocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZl
cik6CisgICAgICAgIChwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9y
eUZvckdldFBpeGVsQnVmZmVySGVscGVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRQaXhlbEJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNo
YXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9wdWxhdGVH
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmRlY29kZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFy
ZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1v
cnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9w
dWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6Q0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NH
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWY8V2Vi
Q29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5j
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2VEYXRhPj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oklt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpz
aGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFn
ZURhdGFUb0NvbXBsZXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURh
dGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOgorCiAyMDIxLTA1LTA5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIElQQyB0ZXN0aW5nIEFQSSBz
aG91bGQgaGF2ZSB0aGUgYWJpbGl0eSB0byBzZW5kIGFuZCByZWNlaXZlIHNoYXJlZCBtZW1vcnkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDE2ICsxOTgsMTYgQEAgdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6bm90aWZ5TWFyawogdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlQnVmZmVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKLSAgICBw
YWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVyaW5nUmVzdWx0
c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkUmVuZGVy
aW5nUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwotICAgIHBhaW50SW1h
Z2VEYXRhVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBh
aW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5yZWFkQ29tcG9zaXRlZFJl
c3VsdHNGb3JQYWludGluZygpLCBpbWFnZUJ1ZmZlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludEltYWdlRGF0YVRv
SW1hZ2VCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4mJiBpbWFnZURhdGEsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVs
QnVmZmVyPiYmIHBpeGVsQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKICAgICAvLyBGSVhNRTog
V2UgZG8gbm90IGhhdmUgZnVuY3Rpb25pbmcgcmVhZC93cml0ZSBmZW5jZXMgaW4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC4gVGh1cyB0aGlzIGlzIHN5bmNocm9ub3VzLApAQCAtMjE5LDggKzIxOSw4
IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50SW1hZ2UKICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbmRlcmluZ0JhY2tlbmQtPnJlbW90ZVJlc291cmNlQ2Fj
aGUoKS5jYWNoZWRJbWFnZUJ1ZmZlcih0YXJnZXQpKSB7CiAgICAgICAgICAgICAvLyBIZXJlIHdl
IGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29tbWFuZHMgZm9yIGltYWdlQnVmZmVy
LiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBmb3IgZW1wdHkKICAgICAgICAgICAg
IC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gYWRkIGRpc3BsYXkg
bGlzdHMuCi0gICAgICAgICAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBpbWFn
ZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRleHRB
dHRyaWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmNsZWFyUmVjdCh7IEludFBvaW50KCksIGlt
YWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpIH0pOwogICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVs
eSAiZmx1c2giIGltcGxlbWVudGF0aW9uIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgb3Zlcmxv
YWRzIG9yZGVyaW5nIGFuZCBlZmZlY3RzLgpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgJKHJl
dmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAg
cHJvdGVjdGVkOgogCiAjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNH
ZW5lcmF0ZWQuaCIgLy8gTk9MSU5UCiAKLSAgICB2b2lkIHBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1
ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBw
YWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZl
cj4mJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
PiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVmUHRyPElQQzo6U3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+IG1fc3RyZWFtQ29ubmVjdGlv
bjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTC5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4
NCw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIE5vdFIKICAgICB2b2lk
IE11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlS
ZWZlcmVuY2U8aW50MzJfdD4gZmlyc3RzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGNv
dW50cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBpbnN0YW5jZUNvdW50cywgaW50MzJf
dCBkcmF3Y291bnQpCiAgICAgdm9pZCBNdWx0aURyYXdFbGVtZW50c0FOR0xFKHVpbnQzMl90IG1v
ZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gY291bnRzLCB1aW50MzJfdCB0eXBlLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IG9mZnNldHMsIGludDMyX3QgZHJhd2NvdW50KQog
ICAgIHZvaWQgTXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSh1aW50MzJfdCBtb2RlLCBJ
UEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpB
cnJheVJlZmVyZW5jZTxpbnQzMl90PiBvZmZzZXRzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMy
X3Q+IGluc3RhbmNlQ291bnRzLCBpbnQzMl90IGRyYXdjb3VudCkKLSAgICB2b2lkIFBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgLT4gKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cworICAgIHZvaWQgUGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9QaXhlbEJ1ZmZlcigpIC0+IChPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcmV0dXJu
VmFsdWUpIFN5bmNocm9ub3VzCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc5LDExICsxMzc5
LDExIEBACiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgICAg
IG1fY29udGV4dC0+bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBtYWtlR0NH
TFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihjb3VudHMuZGF0YSgpKSwg
Y291bnRzLnNpemUoKSksIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0
IEdDR0xpbnQqPihvZmZzZXRzLmRhdGEoKSksIG9mZnNldHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVpKj4oaW5zdGFuY2VDb3VudHMuZGF0YSgp
KSwgaW5zdGFuY2VDb3VudHMuc2l6ZSgpKSwgZHJhd2NvdW50KTsKICAgICB9Ci0gICAgdm9pZCBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHZv
aWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKICAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHJldHVyblZhbHVl
ID0geyB9OworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcmV0dXJuVmFs
dWUgPSB7IH07CiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Ci0gICAg
ICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpOworICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9QaXhlbEJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KHJldHVyblZhbHVlKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gMjc3MjU1
KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVtb3RlSW1hZ2VCdWZm
ZXIgOiBwdWJsaWMgV2ViQ29yZQogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0g
V2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFz
ZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXI6Om1fYmFja2VuZDsKLSAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6
cHV0SW1hZ2VEYXRhOworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhl
bEJ1ZmZlcjsKIAogcHVibGljOgogICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9y
bWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQpAQCAtNzYsMTYgKzc2LDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBhcHBs
eShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS5pczxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpKSB7Ci0gICAgICAgICAgICBhdXRv
JiBnZXRJbWFnZURhdGFJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldElt
YWdlRGF0YT4oKTsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVtLm91dHB1dEZvcm1hdCgpLCBn
ZXRJbWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7Ci0gICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQucG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoaW1hZ2VEYXRhLmdldCgp
KTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldFBpeGVsQnVm
ZmVyPigpKSB7CisgICAgICAgICAgICBhdXRvJiBnZXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdl
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KCk7CisgICAgICAgICAgICBh
dXRvIHBpeGVsQnVmZmVyID0gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
KGdldFBpeGVsQnVmZmVySXRlbS5vdXRwdXRGb3JtYXQoKSwgZ2V0UGl4ZWxCdWZmZXJJdGVtLnNy
Y1JlY3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucG9wdWxhdGVH
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShXVEZNb3ZlKHBpeGVsQnVmZmVyKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHB1
dEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VE
YXRhPigpOwotICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRG
b3JtYXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5z
cmNSZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0u
ZGVzdEZvcm1hdCgpKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlB1dFBpeGVsQnVmZmVyPigpKSB7CisgICAgICAgICAgICBhdXRvJiBwdXRQaXhlbEJ1ZmZlckl0
ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KCk7Cisg
ICAgICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1ZmZlckl0ZW0uaW5wdXRGb3JtYXQo
KSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnBpeGVsQnVmZmVyKCksIHB1dFBpeGVsQnVmZmVySXRlbS5z
cmNSZWN0KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0UG9pbnQoKSwgcHV0UGl4ZWxCdWZmZXJJ
dGVtLmRlc3RGb3JtYXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNSw2NSArMzE1LDY1IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6c2V0TmV4dEl0ZW0KICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3t7IGlkZW50
aWZpZXIsIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksIGRlc3RpbmF0aW9u
SWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQgfSwgV1RGOjpu
dWxsb3B0IH19OwogfQogCi1PcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVy
KHNpemVfdCBieXRlQ291bnQpCitPcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJI
ZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCkKIHsKLSAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJO
X1ZBTFVFKCFtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSB8fCBieXRlQ291bnQgPiBtX2dldElt
YWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCBXVEY6Om51bGxvcHQsICJUaGUgZXhpc3Rpbmcg
U2htZW0gZm9yIGdldEltYWdlRGF0YSgpIGlzIGFscmVhZHkgYmlnIGVub3VnaCB0byBoYW5kbGUg
dGhlIHJlcXVlc3QiKTsKKyAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFtX2dl
dFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5IHx8IGJ5dGVDb3VudCA+IG1fZ2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnktPnNpemUoKSwgV1RGOjpudWxsb3B0LCAiVGhlIGV4aXN0aW5nIFNobWVtIGZv
ciBnZXRQaXhlbEJ1ZmZlcigpIGlzIGFscmVhZHkgYmlnIGVub3VnaCB0byBoYW5kbGUgdGhlIHJl
cXVlc3QiKTsKIAogICAgIGlmIChieXRlQ291bnQgPiA2NCAqIE1CKSB7CiAgICAgICAgIC8vIEp1
c3QgYSBzYW5pdHkgY2hlY2suIEEgNEsgaW1hZ2UgaXMgMzZNQi4KICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
KCk7Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9j
YXRlKGJ5dGVDb3VudCk7CisgICAgZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCk7
CisgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2Nh
dGUoYnl0ZUNvdW50KTsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYg
KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7Ci0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZSho
YW5kbGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1fZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5LT5zaXplKCkgOiAwIH07CisgICAgaWYgKG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1v
cnkpCisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZSho
YW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIHJldHVybiBT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeSA/IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSA6IDAg
fTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVs
QnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
aGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRl
U2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVDb3VudCkpCisgICAgaWYgKGF1
dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoYnl0
ZUNvdW50KSkKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUudmFsdWUo
KSkpOwogICAgIGVsc2UKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIH0KIAotdm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRQaXhlbEJ1
ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
Y29tcGxldGlvbkhhbmRsZXIobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOworICAgIGNvbXBsZXRp
b25IYW5kbGVyKG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwogfQogCi12b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdl
RGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1v
cnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJ
UEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVt
b3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVDb3VudCkpCi0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoaGFuZGxlLnZhbHVlKCkpLCBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7
CisgICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZm
ZXJIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSho
YW5kbGUudmFsdWUoKSksIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwogICAgIGVsc2UKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9LCBtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSk7
CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldEltYWdlRGF0YVNo
YXJlZE1lbW9yeSgpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkg
PSBudWxscHRyOworICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxscHRyOwog
fQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5KFdlYkNvcmU6OkltYWdlRGF0YSogaW1hZ2VEYXRhKQordm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KE9wdGlvbmFs
PFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmIHBpeGVsQnVmZmVyKQogewotICAgIE1FU1NBR0VfQ0hF
Q0sobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnksICJXZSBjYW4ndCBydW4gZ2V0SW1hZ2VEYXRh
IHdpdGhvdXQgYSBidWZmZXIgdG8gd3JpdGUgaW50byIpOworICAgIE1FU1NBR0VfQ0hFQ0sobV9n
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1biBnZXRQaXhlbEJ1ZmZlciB3
aXRob3V0IGEgYnVmZmVyIHRvIHdyaXRlIGludG8iKTsKIAotICAgIGlmIChpbWFnZURhdGEpIHsK
LSAgICAgICAgTUVTU0FHRV9DSEVDSyhpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCkgPD0g
bV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4gb2Yg
Z2V0SW1hZ2VEYXRhIGlzIHRvbyBzbWFsbCIpOwotICAgICAgICBtZW1jcHkobV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBpbWFnZURh
dGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCkpOworICAgIGlmIChwaXhlbEJ1ZmZlcikgeworICAgICAg
ICBNRVNTQUdFX0NIRUNLKHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgpIDw9IG1fZ2V0
UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVtIGZvciByZXR1cm4gb2YgZ2V0
UGl4ZWxCdWZmZXIgaXMgdG9vIHNtYWxsIik7CisgICAgICAgIG1lbWNweShtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5LT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpLCBwaXhl
bEJ1ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1lbXNl
dChtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBtX2dldEltYWdlRGF0YVNo
YXJlZE1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgbWVtc2V0KG1fZ2V0UGl4ZWxCdWZmZXJTaGFy
ZWRNZW1vcnktPmRhdGEoKSwgMCwgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+c2l6ZSgp
KTsKIAotICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlLnNpZ25hbCgpOworICAgIG1fZ2V0UGl4
ZWxCdWZmZXJTZW1hcGhvcmUuc2lnbmFsKCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC01MjEsOCArNTIxLDggQEAgT3B0aW9uYWw8RGlzcGxh
eUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVQogICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKLSAgICBjYXNlIERpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPERpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOworICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoK
KyAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZm
ZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwogICAgIGNhc2UgRGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwog
ICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKQEAgLTU4MSw3ICs1ODEs
NyBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VCiAgICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRy
YW5zbGF0ZToKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOiB7
CisgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOiB7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZXh0SXRlbUJ1ZmZlclRv
UmVhZChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBkZXN0aW5hdGlvbik7CiAKLSAgICB2b2lkIHBv
cHVsYXRlR2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KFdlYkNvcmU6OkltYWdlRGF0YSopOworICAg
IHZvaWQgcG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShPcHRpb25hbDxXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcj4mJik7CiAKICAgICBib29sIGFsbG93c0V4aXRVbmRlck1lbW9yeVByZXNz
dXJlKCkgY29uc3Q7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXBsYXlSZXN1bHQgc3VibWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OkltYWdlQnVmZmVyJiBkZXN0aW5hdGlvbik7CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBuZXh0RGVzdGluYXRpb25JbWFnZUJ1ZmZl
ckFmdGVyQXBwbHlpbmdEaXNwbGF5TGlzdHMoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGluaXRpYWxE
ZXN0aW5hdGlvbiwgc2l6ZV90IGluaXRpYWxPZmZzZXQsIERpc3BsYXlMaXN0UmVhZGVySGFuZGxl
JiwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbik7CiAKLSAgICBPcHRpb25hbDxTaGFyZWRNZW1vcnk6
OklQQ0hhbmRsZT4gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKHNpemVf
dCBieXRlQ291bnQpOworICAgIE9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRh
dGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KTsK
ICAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ1Jlc291cmNlUmVxdWVzdCgpOwogCiAgICAgLy8gSVBD
OjpNZXNzYWdlU2VuZGVyLgpAQCAtMTIzLDEwICsxMjMsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBN
ZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBX
ZWJDb3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKICAgICB2b2lkIHdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3QoY29uc3QgR1BVUHJvY2Vzc1dh
a2V1cE1lc3NhZ2VBcmd1bWVudHMmKTsKLSAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdl
dEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7Ci0gICAgdm9pZCBzZW1hcGhvcmVGb3JH
ZXRJbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYp
PiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdl
RGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKLSAgICB2
b2lkIGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsKKyAgICB2b2lkIHVwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKKyAgICB2
b2lkIHNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CisgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlBbmRT
ZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNl
bWFwaG9yZSYpPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eSgpOwogICAgIHZvaWQgZ2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0
aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKICAgICB2b2lkIGdldERhdGFGb3JJbWFnZUJ1ZmZlcihj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8dWludDhfdD4mJik+JiYpOwogICAgIHZvaWQgZ2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsKQEAgLTE2MSw4ICsxNjEsOCBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBS
ZWZQdHI8RGlzcGxheUxpc3RSZWFkZXJIYW5kbGU+PiBtX3NoYXJlZERpc3BsYXlMaXN0SGFuZGxl
czsKICAgICBPcHRpb25hbDxQZW5kaW5nV2FrZXVwSW5mb3JtYXRpb24+IG1fcGVuZGluZ1dha2V1
cEluZm87CiAgICAgSVBDOjpTZW1hcGhvcmUgbV9yZXN1bWVEaXNwbGF5TGlzdFNlbWFwaG9yZTsK
LSAgICBJUEM6OlNlbWFwaG9yZSBtX2dldEltYWdlRGF0YVNlbWFwaG9yZTsKLSAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsKKyAgICBJUEM6OlNlbWFw
aG9yZSBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7CiAgICAgU2NvcGVkUmVuZGVyaW5nUmVzb3Vy
Y2VzUmVxdWVzdCBtX3JlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3Q7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
bWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMCBAQAogbWVzc2FnZXMg
LT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB7CiAgICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIGVudW06dWludDhfdCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZv
cm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKICAgICBXYWtlVXBBbmRBcHBseURpc3BsYXlMaXN0KHN0cnVjdCBXZWJL
aXQ6OkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzIGFyZ3VtZW50cykKLSAgICBVcGRh
dGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5bmNocm9ub3VzCi0gICAgU2Vt
YXBob3JlRm9yR2V0SW1hZ2VEYXRhKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3lu
Y2hyb25vdXMKLSAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURh
dGEodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSBoYW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKLSAgICBEZXN0
cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKKyAgICBTZW1hcGhvcmVGb3JHZXRQaXhl
bEJ1ZmZlcigpIC0+IChJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCisgICAg
VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3Qg
Ynl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUsIElQ
Qzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKKyAgICBEZXN0cm95R2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnkoKQogICAgIEdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihTdHJpbmcg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgZW51bTp1aW50OF90IFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChTdHJp
bmcgdXJsU3RyaW5nKSBTeW5jaHJvbm91cwogICAgIEdldERhdGFGb3JJbWFnZUJ1ZmZlcihTdHJp
bmcgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFZlY3Rv
cjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwogICAgIEdldEJHUkFEYXRhRm9ySW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikgLT4gKFZlY3Rvcjx1aW50OF90PiBkYXRhKSBTeW5jaHJvbm91cwpJbmRleDog
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE0LDc3ICszMTE0LDYgQEAgT3B0aW9uYWw8V2Vi
Q29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpNZQogfQogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci12b2lkIEFyZ3VtZW50Q29k
ZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUmVmPFdlYkNvcmU6OkltYWdlRGF0YT4mIGltYWdlRGF0YSkKLXsKLSAgICBlbmNvZGVyIDw8
IGltYWdlRGF0YS0+c2l6ZSgpOwotCi0gICAgYXV0byYgcmF3RGF0YSA9IGltYWdlRGF0YS0+ZGF0
YSgpOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhd0RhdGEuYnl0ZUxl
bmd0aCgpKTsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLmRhdGEo
KSwgcmF3RGF0YS5ieXRlTGVuZ3RoKCksIDEpOwotfQotCi10ZW1wbGF0ZQotdm9pZCBBcmd1bWVu
dENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlPEVuY29kZXI+KEVuY29kZXIm
LCBjb25zdCBSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotdGVtcGxhdGUKLXZvaWQgQXJndW1l
bnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZTxTdHJlYW1Db25uZWN0aW9u
RW5jb2Rlcj4oU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBjb25zdCBSZWY8V2ViQ29yZTo6SW1h
Z2VEYXRhPiYpOwotCi1PcHRpb25hbDxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gQXJndW1lbnRD
b2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEludFNpemU+IGltYWdlRGF0YVNpemU7Ci0gICAgZGVjb2RlciA+PiBp
bWFnZURhdGFTaXplOwotICAgIGlmICghaW1hZ2VEYXRhU2l6ZSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBkYXRhTGVuZ3RoOwotICAgIGRl
Y29kZXIgPj4gZGF0YUxlbmd0aDsKLSAgICBpZiAoIWRhdGFMZW5ndGgpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvIHJhd0RhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCgqZGF0YUxlbmd0aCk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPmxlbmd0aCgpLCAxKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUoKmltYWdlRGF0YVNpemUsIFdURk1vdmUocmF3RGF0YSkpOwotICAgIGlm
ICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IHsgaW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxsKCkgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRh
PiYgaW1hZ2VEYXRhKQotewotICAgIGlmICghaW1hZ2VEYXRhKSB7Ci0gICAgICAgIGVuY29kZXIg
PDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7
Ci0gICAgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZShlbmNv
ZGVyLCBpbWFnZURhdGEuY29weVJlZigpLnJlbGVhc2VOb25OdWxsKCkpOwotfQotCi10ZW1wbGF0
ZQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotCi10ZW1wbGF0
ZQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2Rl
KFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyJiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4mKTsKLQotT3B0aW9uYWw8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+IEFyZ3VtZW50Q29k
ZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBib29sIGlzRW5nYWdlZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5nYWdl
ZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoIWlzRW5nYWdlZCkK
LSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9OwotCi0gICAgYXV0byByZXN1bHQgPSBBcmd1bWVu
dENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZGVjb2RlKGRlY29kZXIpOwotICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiB7IFdU
Rk1vdmUoKnJlc3VsdCkgfTsKLX0KLQogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxF
KFdFQkdMKQogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRlclR5cGVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0luZGV4ZWREQi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRN
b2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNlbGVjdGlvbk9wdGlvbi5oPgpAQCAtODA0
LDE4ICs4MDMsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiB9
OwogI2VuZGlmCiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNv
cmU6OkltYWdlRGF0YT4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+IGRl
Y29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJl
ZjxXZWJDb3JlOjpJbWFnZURhdGE+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4K
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFJlZjxXZWJDb3JlOjpJbWFn
ZURhdGE+Jik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+PiBk
ZWNvZGUoRGVjb2RlciYpOwotfTsKLQogI2lmIEhBVkUoUEFTU0tJVF9JTlNUQUxMTUVOVFMpCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRJbnN0YWxsbWVu
dENvbmZpZ3VyYXRpb24+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb24mKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXll
clRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAog
I2lmIEVOQUJMRShDR19ESVNQTEFZX0xJU1RfQkFDS0VEX0lNQUdFX0JVRkZFUikKIAogI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURh
dGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BpeGVsQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViS2l0
QWRkaXRpb25zL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckFkZGl0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTEwNSwxMyArMTA1LDEzIEBAIFZlY3Rvcjx1
aW50OF90PiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIKICAgICByZXR1cm4geyB9OwogfQogCi1S
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxXZWJD
b3JlOjpQaXhlbEJ1ZmZlcj4gQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXZvaWQgQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIENHRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24sIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NH
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gTk9URTogVGhlc2UgYWxsIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIFJlZlB0cjxXZWJD
b3JlOjpOYXRpdmVJbWFnZT4gY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNv
cHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6V2ViQ29yZTo6UGl4ZWxC
dWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRV
cHBlckxlZnRDb3JuZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZURhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BpeGVs
QnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTE2MywxNCArMTYzLDE0IEBAIFZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
Ojp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
K09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6
OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fYml0bWFwLT5kYXRhKCkp
OworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShp
bnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1f
Yml0bWFwLT5kYXRhKCkpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIo
aW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQs
IG1fYml0bWFwLT5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMx
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg+CiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJ
bWFnZURhdGE7Ci19Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBTaGFyZWFibGVCaXRt
YXA7CkBAIC02Myw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+
IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tp
bmdTdG9yZSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6
UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBA
IHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnQKIAogICAgIC8vIEZJWE1F
OiBXZSBjYW5ub3Qgc3luY2hyb25pemUgc28gdGhhdCB3ZSB3b3VsZCBrbm93IG5vIHBlbmRpbmcg
b3BlcmF0aW9ucyBhcmUgdXNpbmcgdGhlIGBidWZmZXJgLgogCi0gICAgLy8gRklYTUU6IEN1cnJl
bnRseSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpnZXRJbWFnZURhdGEgZXQgYWwgZG8gbm90IHdh
aXQgZm9yIHRoZSBmbHVzaGVzIG9mIHRoZSBpbWFnZXMKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5
IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmdldFBpeGVsQnVmZmVyIGV0IGFsIGRvIG5vdCB3YWl0
IGZvciB0aGUgZmx1c2hlcyBvZiB0aGUgaW1hZ2VzCiAgICAgLy8gaW5zaWRlIHRoZSBkaXNwbGF5
IGxpc3RzLiBSYXRoZXIsIGl0IGFzc3VtZXMgdGhhdCBwcm9jZXNzaW5nIGl0cyBzZXF1ZW5jZSAo
ZS5nLiB0aGUgZGlzcGxheSBsaXN0KSB3aWxsIGVxdWFsIHRvIHJlYWQgZmx1c2ggYmVpbmcKICAg
ICAvLyBmdWxmaWxsZWQuIEZvciBiZWxvdywgd2UgY2Fubm90IGNyZWF0ZSBhIG5ldyBmbHVzaCBp
ZCBzaW5jZSB3ZSBnbyB0aHJvdWdoIGRpZmZlcmVudCBzZXF1ZW5jZSAoUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wgc2VxdWVuY2UpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0
R0xQcm94eS5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzE1LDcgKzMxNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG11bHRpRHJhd0FycmF5c0lu
c3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IGZpcnN0
cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIGZpbmFsOwogICAgIHZv
aWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBH
Q0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4g
b2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgZmluYWw7CiAgICAgdm9pZCBtdWx0aURyYXdF
bGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZz
ZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6ZWkg
ZHJhd2NvdW50KSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpIGZpbmFsOworICAgIE9wdGlvbmFsPFdlYkNvcmU6
OlBpeGVsQnVmZmVyPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7
CiAgICAgLy8gRW5kIG9mIGxpc3QgdXNlZCBieSBnZW5lcmF0ZS1ncHVwLXdlYmdsIHNjcmlwdC4K
IAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCShyZXZpc2lvbiAyNzcy
NTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzY2LDExICsyMzY2LDExIEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
bXVsdGkKICAgICB9CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK09w
dGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKIHsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPiByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICBPcHRpb25hbDxXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcj4gcmV0dXJuVmFsdWUgPSB7IH07CiAgICAgaWYgKCFpc0NvbnRleHRMb3N0
KCkpIHsKLSAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpLCBN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhOjpSZXBseShyZXR1cm5WYWx1ZSkpOworICAgICAgICBhdXRvIHNlbmRSZXN1bHQg
PSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyOjpSZXBseShyZXR1cm5WYWx1
ZSkpOwogICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCiAgICAgICAgICAgICBtYXJrQ29udGV4dExv
c3QoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwzOCArMTk0LDM4IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9CiAK
LSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZm
ZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0LnNpemUoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IGltYWdlRGF0
YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFdlYkNv
cmU6OlBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCLCBXZWJDb3JlOjpQaXhlbEZvcm1hdDo6UkdCQTgsIHNyY1JlY3Quc2l6ZSgpKTsKKyAg
ICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0
aCgpOwogCiAgICAgICAgIElQQzo6VGltZW91dCB0aW1lb3V0ID0gNV9zOwotICAgICAgICBTaGFy
ZWRNZW1vcnkqIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5z
aGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUsIHRpbWVvdXQpOworICAgICAgICBT
aGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeSA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT5zaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSwgdGltZW91dCk7CiAgICAg
ICAgIGlmICghc2hhcmVkTWVtb3J5KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIGF1dG8mIG11dGFibGVUaGlz
ID0gY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Jj4oKnRoaXMpOwotICAgICAgICBt
dXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkuZ2V0SW1hZ2VEYXRhKG91dHB1
dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRleHQu
cmVjb3JkZXIoKS5nZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOwogICAgICAg
ICBtdXRhYmxlVGhpcy5mbHVzaERyYXdpbmdDb250ZXh0QXN5bmMoKTsKIAotICAgICAgICBpZiAo
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBs
ZXRlKHRpbWVvdXQpKQotICAgICAgICAgICAgbWVtY3B5KGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEo
KSwgc2hhcmVkTWVtb3J5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgaWYgKG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LT53YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKHRp
bWVvdXQpKQorICAgICAgICAgICAgbWVtY3B5KHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpLCBz
aGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtZW1zZXQoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCAwLCBkYXRhU2l6ZSk7Ci0gICAgICAg
IHJldHVybiBpbWFnZURhdGE7CisgICAgICAgICAgICBtZW1zZXQocGl4ZWxCdWZmZXItPmRhdGEo
KS5kYXRhKCksIDAsIGRhdGFTaXplKTsKKyAgICAgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogICAg
IH0KIAotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQg
PSBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVycmlk
ZQorICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
ZGVzdFBvaW50ID0geyB9LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQgPSBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgLy8gVGhlIG1hdGggaW5zaWRlIEltYWdlRGF0YTo6Y3JlYXRl
KCkgZG9lc24ndCBhZ3JlZSB3aXRoIHRoZSBtYXRoIGluc2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnB1dEltYWdlRGF0YSgpIGFib3V0IGhvdyBtX3Jlc29sdXRpb25TY2FsZSBpbnRlcmFjdHMgd2l0
aCB0aGUgZGF0YSBpbiB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCBwdXRJbWFnZURhdGEoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIHJlc29sdXRpb25TY2FsZSgpID09
IDEuCisgICAgICAgIC8vIFRoZSBtYXRoIGluc2lkZSBQaXhlbEJ1ZmZlcjo6Y3JlYXRlKCkgZG9l
c24ndCBhZ3JlZSB3aXRoIHRoZSBtYXRoIGluc2lkZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKCkgYWJvdXQgaG93IG1fcmVzb2x1dGlvblNjYWxlIGludGVyYWN0cyB3aXRoIHRo
ZSBkYXRhIGluIHRoZSBJbWFnZUJ1ZmZlci4KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHB1
dFBpeGVsQnVmZmVyKCkgaXMgb25seSBjYWxsZWQgd2hlbiByZXNvbHV0aW9uU2NhbGUoKSA9PSAx
LgogICAgICAgICBBU1NFUlQocmVzb2x1dGlvblNjYWxlKCkgPT0gMSk7Ci0gICAgICAgIG1fZHJh
d2luZ0NvbnRleHQucmVjb3JkZXIoKS5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0
YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICAgICAgbV9kcmF3aW5nQ29u
dGV4dC5yZWNvcmRlcigpLnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwg
c3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICB9CiAKICAgICBib29sIHByZWZl
cnNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCShyZXZpc2lvbiAyNzcy
NTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw1MCArMTUwLDUwIEBA
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2UKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNo
YXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShzaXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCB0
aW1lb3V0KQorU2hhcmVkTWVtb3J5KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0IHRp
bWVvdXQpCiB7CiAgICAgc2VuZERlZmVycmVkV2FrZXVwTWVzc2FnZUlmTmVlZGVkKCk7CiAKLSAg
ICBib29sIG5lZWRzU2hhcmVkTWVtb3J5ID0gIW1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5IHx8
IGRhdGFTaXplID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlMZW5ndGg7Ci0gICAgYm9vbCBu
ZWVkc1NlbWFwaG9yZSA9ICFtX2dldEltYWdlRGF0YVNlbWFwaG9yZTsKKyAgICBib29sIG5lZWRz
U2hhcmVkTWVtb3J5ID0gIW1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUg
PiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5TGVuZ3RoOworICAgIGJvb2wgbmVlZHNTZW1h
cGhvcmUgPSAhbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZTsKIAogICAgIGlmIChuZWVkc1NoYXJl
ZE1lbW9yeSkKLSAgICAgICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBudWxscHRyOwor
ICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKIAogICAgIFNo
YXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZTsKICAgICBJUEM6OlNlbWFwaG9yZSBzZW1hcGhv
cmU7CiAKICAgICBpZiAobmVlZHNTaGFyZWRNZW1vcnkgJiYgbmVlZHNTZW1hcGhvcmUpCi0gICAg
ICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFy
ZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUpLCBNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9y
R2V0SW1hZ2VEYXRhOjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJp
bmdXaXRoQXN5bmNNZXNzYWdlcyk7CisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhl
bEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRh
dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFuZGxl
LCBzZW1hcGhvcmUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6
OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOwogICAg
IGVsc2UgaWYgKG5lZWRzU2hhcmVkTWVtb3J5KQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRh
KGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YTo6UmVwbHkoaGFuZGxlKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmlu
Z1dpdGhBc3luY01lc3NhZ2VzKTsKKyAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKGRhdGFT
aXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9y
eUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpLCB0aW1lb3V0LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0
aEFzeW5jTWVzc2FnZXMpOwogICAgIGVsc2UgaWYgKG5lZWRzU2VtYXBob3JlKQotICAgICAgICBz
ZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0
SW1hZ2VEYXRhKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVG
b3JHZXRJbWFnZURhdGE6OlJlcGx5KHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKCksIHRpbWVvdXQpOworICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSwgTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShzZW1h
cGhvcmUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0KTsKIAogICAgIGlm
ICghaGFuZGxlLmhhbmRsZS5pc051bGwoKSkgewotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6
UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9y
eUxlbmd0aCA9IGhhbmRsZS5kYXRhU2l6ZTsKKyAgICAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6
UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5TGVuZ3RoID0gaGFuZGxlLmRhdGFTaXplOwogICAgIH0KICAgICBpZiAobmVlZHNTZW1hcGhv
cmUpCi0gICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUp
OworICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlID0gV1RGTW92ZShzZW1hcGhvcmUp
OwogCi0gICAgaWYgKG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLnN0
b3AoKTsKLSAgICBtX2Rlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lci5zdGFydE9u
ZVNob3QoNV9zKTsKKyAgICBpZiAobV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeVRpbWVyLnN0b3AoKTsKKyAgICBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eVRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOwogCi0gICAgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5LmdldCgpOworICAgIHJldHVybiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5
LmdldCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdl
dEltYWdlRGF0YVRvQ29tcGxldGUoSVBDOjpUaW1lb3V0IHRpbWVvdXQpCitib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6
OlRpbWVvdXQgdGltZW91dCkKIHsKLSAgICBBU1NFUlQobV9nZXRJbWFnZURhdGFTZW1hcGhvcmUp
OwotICAgIHJldHVybiBtX2dldEltYWdlRGF0YVNlbWFwaG9yZS0+d2FpdEZvcih0aW1lb3V0KTsK
KyAgICBBU1NFUlQobV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZSk7CisgICAgcmV0dXJuIG1fZ2V0
UGl4ZWxCdWZmZXJTZW1hcGhvcmUtPndhaXRGb3IodGltZW91dCk7CiB9CiAKLXZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkK
K3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkoKQogewotICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0
cjsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIElQ
Qzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5
KTsKKyAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEZXN0cm95R2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0
aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogfQogCiBT
dHJpbmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZm
ZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIERpc3BsYXlMaXN0OwogY2xhc3Mg
SXRlbTsKIH0KIGNsYXNzIEZsb2F0U2l6ZTsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVs
QnVmZmVyOwogZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIDogdWludDhfdDsKIGVu
dW0gY2xhc3MgRGVzdGluYXRpb25Db2xvclNwYWNlIDogdWludDhfdDsKIGVudW0gY2xhc3MgUmVu
ZGVyaW5nTW9kZSA6IGJvb2w7CkBAIC03OCw5ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHdp
bGxBcHBlbmRJdGVtKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAg
dm9pZCBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIFNoYXJlZE1l
bW9yeSogc2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpU
aW1lb3V0KTsKLSAgICBib29sIHdhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKElQQzo6VGlt
ZW91dCk7Ci0gICAgdm9pZCBkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCk7CisgICAg
U2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihzaXplX3QgZGF0YVNp
emUsIElQQzo6VGltZW91dCk7CisgICAgYm9vbCB3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBs
ZXRlKElQQzo6VGltZW91dCk7CisgICAgdm9pZCBkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnkoKTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rp
b24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzYsMTAg
KzEzNiwxMCBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gbV9jdXJyZW50RGVzdGluYXRpb25JbWFnZUJ1ZmZlcklkZW50aWZpZXI7
CiAgICAgT3B0aW9uYWw8R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHM+IG1fZGVmZXJy
ZWRXYWtldXBNZXNzYWdlQXJndW1lbnRzOwogICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nSXRlbXNU
b0FwcGVuZEJlZm9yZVNlbmRpbmdXYWtldXAgeyAwIH07Ci0gICAgT3B0aW9uYWw8SVBDOjpTZW1h
cGhvcmU+IG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOwotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OwotICAgIHVpbnQ2NF90IG1fZ2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5TGVuZ3RoIHsgMCB9OwotICAgIFdlYkNvcmU6OlRpbWVyIG1fZGVzdHJveUdl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyIHsgKnRoaXMsICZSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgfTsKKyAgICBPcHRpb25h
bDxJUEM6OlNlbWFwaG9yZT4gbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZTsKKyAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5OworICAgIHVpbnQ2NF90
IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlMZW5ndGggeyAwIH07CisgICAgV2ViQ29yZTo6
VGltZXIgbV9kZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lciB7ICp0aGlzLCAm
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnkgfTsKICAgICBXZWFrUHRyPEdQVVByb2Nlc3NDb25uZWN0aW9uPiBtX2dwdVByb2Nlc3ND
b25uZWN0aW9uOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTMg
KzEyMCwxMyBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbikKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
OjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBQaXhlbEJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdlYkNv
cmU6OlByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRh
KFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6
SW1hZ2VEYXRhJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4g
Z2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1
dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0gdHJ1ZTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgY2FuTWFwQmFja2luZ1N0b3JlID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428180</attachid>
            <date>2021-05-10 10:17:15 -0700</date>
            <delta_ts>2021-05-10 15:56:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225584-20210510101714.patch</filename>
            <type>text/plain</type>
            <size>228627</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBAQAorMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhl
ciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIHVzZSBvZiB0aGUgRE9NIGxheWVyICYgcmVmLWNvdW50ZWQgSW1hZ2VEYXRhIGNsYXNzIHdp
dGggdGhlIG5ldyAKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgUGl4ZWxCdWZmZXIgY2xhc3MsIHdo
aWNoIEltYWdlRGF0YSBub3cgdXNlcyBpbnRlcm5hbGx5LgorCisgICAgICAgIFNpbmNlIFBpeGVs
QnVmZmVyIGlzIG5vdC1yZWZlcmVuY2UgY291bnRlZCBvciBoZWFwLWFsbG9jYXRlZCBpbiBtb3N0
IGNhc2VzLAorICAgICAgICBtYW55IHVzZXMgb2YgUmVmUHRyPEltYWdlRGF0YT4gdG8gaW5kaWNh
dGUgYSBwb3RlbnRpYWxseSBudWxsIEltYWdlRGF0YSBoYXZlCisgICAgICAgIGJlZW4gcmVwbGFj
ZWQgd2l0aCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4uIEdlbmVyYWxseSwgdGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gdGhhdCB3YXMgb25s
eSBuZWVkZWQgZm9yIHRoZSBET00gb2JqZWN0LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdG8g
bWFueSBmdW5jdGlvbnMgd2l0aCBJbWFnZURhdGEgaW4gdGhlaXIgbmFtZSBub3cgaGF2ZQorICAg
ICAgICBQaXhlbEJ1ZmZlciBpbiB0aGVpciBuYW1lIGluc3RlYWQsIGUuZy4gSW1hZ2VCdWZmZXI6
OmdldEltYWdlRGF0YSBpcyBub3cKKyAgICAgICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
ICh0aG91Z2ggSSB0aGluayBjaGFuZ2luZyB0aGlzIGluIHRoZSBmdXR1cmUgdG8gCisgICAgICAg
IEltYWdlQnVmZmVyOjpjb3B5UGl4ZWxCdWZmZXIgaXMgYSBnb29kIGlkZWEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ltYWdl
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpwaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0UGl4ZWxCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQnVmZmVyU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBl
bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpk
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZl
Q29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNp
emVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdp
bmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpQdXRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQ
dXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6OkdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcjo6cGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YTo6R2V0SW1hZ2VEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE6Om91
dHB1dEZvcm1hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0SW1hZ2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmlucHV0Rm9ybWF0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE6OmRlc3RQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZXN0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
RGF0YVRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0
c0ZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgcHJvdGVjdGlvbiBv
ZiB0aGUgcGl4ZWwgYnVmZmVyIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSByZW1v
dmVkIGluIHIyNzcyMzcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3NiwxMyArMTA3NiwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSB9KTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgaWYg
KCFwaXhlbEJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFy
ZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHBpeGVsQnVmZmVyLT5kYXRh
KCkucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewog
ICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJy
b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTUwLDYgKzMxNTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICBJbnRTaXplIGltYWdlRGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKICAgICAgICAgaW1h
Z2VEYXRhU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBD
cmVhdGluZyB0aGlzIEltYWdlRGF0YSBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgc2tpcCBy
aWdodCB0byBjcmVhdGluZyBhIFBpeGVsQnVmZmVyIGRpcmVjdGx5LgogICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVNpemUsIGFycmF5LnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgZmFpbCgp
OwpAQCAtMzE2Miw3ICszMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6
ZXJvKCksIGxvZ2ljYWxTaXplIH0pOworICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZm
ZXIoKSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRv
IGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
YnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXph
dGlvblN0YXRlKSkpOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsNyArNzQzLDcgQEAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhU
TUxDYW52YXNFbAogI2lmIFVTRShDRykKICAgICAvLyBUcnkgdG8gZ2V0IEltYWdlRGF0YSBmaXJz
dCwgYXMgdGhhdCBtYXkgYXZvaWQgbG9zc3kgY29udmVyc2lvbnMuCiAgICAgaWYgKGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBVbmNhY2hlZFN0cmluZyB7
IGRhdGFVUkwoKmltYWdlRGF0YSwgZW5jb2RpbmdNSU1FVHlwZSwgcXVhbGl0eSkgfTsKKyAgICAg
ICAgcmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgZGF0YVVSTChpbWFnZURhdGEtPnBpeGVsQnVmZmVy
KCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpIH07CiAjZW5kaWYKIAogICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC03NzQsNyArNzc0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIFVTRShDRykKICAgICBpZiAoYXV0byBp
bWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYjsK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0gZGF0YSgqaW1hZ2VEYXRhLCBlbmNv
ZGluZ01JTUVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRh
ID0gZGF0YShpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxp
dHkpOwogICAgICAgICBpZiAoIWJsb2JEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJsb2Ig
PSBCbG9iOjpjcmVhdGUoJmRvY3VtZW50KCksIFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01J
TUVUeXBlKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgV1RG
TW92ZShibG9iKSk7CkBAIC04MTIsNyArODEyLDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldAogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2Nv
bnRleHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVy
biBJbWFnZURhdGE6OmNyZWF0ZShkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
bV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJp
dG1hcC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDYsMTAgKzgwNiw5IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyBJZiBubyBjcm9wcGluZywgcmVz
aXppbmcsIGZsaXBwaW5nLCBldGMuIGFyZSBuZWVkZWQsIHRoZW4gc2ltcGx5IHVzZSB0aGUKICAg
ICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBhbHBoYVByZW11
bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEo
b3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKLSAgICBpZiAoc291cmNlUmVjdGFuZ2xlLnJldHVy
blZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJuVmFs
dWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkKLSAgICAgICAgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUKLSAgICAgICAgJiYgb3B0aW9u
cy5pbWFnZU9yaWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5v
bmUpIHsKLSAgICAgICAgYml0bWFwRGF0YS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIGlmIChz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5sb2NhdGlvbigpLmlzWmVybygpICYmIHNvdXJj
ZVJlY3RhbmdsZS5yZXR1cm5WYWx1ZSgpLnNpemUoKSA9PSBpbWFnZURhdGEtPnNpemUoKSAmJiBz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZSAmJiBvcHRp
b25zLmltYWdlT3JpZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6
Tm9uZSkgeworICAgICAgICBiaXRtYXBEYXRhLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgc291
cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworICAgICAgICAKICAgICAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSkpOwogICAgICAgICAvLyBUaGUgcmVz
dWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRp
b24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgICAgICBwcm9taXNlLnJlc29sdmUoV1RG
TW92ZShpbWFnZUJpdG1hcCkpOwpAQCAtODIzLDcgKzgyMiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6
OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVm
ZmVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRydWUsIFdURk1vdmUocHJvbWlzZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHRlbXBCaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRSZWN0
KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgdGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhLT5waXhl
bEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGVtcEJpdG1hcERhdGEsIGRlc3RSZWN0LCBzb3VyY2VSZWN0
YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNp
emVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmll
bnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIxICs0MywxNiBAQCBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gSW1hZ2VECiAgICAgcmV0dXJuIGNoZWNrZWREYXRh
U2l6ZTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgaWYgKCFzdyB8fCAhc2gpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIEludFNpemUg
c2l6ZShzdywgc2gpOwotICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNp
emUpOwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoaXMg
c2l6ZSJfcyB9OwotICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOwotICAgIGlmICghYnl0ZUFy
cmF5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhICJyZWFsIiBv
dXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxsZWQgb24gaXQ/
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9mIG1lbW9yeSJf
cyB9OwotICAgIH0KLSAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoV1RGTW92ZShwaXhlbEJ1ZmZlcikpKTsKK30K
KworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKFdURk1vdmUoKnBpeGVs
QnVmZmVyKSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC04MCw2ICs3NSwyMyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZURhdGE6OmNyZWF0ZShjb25zCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdU
Rk1vdmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKK0V4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJ
bWFnZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCit7CisgICAgaWYgKCFz
dyB8fCAhc2gpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owor
ICAgIEludFNpemUgc2l6ZShzdywgc2gpOworICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6
OmRhdGFTaXplKHNpemUpOworICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVm
ZmVyIG9mIHRoaXMgc2l6ZSJfcyB9OworICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOworICAg
IGlmICghYnl0ZUFycmF5KSB7CisgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBi
ZSBhICJyZWFsIiBvdXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBj
YWxsZWQgb24gaXQ/CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0
IG9mIG1lbW9yeSJfcyB9OworICAgIH0KKyAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgp
IH0pKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25h
bDx1bnNpZ25lZD4gc2gpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5n
dGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZURhdGE+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWdu
ZWQgc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SW1hZ2VEYXRhPiBjcmVhdGUo
UGl4ZWxCdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQg
c2gpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gY3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFs
PHVuc2lnbmVkPiBzaCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCkBAIC01
Miw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CiAgICAgUGl4
ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsg
fQogCisgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbEJ1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlRGF0YShQaXhl
bEJ1ZmZlciYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDE0ICsyMTk5LDE0IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAot
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKLSAgICBpZiAoIWltYWdl
RGF0YSkgeworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBidWZmZXItPmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7Cisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8g
Z2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURh
dGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJl
dHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIHsgeyBJbWFnZURhdGE6OmNyZWF0ZShXVEZNb3Zl
KCpwaXhlbEJ1ZmZlcikpIH0gfTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBpbnQgZHgsIGludCBkeSkKQEAgLTIy
NDYsNyArMjI0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW0K
ICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBk
YXRhLmhlaWdodCgpIH0pOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAg
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVz
dE9mZnNldCB9KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzYsMTIgKzEy
MzYsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbgogICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKmJhc2UuYnVmZmVyKCkpOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoQ2xlYXJDYWxsZXJPdGhlcik7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4dHVyZUV4dGVuc2lvbkZs
YWdzKCkgY29uc3QKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgogICAgICAg
ICAgICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC0+ZXh0cmFjdFBpeGVsQnVmZmVyKHBpeGVscy0+cGl4ZWxCdWZmZXIoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBhZGp1c3RlZFNvdXJjZUltYWdl
UmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlbW92ZVNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChX
ZWJHTENvbnRleHRPYmplY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNl
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VC
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b25jcmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMCwyMCArMjMwLDIwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAg
ICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzY0LDEyICs3NjQsMTAgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRh
LCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGlu
dCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFn
ZURhdGEtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IHBpeGVsQnVmZmVyLnNpemUoKS53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBwaXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICB1bnNpZ25lZCBwYWNrZWRTaXplOwogICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCkBAIC03NzksNyArNzc3LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0
YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFn
ZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9O
b3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhwaXhlbEJ1
ZmZlci5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFP
cDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBF
eHRlbnNpb25zR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEFWRk9VTkRBVElPTikKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1Y7CkBAIC0xMjkyLDcg
KzEyOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSBidWZmZXIgYWJzdHJhY3Rpb25zIHRo
YXQgdGhlIGNhbGxlciBzaG91bGQgaG9sZCBzZXBhcmF0ZSB0bwogICAgIC8vIHRoZSBjb250ZXh0
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpID0gMDsK
IAogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgbGF5ZXIgc2hvdWxk
IGJlIG1hcmtlZCBjb21wb3NpdGVkIGJ5CkBAIC0xMzQzLDExICsxMzQzLDExIEBAIHB1YmxpYzoK
ICAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgogICAgIHN0
YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVp
IGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0
ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0
aGUgZ2l2ZW4gUGl4ZWxCdWZmZXIgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNr
aW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBl
LAogICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
cy4gUmV0dXJucyB0cnVlCiAgICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4
dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKICAgICAvLyBk
YXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
OCArMTI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MiwyMjcgKzYyLDIyNyBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
CiAgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwgc291
cmNlUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwot
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHNy
Y1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICB1aW50OF90IGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKICAgICAgICAg
aWYgKCFhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgdWludDhfdCByID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbE9mZnNldCArIDIpOwogCiAgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAotICAgIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2lu
dDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAog
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRh
KSBjb25zdAogewogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXplKCku
YXJlYSgpLnVuc2FmZUdldCgpKTsKLSAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbG9naWNh
bFNpemUoKS53aWR0aCgpICogNDsKLSAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdygpOworICAgIHNpemVfdCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUo
KS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc291cmNlQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOwogCi0gICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpOworICAgIHVpbnQ4X3QqIHNvdXJjZVJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKTsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxv
Z2ljYWxTaXplKCkpOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBwaXhlbEZvcm1hdCgpLCBzb3VyY2VCeXRlc1BlclJvdywgc291cmNlUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2ljYWxTaXpl
KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlQ
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCBj
b25zdCB1aW50OF90KiBzcmNQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVsRm9ybWF0LCB1aW50
OF90KiBkZXN0UGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90
KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAgaWYgKCFhbHBoYSkgewot
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7Cisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9
IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4ZWxGb3JtYXQgPT0g
ZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVs
KVswXTsKKyAgICBpZiAoc291cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhl
bClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlUGl4ZWwpWzBd
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgotICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOwotICAgIGRlc3RQ
aXhlbFsxXSA9IHNyY1BpeGVsWzFdOwotICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOwot
ICAgIGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0g
PSBzb3VyY2VQaXhlbFsyXTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gc291cmNlUGl4ZWxb
MV07CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IHNvdXJjZVBpeGVsWzBdOworICAgIGRlc3Rp
bmF0aW9uUGl4ZWxbM10gPSBzb3VyY2VQaXhlbFszXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNvdXJjZVBpeGVsRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1h
dCwgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCkKIHsKLSAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgdWludDhfdCBhbHBoYSA9IHNvdXJjZVBpeGVsWzNdOwogICAgIGlmICgh
YWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Ci0gICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKHNyY1BpeGVsRm9ybWF0LCBzcmNQaXhlbCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0
UGl4ZWwpOworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzb3VyY2VQ
aXhlbEZvcm1hdCwgc291cmNlUGl4ZWwsIGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0
aW9uUGl4ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyY1BpeGVsRm9y
bWF0ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICBpZiAoc291
cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkgeworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzJdID0gKHNvdXJjZVBpeGVsWzJdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxwaGE7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0g
ICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwotICAgIGRlc3RQ
aXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7
CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IChzb3VyY2VQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFs
cGhhOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMF0gKiAyNTUpIC8g
YWxwaGE7CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IGFscGhhOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChQaXhlbEZvcm1hdCBz
cmNQaXhlbEZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIFBpeGVsRm9ybWF0IGRlc3RQ
aXhlbEZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3Jt
YXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNQaXhlbFszXTsKKyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAg
ICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKLSAgICAgICAgY29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoc3JjUGl4ZWxGb3JtYXQsIHNyY1BpeGVsLCBkZXN0UGl4ZWxGb3Jt
YXQsIGRlc3RQaXhlbCk7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KHNvdXJjZVBpeGVsRm9ybWF0LCBzb3VyY2VQaXhlbCwgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwg
ZGVzdGluYXRpb25QaXhlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3Jj
UGl4ZWxGb3JtYXQgPT0gZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgIGlmIChzb3VyY2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0KSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSAoc291cmNlUGl4ZWxb
MF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAo
c291cmNlUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxbM10gPSBhbHBoYTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KLSAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291cmNlUGl4ZWxbMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IChzb3VyY2VQ
aXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0g
YWxwaGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQo
UGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVs
LCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsKQogewotICAgIGlmIChzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQpIHsK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgIGlmIChzb3Vy
Y2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVsRm9ybWF0KSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2VQaXhlbClbMF07CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAg
ZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Ci0gICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxb
MV07Ci0gICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07Ci0gICAgZGVzdFBpeGVsWzNdID0g
c3JjUGl4ZWxbM107CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOwor
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICBkZXN0aW5hdGlv
blBpeGVsWzJdID0gc291cmNlUGl4ZWxbMF07CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IHNv
dXJjZVBpeGVsWzNdOwogfQogCiB0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKFBpeGVsRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgUGl4ZWxGb3JtYXQsIHVpbnQ4X3QqKT4KIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAotICAgIFBpeGVsRm9ybWF0IHNy
Y1BpeGVsRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywK
LSAgICBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgUGl4ZWxGb3Jt
YXQgc291cmNlUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90
KiBzb3VyY2VSb3dzLAorICAgIFBpeGVsRm9ybWF0IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndp
ZHRoKCkgKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKLSAg
ICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY1BpeGVsRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdFBp
eGVsRm9ybWF0LCAmZGVzdFJvd3NbeF0pOwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBj
b3B5RnVuY3Rvcihzb3VyY2VQaXhlbEZvcm1hdCwgJnNvdXJjZVJvd3NbeF0sIGRlc3RpbmF0aW9u
UGl4ZWxGb3JtYXQsICZkZXN0aW5hdGlvblJvd3NbeF0pOworICAgICAgICBzb3VyY2VSb3dzICs9
IHNvdXJjZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0aW5hdGlvblJvd3MgKz0gZGVzdGluYXRp
b25CeXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc291cmNlUGl4
ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBzb3VyY2VSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25CeXRl
c1BlclJvdywgdWludDhfdCogZGVzdGluYXRpb25Sb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAogewogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldHRpbmcgb3IgcHV0
dGluZyBwaXhlbCBkYXRhIHdpdGggZGVlcCBjb2xvciBidWZmZXJzLgotICAgIEFTU0VSVChzcmNQ
aXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc3JjUGl4ZWxGb3JtYXQgPT0gUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBBU1NFUlQoZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpSR0JBOCB8fCBkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBBU1NFUlQoc291cmNlUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJj
ZVBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGRlc3RpbmF0aW9uUGl4ZWxG
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKLSAgICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0
ID09IGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZUFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3Ms
IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0
aW9uUm93cywgc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgICAgICBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc291
cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlv
blBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIHNp
emUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKGRlc3RpbmF0
aW9uQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZD4oc291cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93
LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVy
Um93LCBkZXN0aW5hdGlvblJvd3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQ
aXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
Pihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRlc3Rp
bmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgc2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0aW5hdGlvbkFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBk
YXRhKSBjb25zdAogewotICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOworICAgIGF1dG8gc291cmNlUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNvdXJjZVJlY3QpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBzb3VyY2VSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBp
bnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgp
LCBzb3VyY2VSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CiAKLSAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQotICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVk
LngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGlu
YXRpb25SZWN0LnNldFgoLXNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0
U2NhbGVkLnkoKSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgp
KTsKKyAgICBpZiAoc291cmNlUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2V0WSgtc291cmNlUmVjdFNjYWxlZC55KCkpOwogCi0gICAgaWYgKGRlc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKLSAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCku
emVyb0ZpbGwoKTsKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSkKKyAgICAgICAgcGl4ZWxCdWZmZXItPmRhdGEoKS56ZXJvRmlsbCgpOwog
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgdW5z
aWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VSZWN0U2NhbGVkLndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5k
YXRhKCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRl
c3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBi
eXRlc1BlclJvdygpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgc291cmNlUmVjdENsaXBwZWQueSgpICogc291cmNlQnl0ZXNQZXJS
b3cgKyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAot
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhl
bEZvcm1hdDo6UkdCQTgsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVs
Rm9ybWF0KCksIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5h
dGlvbkFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci0+Zm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQ
ZXJSb3csIGRlc3RpbmF0aW9uUm93cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiAKLSAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0LCB2b2lkKiBkYXRhKQordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlQWxwaGFGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uUG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRp
b25BbHBoYUZvcm1hdCwgdm9pZCogZGF0YSkKIHsKLSAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRT
Y2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGF1dG8gc291cmNl
UmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworICAgIGF1dG8g
ZGVzdGluYXRpb25Qb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RpbmF0aW9u
UG9pbnQpOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAg
SW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOwotICAgIGRlc3RSZWN0Lm1vdmVCeShk
ZXN0UG9pbnRTY2FsZWQpOworICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBwZWQgPSBpbnRlcnNl
Y3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkgfSwgc291cmNlUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBzb3VyY2VSZWN0Q2xpcHBl
ZDsKKyAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQpOwog
Ci0gICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKLSAgICAgICAgZGVzdFJlY3Quc2V0WChk
ZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2Fs
ZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFgoZGVzdGluYXRpb25SZWN0
LngoKSAtIHNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2NhbGVkLnko
KSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxl
ZC55KCkpOworICAgIGlmIChzb3VyY2VSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5zZXRZKGRlc3RpbmF0aW9uUmVjdC55KCkgLSBzb3VyY2VSZWN0U2NhbGVkLnko
KSk7CiAKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7Ci0gICAgc3JjUmVj
dENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRl
c1BlclJvdyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3Vy
Y2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50
OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RD
bGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICog
NDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCi0gICAgICAgIGRlc3RGb3JtYXQs
IHBpeGVsRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIHNvdXJjZUFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSwgc291
cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsCisgICAgICAgIGRlc3RpbmF0aW9uQWxwaGFGb3Jt
YXQsIHBpeGVsRm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OCArNDMsOCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRH
TDsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKIGNs
YXNzIE5hdGl2ZUltYWdlOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAKIGVudW0gQmFja2luZ1N0b3Jl
Q29weSB7CiAgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgpAQCAtMTA5LDggKzEwOSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE1NCw4ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRh
dGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOwogCiAgICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw0NSBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4gUGl4ZWxCdWZmZXI6OmNvbXB1dGVCdWZmZXJTaXplKFBpeGVsRm9ybWF0IGZvcm1h
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZvcm1h
dHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUX1VOVVNFRChmb3JtYXQsIGZv
cm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JB
OCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0Owor
CisgICAgcmV0dXJuIHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIGJ5dGVzUGVyUGl4ZWw7
Cit9CisKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVj
b2RpbmcoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1h
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZGF0YUJ5dGVMZW5ndGgpCit7CisgICAg
QVNTRVJUKGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGNvbXB1dGVCdWZmZXJTaXplKGZvcm1hdCwgc2l6ZSku
dW5zYWZlR2V0KCkgPT0gZGF0YUJ5dGVMZW5ndGgpOworCisgICAgYXV0byBwaXhlbEFycmF5ID0g
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YUJ5dGVMZW5ndGgp
OworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4geyB7IGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgcGl4ZWxBcnJheS5yZWxlYXNl
Tm9uTnVsbCgpIH0gfTsKK30KKworT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjp0
cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZv
cm1hdHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKGZvcm1hdCA9PSBQaXhl
bEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisKKyAgICBh
dXRvIGJ1ZmZlclNpemUgPSBjb21wdXRlQnVmZmVyU2l6ZShmb3JtYXQsIHNpemUpOworICAgIGlm
IChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChidWZmZXJTaXplLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBjb2xvclNwYWNl
LCBmb3JtYXQsIHNpemUsIHBpeGVsQXJyYXkucmVsZWFzZU5vbk51bGwoKSB9IH07Cit9CisKIFBp
eGVsQnVmZmVyOjpQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8SlNDOjpVaW50OENs
YW1wZWRBcnJheT4mJiBkYXRhKQogICAgIDogbV9jb2xvclNwYWNlIHsgY29sb3JTcGFjZSB9CiAg
ICAgLCBtX2Zvcm1hdCB7IGZvcm1hdCB9CkBAIC00Niw0ICs4Miw5IEBAIFBpeGVsQnVmZmVyIFBp
eGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb24KICAgICByZXR1cm4geyBtX2NvbG9yU3BhY2UsIG1f
Zm9ybWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCks
IG1fZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKK3sKKyAgICByZXR1cm4g
dHMgPDwgJnBpeGVsQnVmZmVyLmRhdGEoKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMyArMzAsMTkgQEAKICNpbmNsdWRlICJQaXhlbEZvcm1hdC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBQaXhlbEJ1ZmZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxCdWZmZXIpOwog
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNp
emUmKTsKKwogICAgIFBpeGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQsIGNvbnN0IEludFNpemUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJik7Ci0gICAg
flBpeGVsQnVmZmVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgflBpeGVsQnVmZmVyKCk7CiAKICAg
ICBQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CiAgICAgUGl4ZWxCdWZmZXIm
IG9wZXJhdG9yPShQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CkBAIC00OCwxMSArNTQsNjYgQEAg
cHVibGljOgogCiAgICAgUGl4ZWxCdWZmZXIgZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBkZWNvZGUo
RGVjb2RlciYpOworCiBwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gdHJ5Q3JlYXRlRm9yRGVjb2RpbmcoRGVzdGluYXRpb25Db2xvclNwYWNl
LCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGRhdGFCeXRlTGVuZ3RoKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVy
Zmxvdz4gY29tcHV0ZUJ1ZmZlclNpemUoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNpemUmKTsKKwog
ICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CiAgICAgUGl4ZWxGb3JtYXQg
bV9mb3JtYXQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgUmVmPEpTQzo6VWludDhDbGFtcGVk
QXJyYXk+IG1fZGF0YTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBQaXhlbEJ1ZmZlciYpOworCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9kYXRhLT5ieXRlTGVuZ3RoKCkgPT0gKG1fc2l6ZS5h
cmVhKCkudW5zYWZlR2V0KCkgKiA0KSk7CisKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsK
KyAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OworICAgIGVuY29kZXIgPDwgbV9zaXplOworICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVM
ZW5ndGgoKSwgMSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShj
b2xvclNwYWNlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFBpeGVsRm9y
bWF0IGZvcm1hdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZvcm1hdCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBub24tOCBiaXQgZm9y
bWF0cy4KKyAgICBpZiAoIShmb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6QkdSQTgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgSW50U2l6ZSBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGNvbXB1dGVkQnVmZmVyU2l6ZSA9IFBp
eGVsQnVmZmVyOjpjb21wdXRlQnVmZmVyU2l6ZShmb3JtYXQsIHNpemUpOworICAgIGlmIChjb21w
dXRlZEJ1ZmZlclNpemUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgYXV0byBidWZmZXJTaXplID0gY29tcHV0ZWRCdWZmZXJTaXplLnVuc2FmZUdl
dCgpOworICAgIGlmICghZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluPHVpbnQ4X3Q+KGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgYXV0byByZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcoY29s
b3JTcGFjZSwgZm9ybWF0LCBzaXplLCBidWZmZXJTaXplKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0LT5tX2RhdGEtPmJ5dGVM
ZW5ndGgoKSwgMSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC05MDQsMTIgKzkwNCwx
MiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsK
LSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJE
YXRhID0gbGF5ZXJJbWFnZS5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCkuZGF0YSgpLCBi
bHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXll
ckRhdGEsIGJsdXJSZWN0KTsKKyAgICBsYXllckltYWdlLnB1dFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwog
fQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTEFOR0xFVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlICJUZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAg
LTc3LDExICs3NywxMSBAQCBzdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhp
CiB9CiAjZW5kaWYKIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKIHsKLSAgICBh
dXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICBTY29wZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tBbGlnbm1lbnQoR0xfUEFDS19B
TElHTk1FTlQpOwogICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkKICAgICAgICAgcGFja0FsaWdu
bWVudC5waXhlbFN0b3JlKDQpOwpAQCAtOTAsMTYgKzkwLDE2IEBAIFJlZlB0cjxJbWFnZURhdGE+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICBTY29wZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tT
a2lwUGl4ZWxzKEdMX1BBQ0tfU0tJUF9QSVhFTFMsIDAsIG1faXNGb3JXZWJHTDIpOwogICAgIFNj
b3BlZEJ1ZmZlckJpbmRpbmcgc2NvcGVkUGl4ZWxQYWNrQnVmZmVyUmVzZXQoR0xfUElYRUxfUEFD
S19CVUZGRVIsIDAsIG1faXNGb3JXZWJHTDIpOwogCi0gICAgZ2w6OlJlYWRuUGl4ZWxzUm9idXN0
QU5HTEUoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCksIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CisgICAg
Z2w6OlJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoMCwgMCwgcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0
aCgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwg
bnVsbHB0ciwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogICAgIC8vIEZJWE1FOiBSZW5k
ZXJpbmcgdG8gR0xfUkdCIHRleHR1cmVzIHdpdGggYSBJT1N1cmZhY2UgYm91bmQgdG8gdGhlIHRl
eHR1cmUgaW1hZ2UgbGVhdmVzCiAgICAgLy8gdGhlIGFscGhhIGluIHRoZSBJT1N1cmZhY2UgaW4g
aW5jb3JyZWN0IHN0YXRlLiBBbHNvIEFOR0xFIGdsOjpSZWFkUGl4ZWxzIHdpbGwgaW4gc29tZQog
ICAgIC8vIGNhc2VzIGV4cG9zZSB0aGUgbm9uLTI1NSB2YWx1ZXMuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTgwNAogI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGEpCi0gICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGltYWdlRGF0YS0+d2lkdGgo
KSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpKTsKKyAgICAg
ICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMocGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgp
LCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLmhlaWdodCgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEo
KSk7CiAjZW5kaWYKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVz
KCkKQEAgLTUwOCw3ICs1MDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVw
YXJlVGV4CiAjZW5kaWYKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3Bl
ZFJlc3RvcmVSZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwg
bV9zdGF0ZS5ib3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlh
bGlhcykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0R0xDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEdMQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAj
aW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC0xMDYsMTUgKzEwNiwxNSBAQCBib29sIEdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywgUmVmPEltYWdlRGF0YT4m
JiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29u
c3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywg
UGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIEFTU0VSVCghaW1hZ2VEYXRhLT5zaXplKCku
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIXBpeGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5KCkpOwog
ICAgIGlmIChjYW52YXNTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
Q29udmVydCBSR0JBIHRvIEJHUkEuIEJHUkEgaXMgQ0FJUk9fRk9STUFUX0FSR0IzMiBvbiBsaXR0
bGUtZW5kaWFuIGFyY2hpdGVjdHVyZXMuCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURh
dGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCk7Ci0gICAgdWludDhfdCogcGl4ZWxzID0gaW1hZ2VEYXRh
LT5kYXRhKCkuZGF0YSgpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gcGl4ZWxCdWZmZXIuZGF0
YSgpLmJ5dGVMZW5ndGgoKTsKKyAgICB1aW50OF90KiBwaXhlbHMgPSBwaXhlbEJ1ZmZlci5kYXRh
KCkuZGF0YSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0
KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKIApAQCAtMTI2
LDEwICsxMjYsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0Nhbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZURhdGEtPnNpemUo
KTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLnNpemUoKTsKIAogICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCks
IENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSwgaW1hZ2VEYXRhLT53aWR0aCgpICogNCkpOworICAgICAgICBwaXhlbEJ1ZmZlci5kYXRh
KCkuZGF0YSgpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VT
aXplLmhlaWdodCgpLCBpbWFnZVNpemUud2lkdGgoKSAqIDQpKTsKIAogICAgIGF1dG8gaW1hZ2Ug
PSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2VTdXJmYWNlKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIK
LSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1
ZGUgPGNhaXJvLmg+CiAKICNpZiBVU0UoQ0FJUk8pCkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCCiAgICAgcmV0dXJuIGltYWdlRGF0
YTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNS
ZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdl
RGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQogewotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlu
cHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1fc3VyZmFjZS5nZXQoKSkpOwogCiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNr
ZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CiAgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0g
dG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAgICAgUmVm
UHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7
CiAKIHByb3RlY3RlZDoKICAgICBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3Qg
UGFyYW1ldGVycyYsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0R0xDRy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiAjaWYgSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMTkVPTi5oIgpA
QCAtNTA2LDkgKzUwNiw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6
ZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNv
bnRleHRBdHRyaWJ1dGVzLCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6
ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7
Ci0gICAgQVNTRVJUKCFpbWFnZURhdGEtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCgh
cGl4ZWxCdWZmZXIuc2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gSW5wdXQgaXMgR0xfUkdCQSA9PSBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGEqTGFzdC4KQEAgLTUyMSwxMyArNTIxLDE1
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW4KICAgICBlbHNlCiAg
ICAgICAgIGJpdG1hcEluZm8gfD0ga0NHSW1hZ2VBbHBoYUxhc3Q7CiAKLSAgICBhdXRvIGltYWdl
U2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwotICAgIGludCByb3dCeXRlcyA9IGltYWdlU2l6ZS53
aWR0aCgpICogNDsKLSAgICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5o
ZWlnaHQoKTsKLSAgICB1aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRh
dGEoKTsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSBtYWtlUmVmKHBpeGVsQnVmZmVyLmRhdGEoKSk7
CisgICAgYXV0byBpbWFnZVNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7CisgICAgYXV0byByb3dC
eXRlcyA9IGltYWdlU2l6ZS53aWR0aCgpICogNDsKKyAgICBhdXRvIGRhdGFTaXplID0gcm93Qnl0
ZXMgKiBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgdWludDhfdCogaW1hZ2VQaXhlbHMgPSBwaXhl
bEJ1ZmZlci5kYXRhKCkuZGF0YSgpOwogICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
aW1hZ2VQaXhlbHMsIGRhdGFTaXplKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmaW1hZ2VEYXRhLmxlYWtSZWYoKSwgaW1hZ2VQ
aXhlbHMsIGRhdGFTaXplLCBbXSAodm9pZCogY29udGV4dCwgY29uc3Qgdm9pZCosIHNpemVfdCkg
ewotICAgICAgICByZWludGVycHJldF9jYXN0PEltYWdlRGF0YSo+KGNvbnRleHQpLT5kZXJlZigp
OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEoJnBpeGVsQXJyYXkubGVha1JlZigpLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIFtd
ICh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lkKiwgc2l6ZV90KSB7CisgICAgICAgIHN0YXRpY19j
YXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICB9KSk7
CiAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShhZG9wdENGKENHSW1hZ2VD
cmVhdGUoaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHJvd0J5
dGVzLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCks
IDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgpA
QCAtMTg3LDE4ICsxODYsMTggQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbgogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAg
IC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51
YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dp
Y2FsUmVjdCgpKTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBpbWFnZURh
dGEtPmRhdGEoKTsKLSAgICAgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJyYXkuYnl0ZUxlbmd0
aCgpOwotICAgICAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXpl
KCk7CisgICAgICAgIGF1dG8gcGl4ZWxBcnJheSA9IG1ha2VSZWYocGl4ZWxCdWZmZXItPmRhdGEo
KSk7CisgICAgICAgIGF1dG8gZGF0YVNpemUgPSBwaXhlbEFycmF5LT5ieXRlTGVuZ3RoKCk7Cisg
ICAgICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwog
Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocGl4ZWxBcnJheS5kYXRhKCks
IGRhdGFTaXplKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwaXhlbEFy
cmF5LT5kYXRhKCksIGRhdGFTaXplKTsKIAotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShpbWFnZURhdGEubGVha1JlZigpLCBw
aXhlbEFycmF5LmRhdGEoKSwgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lk
Kiwgc2l6ZV90KSB7Ci0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PEltYWdlRGF0YSo+KGNv
bnRleHQpLT5kZXJlZigpOworICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgmcGl4ZWxBcnJheS5sZWFrUmVmKCksIHBpeGVsQXJy
YXktPmRhdGEoKSwgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBjb25zdCB2b2lkKiwgc2l6
ZV90KSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Kj4o
Y29udGV4dCktPmRlcmVmKCk7CiAgICAgICAgIH0pKTsKICAgICAgICAgCiAgICAgICAgIGlmICgh
ZGF0YVByb3ZpZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICsz
MSw4IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMTU5LDE0ICsxNTksMTQgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEo
bV9kYXRhKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVj
dCwgbV9kYXRhKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZl
cihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBp
eGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwg
ZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2RhdGEpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVmUHRy
PEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVy
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0gdHJ1ZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAjaWYgSEFWRShJ
T1NVUkZBQ0UpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJT1N1cmZhY2UuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtMTY4
LDExICsxNjgsMTEgQEAgdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDbwog
CiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKIHsKLSAgICBpZiAobV9y
ZXF1aXJlc0RyYXdBZnRlclB1dEltYWdlRGF0YSkgeworICAgIGlmIChtX3JlcXVpcmVzRHJhd0Fm
dGVyUHV0UGl4ZWxCdWZmZXIpIHsKICAgICAgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9T
dXJmYWNlIGNhY2hlZCBpbWFnZS4KICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVj
ZXNzYXJ5LgogICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDAp
KTsKLSAgICAgICAgbV9yZXF1aXJlc0RyYXdBZnRlclB1dEltYWdlRGF0YSA9IGZhbHNlOworICAg
ICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgPSBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KQEAgLTE4MywxNyArMTgzLDE3IEBAIFZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2sKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOwogfQogCi1SZWZQ
dHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKm1fc3VyZmFjZSk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VE
YXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0
LCBzcmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKIH0KIAotdm9pZCBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIElP
U3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vz
c01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKLSAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1h
Z2VEYXRhID0gdHJ1ZTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlu
cHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKyAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4
ZWxCdWZmZXIgPSB0cnVlOwogfQogCiBJT1N1cmZhY2UqIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6c3VyZmFjZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDggQEAgcHVibGljOgogCiAgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IFBh
cmFtZXRlcnMmLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKIAorICAgIElPU3VyZmFj
ZSogc3VyZmFjZSgpOworCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKIApAQCAtNjEsOSArNjMs
OCBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92
ZXJyaWRlOwotICAgIElPU3VyZmFjZSogc3VyZmFjZSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0luVXNl
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCByZWxlYXNlR3JhcGhpY3NDb250ZXh0KCkgb3Zl
cnJpZGU7CkBAIC03OCw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB1bnNpZ25lZCBieXRlc1Bl
clJvdygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4g
bV9zdXJmYWNlOwotICAgIG11dGFibGUgYm9vbCBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0SW1hZ2VE
YXRhIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXF1aXJlc0RyYXdBZnRlclB1dFBp
eGVsQnVmZmVyIHsgZmFsc2UgfTsKIAogICAgIG11dGFibGUgYm9vbCBtX25lZWRzU2V0dXBDb250
ZXh0IHsgZmFsc2UgfTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAkocmV2
aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAK
ICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQ
aXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0
Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgpAQCAt
MTE4LDcgKzExOCw3IEBAIGJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHIK
ICAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkp
OwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0
YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IFBpeGVsQnVmZmVy
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKIApAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKIAogICAgIGlmIChDRkVxdWFsKHV0aS5n
ZXQoKSwganBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhh
IGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFj
ay4KLSAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVp
Z2h0KCk7CisgICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS5zaXplKCkud2lkdGgoKSAq
IHNvdXJjZS5zaXplKCkuaGVpZ2h0KCk7CiAgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
QEAgLTE1NCwxMiArMTU0LDEyIEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEo
Y29uc3QKICAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKICAgICB9CiAK
LSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgo
KSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICog
c291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChk
YXRhLCA0ICogc291cmNlLnNpemUoKS53aWR0aCgpICogc291cmNlLnNpemUoKS5oZWlnaHQoKSk7
CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS5zaXplKCkud2lkdGgoKSAqIHNvdXJjZS5zaXplKCku
aGVpZ2h0KCksIDApKTsKICAgICBpZiAoIWRhdGFQcm92aWRlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53
aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZv
LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
KSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uuc2l6ZSgp
LndpZHRoKCksIHNvdXJjZS5zaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLnNpemUo
KS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0
IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOwogCiAgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwogICAgIGlmICghZW5jb2RlSW1h
Z2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKQEAgLTE3
Niw3ICsxNzYsNyBAQCBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyCiAg
ICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwog
fQogCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorU3RyaW5nIGRhdGFVUkwoY29u
c3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQogewogICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBt
aW1lVHlwZSwgcXVhbGl0eSkpCiAgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKQEAgLTE5MCw3ICsxOTAsNyBAQCBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihD
RkRhdGFSZWYgY2ZECiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBkYXRh
KGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZl
ciYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpCiB7CiAgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFs
aXR5KSkKICAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbWFn
ZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZl
clNpemUpOwogCkBAIC00NSwxMCArNDUsMTAgQEAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlG
cm9tSW1hZ2VCdWZmZQogYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1
dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CiAKIFN0cmlu
ZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci1TdHJpbmcgZGF0
YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpOworU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwogCiBWZWN0b3I8
dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29jb2EubW0JKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTY2MSwxMyArNjYxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBy
ZXBhcmVGb3IKICAgICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLVJlZlB0cjxJbWFnZURh
dGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQorT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRl
ZFJlc3VsdHMoKQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi0+ZGlz
cGxheUJ1ZmZlcigpOwogICAgIGlmICghZGlzcGxheUJ1ZmZlci5zdXJmYWNlIHx8ICFkaXNwbGF5
QnVmZmVyLmhhbmRsZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgaWYgKGRpc3BsYXlCdWZmZXIuc3VyZmFjZS0+c2l6ZSgpICE9IGdl
dEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIC8vIE5vdGU6IFdlIGFyZSB1c2luZyBHTCB0
byByZWFkIHRoZSBJT1N1cmZhY2UuIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIHRoZXJlIGFyZSBu
byBjb252aW5pZW50CiAgICAgLy8gZnVuY3Rpb25zIHRvIGNvbnZlcnQgdGhlIElPU3VyZmFjZSBw
aXhlbCBkYXRhIHRvIEltYWdlRGF0YS4gVGhlIGltYWdlIGRhdGEgZW5kcyB1cCBiZWluZwogICAg
IC8vIGRyYXduIHRvIGEgSW1hZ2VCdWZmZXIsIGJ1dCBhdCB0aGUgdGltZSB0aGVyZSdzIG5vIGZ1
bmN0aW9ucyB0byBjb25zdHJ1Y3QgYSBOYXRpdmVJbWFnZQpAQCAtNjc4LDcgKzY3OCw3IEBAIFJl
ZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICBTY29wZWRSZXN0b3Jl
VGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRR
dWVyeSgpLCB0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlVGFyZ2V0ICE9IFRFWFRVUkVfUkVDVEFOR0xF
X0FSQik7CiAgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwogICAg
IGlmICghRUdMX0JpbmRUZXhJbWFnZShtX2Rpc3BsYXlPYmosIGRpc3BsYXlCdWZmZXIuaGFuZGxl
LCBFR0xfQkFDS19CVUZGRVIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CiAgICAgU2NvcGVkRnJhbWVidWZmZXIg
ZmJvOwogICAgIFNjb3BlZFJlc3RvcmVSZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmco
bV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5ib3VuZFJlYWRGQk8sIGZibyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2Zp
bHRlcnMvRkVCbGVuZE5FT04uaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAK
ICNpbmNsdWRlICJGRUJsZW5kLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxhcm1fbmVvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xMTIsMzMgKzExMiwzNCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRl
ckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBhdXRvKiBpbWFnZVJlc3VsdCA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJy
YXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlm
ICghZHN0UGl4ZWxBcnJheSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheUEgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChl
ZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0QkRyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheUIgPSBpbjItPnByZW11bHRpcGxpZWRS
ZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5QSA9IGluLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpOwotICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3Ro
ID09IHNyY1BpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5wcmVtdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0
aCA+PSA4KSB7Ci0gICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNyY1BpeGVsQXJyYXlBLT5kYXRh
KCksIHNyY1BpeGVsQXJyYXlCLT5kYXRhKCksIGRzdFBpeGVsQXJyYXktPmRhdGEoKSwgcGl4ZWxB
cnJheUxlbmd0aCk7CisgICAgdW5zaWduZWQgc291cmNlUGl4ZWxBcnJheUxlbmd0aCA9IHNvdXJj
ZVBpeGVsQXJyYXlBLT5sZW5ndGgoKTsKKyAgICBBU1NFUlQocGl4ZWxBcnJheUxlbmd0aCA9PSBz
b3VyY2VQaXhlbEFycmF5Qi0+bGVuZ3RoKCkpOworCisgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlM
ZW5ndGggPj0gOCkgeworICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5
QS0+ZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAvLyBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdv
LgotICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKHNvdXJjZVBp
eGVsQXJyYXlMZW5ndGggPiAwKTsKICAgICB1aW50MzJfdCBzb3VyY2VBWzJdID0gezAsIDB9Owog
ICAgIHVpbnQzMl90IHNvdXJjZUJBbmREZXN0WzJdID0gezAsIDB9OwogCi0gICAgc291cmNlQVsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNQaXhlbEFycmF5QS0+ZGF0YSgpKVsw
XTsKLSAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihz
cmNQaXhlbEFycmF5Qi0+ZGF0YSgpKVswXTsKKyAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCkpWzBdOworICAgIHNvdXJj
ZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJy
YXlCLT5kYXRhKCkpWzBdOwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHNvdXJjZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5k
RGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7Ci0g
ICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRzdFBpeGVsQXJyYXktPmRhdGEoKSlbMF0g
PSBzb3VyY2VCQW5kRGVzdFswXTsKKyAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVz
dGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSlbMF0gPSBzb3VyY2VCQW5kRGVzdFswXTsKIH0KIAog
dm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFy
cmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBp
eGVsQXJyYXksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCwxMCArMjk4LDEwIEBAIHZvaWQgRGlz
cGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0KICAgICAgICAgcmV0dXJuIGFwcGVuZDxN
ZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PE1ldGFDb21t
YW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyOgogICAgICAgICByZXR1cm4gYXBwZW5kPE1ldGFD
b21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVm
ZmVyPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHJldHVy
biBhcHBlbmQ8R2V0SW1hZ2VEYXRhPihpdGVtLmdldDxHZXRJbWFnZURhdGE+KCkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxQdXRJbWFn
ZURhdGE+KGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0
UGl4ZWxCdWZmZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8R2V0UGl4ZWxCdWZmZXI+KGl0ZW0u
Z2V0PEdldFBpeGVsQnVmZmVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZl
cjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxQdXRQaXhlbEJ1ZmZlcj4oaXRlbS5nZXQ8UHV0UGl4
ZWxCdWZmZXI+KCkpOwogI2lmIEVOQUJMRShWSURFTykKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWE6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlh
PihpdGVtLmdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsOCArMTg4LDggQEAgdm9pZCBJdGVtSGFu
ZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIAogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21t
YW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRh
Q29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAg
IGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBp
eGVsQnVmZmVyOgogICAgICAgICAvLyBTaG91bGQgYWxyZWFkeSBiZSBoYW5kbGVkIGJ5IHRoZSBk
ZWxlZ2F0ZS4KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTI4MCwxMSArMjgwLDExIEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0
PigpLn5GaWxsUm91bmRlZFJlY3QoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5
cGU6OkdldEltYWdlRGF0YToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8R2V0SW1hZ2VEYXRhPjo6dmFsdWUpOworICAgIGNhc2UgSXRlbVR5cGU6
OkdldFBpeGVsQnVmZmVyOgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxHZXRQaXhlbEJ1ZmZlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgZ2V0PFB1dEltYWdlRGF0
YT4oKS5+UHV0SW1hZ2VEYXRhKCk7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6
CisgICAgICAgIGdldDxQdXRQaXhlbEJ1ZmZlcj4oKS5+UHV0UGl4ZWxCdWZmZXIoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgICAgICBnZXQ8
U2V0TGluZURhc2g+KCkuflNldExpbmVEYXNoKCk7CkBAIC01MDQsMTAgKzUwNCwxMCBAQCBib29s
IEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1IYW5kbGUgZGVzCiAgICAgICAgIHJldHVybiBjb3B5
SW50bzxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZp
bGxSb3VuZGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6Okdl
dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEdldEltYWdlRGF0YT4oaXRlbU9m
ZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPFB1dEltYWdlRGF0YT4oaXRlbU9mZnNldCwgKnRoaXMpOworICAgIGNh
c2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88R2V0
UGl4ZWxCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQ
aXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFB1dFBpeGVsQnVmZmVyPihpdGVt
T2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5
dGVzKEl0ZW1UeXBlCiAgICAgICAgIHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VEZXN0
aW5hdGlvbkltYWdlQnVmZmVyKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5n
ZUl0ZW1CdWZmZXI6CiAgICAgICAgIHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoR2V0SW1hZ2VEYXRhKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoUHV0SW1hZ2VEYXRhKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHZXRQaXhlbEJ1ZmZlcik7
CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CisgICAgICAgIHJldHVybiBzaXpl
b2YoUHV0UGl4ZWxCdWZmZXIpOwogI2lmIEVOQUJMRShWSURFTykKICAgICBjYXNlIEl0ZW1UeXBl
OjpQYWludEZyYW1lRm9yTWVkaWE6CiAgICAgICAgIHJldHVybiBzaXplb2YoUGFpbnRGcmFtZUZv
ck1lZGlhKTsKQEAgLTIwOSw3ICsyMDksNyBAQCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUg
dHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdHJva2VUaGlja25lc3M6CiAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgIGNh
c2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1
ZmZlcjoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgpAQCAtMjQwLDcg
KzI0MCw3IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogI2lmIEVOQUJMRShW
SURFTykKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAjZW5kaWYKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4
ZWxCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgpA
QCAtMjk0LDcgKzI5NCw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRS
ZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRQaXhlbEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpA
QCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5l
OgogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJ
bWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzksOCBAQCBlbnVtIGNsYXNzIEl0ZW1U
eXBlIDogdWludDhfdCB7CiAgICAgRmx1c2hDb250ZXh0LAogICAgIE1ldGFDb21tYW5kQ2hhbmdl
RGVzdGluYXRpb25JbWFnZUJ1ZmZlciwKICAgICBNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIs
Ci0gICAgR2V0SW1hZ2VEYXRhLAotICAgIFB1dEltYWdlRGF0YSwKKyAgICBHZXRQaXhlbEJ1ZmZl
ciwKKyAgICBQdXRQaXhlbEJ1ZmZlciwKICNpZiBFTkFCTEUoVklERU8pCiAgICAgUGFpbnRGcmFt
ZUZvck1lZGlhLAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCiAjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNzY5LDM1ICs3NjgsNjAg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgIHJldHVybiB0
czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEdldEltYWdlRGF0YSYgaXRlbSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBHZXRQaXhlbEJ1ZmZlciYgaXRlbSkKIHsKICAgICB0cy5kdW1w
UHJvcGVydHkoIm91dHB1dEZvcm1hdCIsIGl0ZW0ub3V0cHV0Rm9ybWF0KCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgic3JjUmVjdCIsIGl0ZW0uc3JjUmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKLVB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiAgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAs
IG1fZGVzdFBvaW50KGRlc3RQb2ludCkKLSAgICAsIG1faW1hZ2VEYXRhKGltYWdlRGF0YS5kZWVw
Q2xvbmUoKSkgLy8gVGhpcyBjb3B5IGlzIGFjdHVhbGx5IHJlcXVpcmVkIHRvIHByZXNlcnZlIHRo
ZSBzZW1hbnRpY3Mgb2YgcHV0SW1hZ2VEYXRhKCkuCisgICAgLCBtX3BpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8g
cHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRQaXhlbEJ1ZmZlcigpLgogICAgICwgbV9pbnB1
dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZvcm1hdChkZXN0Rm9ybWF0KQogewog
fQogCi1QdXRJbWFnZURhdGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KQorUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9k
ZXN0UG9pbnQoZGVzdFBvaW50KQotICAgICwgbV9pbWFnZURhdGEoV1RGTW92ZShpbWFnZURhdGEp
KQorICAgICwgbV9waXhlbEJ1ZmZlcihXVEZNb3ZlKHBpeGVsQnVmZmVyKSkKICAgICAsIG1faW5w
dXRGb3JtYXQoaW5wdXRGb3JtYXQpCiAgICAgLCBtX2Rlc3RGb3JtYXQoZGVzdEZvcm1hdCkKIHsK
IH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFB1dEltYWdlRGF0YSYgaXRlbSkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1ZmZlcihjb25z
dCBQdXRQaXhlbEJ1ZmZlciYgb3RoZXIpCisgICAgOiBtX3NyY1JlY3Qob3RoZXIubV9zcmNSZWN0
KQorICAgICwgbV9kZXN0UG9pbnQob3RoZXIubV9kZXN0UG9pbnQpCisgICAgLCBtX3BpeGVsQnVm
ZmVyKG90aGVyLm1fcGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpCisgICAgLCBtX2lucHV0Rm9ybWF0
KG90aGVyLm1faW5wdXRGb3JtYXQpCisgICAgLCBtX2Rlc3RGb3JtYXQob3RoZXIubV9kZXN0Rm9y
bWF0KQoreworfQorCitQdXRQaXhlbEJ1ZmZlciYgUHV0UGl4ZWxCdWZmZXI6Om9wZXJhdG9yPShj
b25zdCBQdXRQaXhlbEJ1ZmZlciYgb3RoZXIpCit7CisgICAgUHV0UGl4ZWxCdWZmZXIgY29weSB7
IG90aGVyIH07CisgICAgc3dhcChjb3B5KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQg
UHV0UGl4ZWxCdWZmZXI6OnN3YXAoUHV0UGl4ZWxCdWZmZXImIG90aGVyKQoreworICAgIHN0ZDo6
c3dhcChtX3NyY1JlY3QsIG90aGVyLm1fc3JjUmVjdCk7CisgICAgc3RkOjpzd2FwKG1fZGVzdFBv
aW50LCBvdGhlci5tX2Rlc3RQb2ludCk7CisgICAgc3RkOjpzd2FwKG1fcGl4ZWxCdWZmZXIsIG90
aGVyLm1fcGl4ZWxCdWZmZXIpOworICAgIHN0ZDo6c3dhcChtX2lucHV0Rm9ybWF0LCBvdGhlci5t
X2lucHV0Rm9ybWF0KTsKKyAgICBzdGQ6OnN3YXAobV9kZXN0Rm9ybWF0LCBvdGhlci5tX2Rlc3RG
b3JtYXQpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUHV0UGl4ZWxCdWZmZXImIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJp
bnB1dEZvcm1hdCIsIGl0ZW0uaW5wdXRGb3JtYXQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJp
bWFnZURhdGFTaXplIiwgaXRlbS5pbWFnZURhdGEoKS5zaXplKCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicGl4ZWxCdWZmZXJTaXplIiwgaXRlbS5waXhlbEJ1ZmZlcigpLnNpemUoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZGVzdFBvaW50IiwgaXRlbS5kZXN0UG9pbnQoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJkZXN0Rm9ybWF0IiwgaXRlbS5kZXN0Rm9ybWF0KCkpOwpAQCAtMTA2NCw4ICsxMDg4LDgg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgIGNhc2UgSXRl
bVR5cGU6OkZsdXNoQ29udGV4dDogdHMgPDwgImZsdXNoLWNvbnRleHQiOyBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6IHRz
IDw8ICJtZXRhLWNvbW1hbmQtY2hhbmdlLWRlc3RpbmF0aW9uLWltYWdlLWJ1ZmZlciI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjogdHMgPDwg
Im1ldGEtY29tbWFuZC1jaGFuZ2UtaXRlbS1idWZmZXIiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpHZXRJbWFnZURhdGE6IHRzIDw8ICJnZXQtaW1hZ2UtZGF0YSI7IGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogdHMgPDwgInB1dC1pbWFnZS1kYXRhIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6IHRzIDw8ICJnZXQtcGl4ZWwtYnVm
ZmVyIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6IHRzIDw8ICJw
dXQtcGl4ZWwtYnVmZmVyIjsgYnJlYWs7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRl
bVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTogdHMgPDwgInBhaW50LWZyYW1lLWZvci1tZWRpYSI7
IGJyZWFrOwogI2VuZGlmCkBAIC0xMjMxLDExICsxMjU1LDExIEBAIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIEkKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENo
YW5nZUl0ZW1CdWZmZXI6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdl
SXRlbUJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1h
Z2VEYXRhOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxHZXRJbWFnZURhdGE+KCk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldFBp
eGVsQnVmZmVyPigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFn
ZURhdGE6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0UGl4
ZWxCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShWSURFTykKICAgICBjYXNl
IEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1R5
cGVDYXN0cy5oPgpAQCAtNDksNyArNDksNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIE1lZGlhUGxheWVyOwogc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCkBAIC0xOTAwLDEzICsxODk5LDEzIEBAIHByaXZh
dGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLWNsYXNzIEdldEltYWdlRGF0YSB7Citj
bGFzcyBHZXRQaXhlbEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgR2V0SW1hZ2VEYXRhKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzcmNSZWN0KQorICAgIEdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNS
ZWN0KQogICAgICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICAgICAsIG1fb3V0cHV0Rm9y
bWF0KG91dHB1dEZvcm1hdCkKICAgICB7CkBAIC0xOTIwLDE3ICsxOTE5LDI0IEBAIHByaXZhdGU6
CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX291dHB1dEZvcm1hdDsKIH07CiAKLWNsYXNz
IFB1dEltYWdlRGF0YSB7CitjbGFzcyBQdXRQaXhlbEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRQ
aXhlbEJ1ZmZlcjsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFs
c2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCk7CisKKyAgICBQdXRQaXhlbEJ1ZmZlcihjb25zdCBQdXRQaXhlbEJ1ZmZlciYp
OworICAgIFB1dFBpeGVsQnVmZmVyKFB1dFBpeGVsQnVmZmVyJiYpID0gZGVmYXVsdDsKKyAgICBQ
dXRQaXhlbEJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFB1dFBpeGVsQnVmZmVyJik7CisgICAgUHV0
UGl4ZWxCdWZmZXImIG9wZXJhdG9yPShQdXRQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIHN3YXAoUHV0UGl4ZWxCdWZmZXImKTsKIAogICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0OyB9Ci0gICAgSW1h
Z2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFnZURhdGE7IH0KKyAgICBj
b25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVm
ZmVyOyB9CiAgICAgSW50UmVjdCBzcmNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9
CiAgICAgSW50UG9pbnQgZGVzdFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UG9pbnQ7IH0K
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQoKSBjb25zdCB7IHJldHVybiBt
X2Rlc3RGb3JtYXQ7IH0KQEAgLTE5MzksMzEgKzE5NDUsMzEgQEAgcHVibGljOgogICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4ge3sgbV9kZXN0UG9p
bnQsIG1fc3JjUmVjdC5zaXplKCkgfX07IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdXRQaXhlbEJ1ZmZlcj4gZGVj
b2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fc3JjUmVjdDsKICAgICBJ
bnRQb2ludCBtX2Rlc3RQb2ludDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsK
KyAgICBQaXhlbEJ1ZmZlciBtX3BpeGVsQnVmZmVyOwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gbV9pbnB1dEZvcm1hdDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZvcm1h
dDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFB1dEltYWdlRGF0YTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit2b2lkIFB1dFBpeGVsQnVmZmVyOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1faW5wdXRGb3JtYXQ7
Ci0gICAgZW5jb2RlciA8PCBtYWtlUmVmKCptX2ltYWdlRGF0YSk7CisgICAgZW5jb2RlciA8PCBt
X3BpeGVsQnVmZmVyOwogICAgIGVuY29kZXIgPDwgbV9zcmNSZWN0OwogICAgIGVuY29kZXIgPDwg
bV9kZXN0UG9pbnQ7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RGb3JtYXQ7CiB9CiAKIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxQdXRJbWFnZURhdGE+IFB1dEltYWdlRGF0YTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxQdXRQaXhlbEJ1ZmZlcj4gUHV0UGl4ZWxC
dWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEFscGhhUHJl
bXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0OwotICAgIE9wdGlvbmFsPFJlZjxJbWFnZURhdGE+
PiBpbWFnZURhdGE7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHBpeGVsQnVmZmVyOwogICAg
IE9wdGlvbmFsPEludFJlY3Q+IHNyY1JlY3Q7CiAgICAgT3B0aW9uYWw8SW50UG9pbnQ+IGRlc3RQ
b2ludDsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxpY2F0aW9uPiBkZXN0Rm9ybWF0OwpA
QCAtMTk3Miw4ICsxOTc4LDggQEAgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6
OmRlYwogICAgIGlmICghaW5wdXRGb3JtYXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBkZWNvZGVyID4+IGltYWdlRGF0YTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBk
ZWNvZGVyID4+IHBpeGVsQnVmZmVyOworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBkZWNvZGVyID4+IHNyY1JlY3Q7CkBAIC0xOTg4LDcg
KzE5OTQsNyBAQCBPcHRpb25hbDxQdXRJbWFnZURhdGE+IFB1dEltYWdlRGF0YTo6ZGVjCiAgICAg
aWYgKCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIHt7ICppbnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0
UG9pbnQsICpkZXN0Rm9ybWF0IH19OworICAgIHJldHVybiB7eyAqaW5wdXRGb3JtYXQsIFdURk1v
dmUoKnBpeGVsQnVmZmVyKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19Owog
fQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMjMxNywxMCArMjMyMywxMCBAQCB1c2luZyBEaXNw
bGF5TGlzdEl0ZW0gPSBWYXJpYW50CiAgICAgLCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZQogICAg
ICwgRmlsbFJvdW5kZWRSZWN0CiAgICAgLCBGbHVzaENvbnRleHQKLSAgICAsIEdldEltYWdlRGF0
YQorICAgICwgR2V0UGl4ZWxCdWZmZXIKICAgICAsIE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRp
b25JbWFnZUJ1ZmZlcgogICAgICwgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyCi0gICAgLCBQ
dXRJbWFnZURhdGEKKyAgICAsIFB1dFBpeGVsQnVmZmVyCiAgICAgLCBSZXN0b3JlCiAgICAgLCBS
b3RhdGUKICAgICAsIFNhdmUKQEAgLTI0MTksOCArMjQyNSw4IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6RGkKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkZsdXNoQ29udGV4dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1l
dGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldEltYWdlRGF0YSwKLSAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSwKKyAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyLAorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXIsCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhLAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCShyZXZpc2lvbiAy
NzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSwxNCBA
QCBSZWNvcmRlcjo6flJlY29yZGVyKCkKICAgICBMT0coRGlzcGxheUxpc3RzLCAiUmVjb3JkZWQg
ZGlzcGxheSBsaXN0OlxuJXMiLCBtX2Rpc3BsYXlMaXN0LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQordm9pZCBSZWNvcmRlcjo6
Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QpCiB7Ci0gICAgYXBwZW5kPEdldEltYWdlRGF0YT4ob3V0cHV0
Rm9ybWF0LCBzb3VyY2VSZWN0KTsKKyAgICBhcHBlbmQ8R2V0UGl4ZWxCdWZmZXI+KG91dHB1dEZv
cm1hdCwgc291cmNlUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJ
bWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBSZWNvcmRlcjo6cHV0UGl4ZWxCdWZmZXIoV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4
ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRG
b3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICBh
cHBlbmQ8UHV0UGl4ZWxCdWZmZXI+KGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwg
ZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5s
aW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2Vz
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAkocmV2aXNpb24gMjc3MjU1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDE0IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVp
bnQ4X3Q7CisKIGNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHbHlw
aEJ1ZmZlcjsKIGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGb250
OworY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKK2Ns
YXNzIFBpeGVsQnVmZmVyOwogCiBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBzdHJ1Y3Qg
SW1hZ2VQYWludGluZ09wdGlvbnM7CkBAIC01Nyw4ICs1OCw4IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflJlY29yZGVyKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNz
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90OwogY2xhc3MgRmxvYXRSZWN0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW1hZ2VEYXRhOwogCiBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTI4NiwxMiArMjg2LDEyIEBAIHZv
aWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICAgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdl
UmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBp
bWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1h
Z2VEYXRhLT5kYXRhKCk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdl
RGF0YS0+c2l6ZSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgp
OworICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwog
CiAgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsK
ICAgICAKQEAgLTMxMyw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBpbWFnZVJlY3QpOworICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0
KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0xMDgsMTEgKzEwOCwx
MSBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogaW1hZ2VSZXN1bHQg
PSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VSZXN1bHQp
CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7CiAKICAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKICAgICBMb29rdXBUYWJsZSBncmVl
blRhYmxlOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5UwogICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7CiAgICAgY29tcHV0ZUxv
b2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsK
IAotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJl
c3VsdChwaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAg
ICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1
aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhl
bE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQg
Kz0gNCkgeworICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5VW5tdWx0
aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3Ro
ID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZz
ZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxP
ZmZzZXQgKz0gNCkgewogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFb
cGl4ZWxPZmZzZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJs
ZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0g
PSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDIxICsyMjksMjEgQEAgdm9pZCBGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKAogICAgIEZpbHRlckVmZmVjdCogaW4yID0g
aW5wdXRFZmZlY3QoMSk7CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmRhdGEoKTsKKyAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgICAgIEludFJlY3QgZWZmZWN0QURy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAg
ICAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CisgICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAg
ICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKKyAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVs
QXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIAotICAg
ICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxB
cnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQ
aXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3
dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzcx
LDMzICszNzEsMjggQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdAog
ewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlRGF0
YSogcmVzdWx0SW1hZ2U7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmVzdWx0
SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGVsc2UKLSAgICAg
ICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAg
IGlmICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1f
cHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gc3JjUGl4ZWxBcnJheTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IHNvdXJjZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAg
c3JjUGl4ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+
dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNl
KCkpOwogICAgIGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlm
ICghc3JjUGl4ZWxBcnJheSkKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwor
ICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50U2l6
ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKICAgICBwYWludFNpemUu
c2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRp
bmdEYXRhID0gewotICAgICAgICAqc3JjUGl4ZWxBcnJheSwKLSAgICAgICAgZHN0UGl4ZWxBcnJh
eSwKKyAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwKICAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWln
aHQoKSwKICAgICAgICAgbV9iaWFzICogMjU1LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtOTksMTYgKzk5LDE2IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2YKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAg
ICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAg
YXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSBy
ZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIGF1dG8g
aW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7
CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRSZWN0IGVmZmVj
dEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBp
eGVsIHZhbHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0
aXBsaWVkIGNvbG9yIHZhbHVlcy4KICAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51
bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICAKQEAgLTEzNiwxOCAr
MTM2LDE4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAgICAg
ICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsKIAogICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBk
c3RJbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OworICAgICAgICAgICAgaW50IGRlc3Rp
bmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAq
IGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgp
ICsgc2NhbGVkT2Zmc2V0WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2Fz
dDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZHN0SW5kZXgg
KyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGlu
dCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1l
bnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsg
c2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxp
bnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25J
bmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwogCi0gICAgICAg
ICAgICB1bnNpZ25lZCogZHN0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4o
ZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBkc3RJbmRleCk7CisgICAgICAgICAgICB1bnNpZ25lZCog
ZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5h
dGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7CiAgICAgICAgICAgICBp
ZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBz
cmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkc3RQaXhlbFB0
ciA9IDA7CisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAwOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAqZHN0UGl4
ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSAr
IGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CisgICAgICAgICAgICAq
ZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJ
bWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsK
ICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHJldmlzaW9uIDI3
NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIkZF
R2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC05OSwxNiArOTksMTUgQEAgdm9p
ZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogCiAgICAgU2hhZG93Qmx1ciBj
b250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKLSAgICAv
LyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNv
cHlpbmcgdGhlIEltYWdlRGF0YS4KICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwg
cmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0
SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBzaGFkb3dBcmVhKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8mIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
LSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXkuZGF0YSgpLCBp
bWFnZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOworICAgIGF1
dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRT
aGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVy
LT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwogICAgIAotICAgIHJl
c3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgKmltYWdlRGF0YSwgc2hhZG93QXJlYSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZl
ciwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBt
X3NoYWRvd0NvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiAyNzcy
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkZF
R2F1c3NpYW5CbHVyTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEUpCkBAIC01MjMsMTYgKzUyMywxNiBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
Ci0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIHNldElzQWxwaGFJbWFn
ZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3RE
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
ICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0NSw3
ICs1NDUsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhCiAgICAg
aWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQXBwbHko
ZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25Q
aXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUu
aGVpZ2h0KCksIHBhaW50U2l6ZSk7CiB9CiAKIEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91
dHNldHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2xvckNvbnZlcnNp
b24uaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NzUsMjMgKzQ3NSwyMyBAQCB2b2lkIEZFTGln
aHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8mIHJlc3VsdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KHJlc3VsdFBpeGVsQXJy
YXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVy
IHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCiAgICAgLy8gc3RhbmRh
cmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZp
cmVmb3gpIGhhcyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRM
ZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAvLyBBbnl3
YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgog
CiAgICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpOwotICAgIGRyYXdMaWdodGluZyhyZXN1bHRQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6
ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgZHJhd0xpZ2h0aW5n
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1
dGVQYWludFNpemUuaGVpZ2h0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yNDMsMjMgKzI0Mywy
MyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiB7CiAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
KQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdl
LT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBl
ZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRT
aXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwogICAgIGlmIChwbGF0Zm9ybUFw
cGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBy
YWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkg
PSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgYXV0byBzb3VyY2VQaXhl
bEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICBy
ZXR1cm47CiAKICAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwpAQCAtMjcwLDcgKzI3MCw3
IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOworICAgIHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKICAgICBwYWludGluZ0Rh
dGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdE
YXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2lu
Z1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzk2LDE3ICszOTYsMTcgQEAgdm9pZCBG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbAogCiB2b2lkIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
IAogICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAg
ICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChy
ZXN1bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBwaXhlbEFycmF5Lnplcm9GaWxsKCk7Cisg
ICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpv
YnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwogICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0
ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJy
YXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhl
bEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdE
YXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAg
ICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDU3LDcgKzQ1Nyw3IEBA
IHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICB9CiAKICAgICAv
LyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZv
ciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZpbGxS
ZWdpb24ocGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOwor
ICAgIGZpbGxSZWdpb24oZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIDAsIGhlaWdodCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJHZW9t
ZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNzcsNyArNzcsNyBAQCBG
bG9hdFBvaW50IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlCiAgICAgcmV0dXJuIGFic29s
dXRlUG9pbnQ7CiB9CiAKLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklu
cHV0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0CitJbnRSZWN0IEZp
bHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJl
Y3QmIGVmZmVjdFJlY3QpIGNvbnN0CiB7CiAgICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29s
dXRlUGFpbnRSZWN0LmxvY2F0aW9uKCk7CiAgICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0
LmxvY2F0aW9uKCkpOwpAQCAtMjQ3LDggKzI0Nyw4IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3Jj
ZVZhbGlkUHJlTXVsdGlwbGkKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiB7CiAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxs
cHRyOworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgRmls
dGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQpAQCAtMjY1LDcgKzI2NSw3IEBAIHZv
aWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUKIAogSW1hZ2VCdWZmZXIqIEZp
bHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIg
PDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAi
IDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VCdWZmZXJSZXN1bHQgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBG
aWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmUKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0
KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAg
ICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQ
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC0yOTAsMTEgKzI5MCwxNCBAQCBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6CiAgICAgSW50U2l6ZSBzY2FsZWRTaXpl
KHJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
ZyhzY2FsZWRTaXplKSk7CiAgICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKChzY2FsZWRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBp
ZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJl
Y29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCpp
bWFnZURhdGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAg
YXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoY2hlY2tlZEFyZWEudW5zYWZlR2V0KCkpOworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJh
eSwgcmVjdCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQXJyYXk7CiB9CiAKIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNv
bnN0IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JT
cGFjZSkKQEAgLTMwMiwxMSArMzA1LDE0IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVyRWZmZWN0OjoKICAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwogICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKICAgICBz
Y2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gaW1hZ2VE
YXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNp
emUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1
dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0Owor
ICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGNoZWNrZWRBcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJy
YXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KCppbWFnZURhdGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7Cisg
ICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2Up
OworICAgIHJldHVybiBwaXhlbEFycmF5OwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdApAQCAtNDMzLDc4ICs0
MzksODAgQEAgc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjbwogI2VuZGlm
CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0YVRv
Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VE
YXRhJiBpbnB1dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQorT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQogewot
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIGlucHV0RGF0YS5zaXplKCkp
OworICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xv
ciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHku
CisKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5z
aXplKCkpOwogICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7CiAgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRT
aXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZl
ciB0byBzdG9yZSBpbmNvbWluZyBJbWFnZURhdGEKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZm
ZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKICAgICBhdXRvIGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6
QkdSQTgpOwogICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBi
dWZmZXItPnB1dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIGlucHV0RGF0YSwgZGVzdGluYXRpb25S
ZWN0KTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBidWZmZXItPnB1dFBpeGVs
QnVmZmVyKG91dHB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAg
cmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAq
YnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIG91dHB1dEZvcm1hdCk7CiB9CiAKLVJlZlB0cjxJbWFn
ZURhdGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZm
ZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0KQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJ
bWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQogewogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CiAgICAgLy8gQ3JlYXRlIGFu
IEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KICAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKICAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gQ29sb3Igc3BhY2Ug
Y29udmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdl
IGJ1ZmZlciB0byBhbm90aGVyCiAgICAgY29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVy
LT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVk
QnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHJlY3QpOwogfQogCiB2b2lkIEZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVz
dFJlY3QpCiB7CiAgICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZm
ZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRJbWFn
ZURhdGEgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1h
Z2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZEltYWdlRGF0YSkKKyAgICBhdXRv
IGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNv
bG9yU3BhY2UsICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhl
bEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZElt
YWdlRGF0YS0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIGNvcHlJbWFnZUJ5
dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7
CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5h
dGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3Rv
cmVkIGluIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsCiAgICAgLy8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9u
Ci0gICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNw
YWNlKGNvbG9yU3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZl
cnRlZEltYWdlRGF0YSkKKyAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBp
eGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyLCBvdXRwdXRGb3Jt
YXQpOworICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAg
ICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24s
IGRlc3RSZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFj
ZSkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIAotICAgIExPR19XSVRIX1NUUkVB
TShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2Ug
YnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LmdldCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbCht
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZp
bHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8
PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZm
ZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7CiAKICAgICBp
ZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEg
Y29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVm
ZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNl
Q29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewogICAgICAgICAgICAgICAg
IGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xv
clNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAg
ICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNp
emUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNy
ZWF0ZShpbnB1dFNpemUpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhl
bEZvcm1hdDo6QkdSQTgsIGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
LCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24o
Y29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRp
b24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKKyAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Cisg
ICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24s
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRl
c3RpbmF0aW9uLCByZWN0KTsKQEAgLTUxNCwzMSArNTIyLDMxIEBAIHZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3UKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwg
ZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQo
KS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8
PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBWYWx1ZU9yTnVsbChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7CisgICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmls
dGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4g
RXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAg
IiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpOwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAg
ICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJl
c0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAg
ICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2Up
KSB7CiAgICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlv
bihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIHJlY3QpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAgICAgICAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9p
bnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOworICAgICAgICAgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBpbnB1dFNpemUpOwogICAgICAgICAg
ICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlu
cHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFD
b2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVk
SW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgcmVjdCk7CisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihjb2xvclNwYWNlKSkgeworICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CkBAIC01NTgsNzEgKzU2Niw3MyBA
QCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1CiAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLUltYWdlRGF0YSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZp
bHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhG
aWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlz
IGFsbG93ZWQuCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgQVNTRVJUKG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPT0gV1RGOjpudWxsb3B0KTsKKwogICAgIGlmIChtX2Fic29sdXRl
UGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50U2l6ZSByZXN1bHRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1h
Z2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVm
ZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIHJlc3VsdFNpemUpOworICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
OwogfQogCi1JbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0
ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhp
cyk7CiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VS
VCghaGFzUmVzdWx0KCkpOworICAgIEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
PSBXVEY6Om51bGxvcHQpOworCiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0OwogCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhy
ZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJl
c3VsdFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsK
KyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUo
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTgsIHJlc3VsdFNp
emUpOworICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKIH0KIAotYm9vbCBG
aWx0ZXJFZmZlY3Q6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkc3RDb2xvclNwYWNlKQorYm9vbCBGaWx0ZXJFZmZl
Y3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cp
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3Rl
cCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCiAgICAgLy8gV2Ugb25seSBuZWVk
IGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQg
aW4gdGhlIGlucHV0CiAgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJh
dyBwaXhlbHMKLSAgICByZXR1cm4gZHN0Q29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkg
IT0gKmRzdENvbG9yU3BhY2U7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiBy
ZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKICNlbHNlCiAgICAg
Ly8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9u
LUNHCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOworICAgIFVOVVNFRF9QQVJBTShk
ZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQogCi12
b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBkZXN0aW5hdGlvbkNvbG9yU3BhY2Up
CiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVu
dHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZHN0Q29sb3JTcGFjZSk7CisgICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAjZWxzZQotICAgIGlmICghaGFzUmVz
dWx0KCkgfHwgZHN0Q29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpCisgICAgaWYgKCFo
YXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNl
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90
ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKICAg
ICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlw
bGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtQ29sb3JTcGFj
ZShtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9yU3BhY2UpOworICAgIGltYWdlQnVmZmVyUmVz
dWx0KCktPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1bHRDb2xvclNwYWNlLCBkZXN0aW5hdGlv
bkNvbG9yU3BhY2UpOwogCi0gICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZHN0Q29sb3JTcGFjZTsK
KyAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7CiAKLSAgICBp
ZiAobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQot
ICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7CisgICAgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFdURjo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IFdURjo6bnVsbG9wdDsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdt
YWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDggKzI3LDEwIEBA
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00MSw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNz
IEZpbHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOworY2xh
c3MgUGl4ZWxCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBG
aWx0ZXJFZmZlY3RWZWN0b3I7CiAKQEAgLTEwMCw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYp
IGNvbnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JikgY29uc3Q7CisgICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIAogICAgIC8vIFJlY3Vyc2VzIG9u
IGlucHV0cy4KICAgICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCk7CkBAIC0xODUsOCArMTg4LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlRGF0YSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkg
b3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKICAgICAvLyBhbHBo
YSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgpAQCAt
MjAyLDE4ICsyMDUsMTggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgdm9pZCBjb3B5Q29udmVydGVkSW1hZ2VC
dWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgRGVzdGluYXRpb25Db2xvclNw
YWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBj
b3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIElt
YWdlRGF0YSYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSwgSW1hZ2VEYXRhJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgUmVmUHRyPEltYWdl
RGF0YT4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7
CisgICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
KTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRS
ZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgCiAKICAgICBGaWx0ZXImIG1fZmls
dGVyOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0OworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAog
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgogCiAj
aWYgVVNFKEFWRk9VTkRBVElPTikKQEAgLTIwOSwxMCArMjA5LDEwIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGUKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChnZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8gaW1hZ2VEYXRhID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKLSAgICBpZiAoIWltYWdl
RGF0YSkKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRUb0NhbnZhcyhj
b250ZXh0QXR0cmlidXRlcygpLCBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZm
ZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKKyAgICBwYWludFRvQ2Fu
dmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZm
ZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlcikKQEAgLTIyMSw0MCArMjIxLDQwIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG8KICAgICAgICAgcmV0dXJuOwogICAgIGlmIChnZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8gaW1hZ2VEYXRhID0gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7Ci0gICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwor
ICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBwYWludFRvQ2FudmFz
KGNvbnRleHRBdHRyaWJ1dGVzKCksIGltYWdlRGF0YS5yZWxlYXNlTm9uTnVsbCgpLCBpbWFnZUJ1
ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOworICAgIHBhaW50VG9D
YW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBpbWFnZUJ1
ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOwogfQogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkKIHsKICAgICAvLyBSZWFk
aW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3
aGljaCBpcyBsb3NzeS4KICAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVk
QWxwaGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCk7CiB9CiAK
LVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5n
UmVzdWx0c0ZvclBhaW50aW5nKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpCiB7CiAgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKIH0KIAotUmVm
UHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVz
dWx0c0ZvclBhaW50aW5nKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcoKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgcmV0dXJuIHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwogfQogCiAjaWYg
IVBMQVRGT1JNKENPQ09BKQotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgcmV0dXJu
IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDggKzg3LDggQEAgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOwogI2VuZGlmCiBjbGFz
cyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbWFnZURhdGE7CiBjbGFz
cyBNZWRpYVBsYXllcjsKK2NsYXNzIFBpeGVsQnVmZmVyOwogI2lmIFVTRShURVhUVVJFX01BUFBF
UikKIGNsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKICNlbmRpZgpAQCAtNDYz
LDExICs0NjMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5v
dGlmaWNhdGlvbigpOwogCiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJ
bWFnZUJ1ZmZlciYpIGZpbmFsOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkgZmluYWw7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKICAgICB2b2lkIHBhaW50
Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpIGZpbmFsOwogCi0gICAgUmVm
UHRyPEltYWdlRGF0YT4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCk7CisgICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsK
KyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRp
bmcoKTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICBib29sIGNvcHlUZXh0dXJlRnJvbU1lZGlh
KE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgZmluYWw7
CkBAIC01MjYsNyArNTI2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9y
bWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dM
ZW51bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSk7CiAjZW5kaWYgLy8gIVVTRShBTkdMRSkKIAot
ICAgIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzJiwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3Jh
cGhpY3NDb250ZXh0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBQaXhlbEJ1ZmZlciYmLCBjb25zdCBJbnRTaXplJiBj
YW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKICNpZiBQTEFURk9STShD
T0NPQSkKQEAgLTU1Myw5ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hlY2tHUFVTdGF0
dXMoKTsKIAogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsK
LSAgICBSZWZQdHI8SW1hZ2VEYXRhPiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKLSAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CisgICAgT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVy
PiByZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCk7CiAKICAgICBib29sIHJlc2hhcGVGQk9zKGNv
bnN0IEludFNpemUmKTsKICAgICB2b2lkIHByZXBhcmVUZXh0dXJlSW1wbCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAK
ICNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShPUEVOR0wpCiAKICNpbmNsdWRlICJFeHRlbnNpb25z
R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxj
c3RyaW5nPgpAQCAtNjEsMTIgKzYxLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotCi1S
ZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBh
aW50UmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogewotICAgIGF1dG8gaW1hZ2VEYXRhID0g
SW1hZ2VEYXRhOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7Ci0gICAgaWYg
KCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKTsKKyAgICBp
ZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgR0xp
bnQgcGFja0FsaWdubWVudCA9IDQ7CiAgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQg
PSBmYWxzZTsKQEAgLTc2LDEyICs3NSwxMiBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAg
ICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFn
ZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRh
dGEoKS5kYXRhKCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIHBpeGVsQnVmZmVyLT5zaXpl
KCkud2lkdGgoKSwgcGl4ZWxCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogCiAgICAgaWYgKG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJ
R05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgcmV0
dXJuIHBpeGVsQnVmZmVyOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb21tb24uY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTAgQEAKICNpbmNsdWRlICJBTkdMRVdlYktpdEJy
aWRnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKICNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCiAjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Jl
Z3VsYXJFeHByZXNzaW9uLmg+CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleAogICAgIDo6Z2xGbHVzaCgpOwogfQogCi1SZWZQdHI8SW1h
Z2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQor
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVy
aW5nUmVzdWx0cygpCiB7CiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIGlm
IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTAgQEAKICNpZiBFTkFCTEUoV0VCR0wp
ICYmIFVTRShPUEVOR0xfRVMpCiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCiAjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgogCkBAIC00Niw3ICs0Niw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWwKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAKLQogICAgIGF1dG8gYXR0cmli
dXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0
d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLApAQCAt
NjUsMTEgKzY0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRuUGl4ZWwK
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCiB7Ci0gICAgYXV0
byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
YXV0byBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIGdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKICAgICBib29sIG11c3RSZXN0b3Jl
UGFja0FsaWdubWVudCA9IGZhbHNlOwpAQCAtNzksMTIgKzc4LDEyIEBAIFJlZlB0cjxJbWFnZURh
dGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50ID0gdHJ1ZTsKICAgICB9CiAKLSAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFnZURhdGEt
PndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgcGl4
ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLmhlaWdodCgpLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7CiAK
ICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9y
ZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwogCi0gICAgcmV0dXJuIGltYWdl
RGF0YTsKKyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBAQAogI2luY2x1ZGUgIkNPTVB0
ci5oIgogI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVy
RGlyZWN0MkQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgogI2luY2x1ZGUgPGQy
ZDFfMS5oPgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTMxMiwxNiArMzEyLDE2IEBAIFZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2UKICAgICByZXR1cm4geyB9OwogfQogCi1S
ZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQs
IHNyY1JlY3QsIG51bGxwdHIpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxC
dWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShp
bnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51
bGxwdHIpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3Jt
YXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG51bGxwdHIp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDggKzUzLDggQEAgcHVibGljOgogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBv
dmVycmlkZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
IAogcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDcgKzQyNyw3IEBAIEludFJl
Y3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkgY29uc3QKICAgICBhdXRvJiBsYXN0RWZmZWN0ID0g
bV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKICAgICAKICAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1
bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQo
KSkpCi0gICAgICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFn
ZURhdGEoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOworICAgICAgICByZXR1cm4gbGFzdEVm
ZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IG1fZmlsdGVy
UmVnaW9uIH0pOwogICAgIAogICAgIHJldHVybiB7IH07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDggKzM1LDggQEAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlICJQb2x5Z29uU2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgogI2lu
Y2x1ZGUgIlJlY3RhbmdsZVNoYXBlLmgiCkBAIC0xOTcsMTQgKzE5NywxNCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAgaWYgKGltYWdlKQogICAgICAgICBn
cmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFn
ZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICBhdXRvIGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBv
aW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGltYWdl
QnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIHsgSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSB9KTsKICAgICAKLSAgICAvLyBX
ZSBjb3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBpbWFnZURhdGEgY291bGQgYmUgbnVsbHB0ci4g
QSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgaW1hZ2VEYXRhOjpjcmVhdGUK
LSAgICAvLyBjYW4gcmV0dXJuIGEgbnVsbHB0ciBiZWNhdXNlIGRhdGEgc2l6ZSBoYXMgb3ZlcmZs
b3dlZC4gUmVmZXIgcmRhcjovL3Byb2JsZW0vNjE3OTM4ODQKLSAgICBpZiAoIWltYWdlRGF0YSkK
KyAgICAvLyBXZSBjb3VsZCBnZXQgdG8gYSB2YWx1ZSB3aGVyZSBQaXhlbEJ1ZmZlciBjb3VsZCBi
ZSBudWxsb3B0LiBBIGNhc2Ugd2hlcmUgSW1hZ2VSZWN0LnNpemUoKSBpcyBodWdlLCBQaXhlbEJ1
ZmZlcjo6dHJ5Q3JlYXRlCisgICAgLy8gY2FuIHJldHVybiBhIG51bGxvcHQgYmVjYXVzZSBkYXRh
IHNpemUgaGFzIG92ZXJmbG93ZWQuIFJlZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0CisgICAg
aWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZVNoYXBlKCk7CiAKLSAgICBh
dXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgYXV0byYgcGl4ZWxBcnJh
eSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9
IHBpeGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7
IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAgICB1aW50OF90IGFscGhhUGl4
ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+
KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUuMGYpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcy
NjQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDg4IEBACisyMDIxLTA1LTA5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBVc2UgUGl4ZWxCdWZmZXIgcmF0aGVyIHRoYW4gSW1hZ2VEYXRhIGluIHBsYXRmb3JtLyBj
b2RlIHRvIGZpeCBsYXllcmluZyB2aW9sYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTU4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgdGhlIERPTSBsYXllciBv
YmplY3QgV2ViQ29yZTo6SW1hZ2VEYXRhIHdpdGggdGhlIG5ldyBwbGF0Zm9ybQorICAgICAgICBs
YXllciBXZWJDb3JlOjpQaXhlbEJ1ZmZlciwgd2hpY2ggZml4ZXMgYSBsYXllcmluZyB2aW9sYXRp
b24gV2ViQ29yZSBhbmQgYXZvaWRzCisgICAgICAgIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zIC8g
cmVmZXJlbmNlIGNvdW50aW5nLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29k
ZXJzLmg6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8T3B0aW9uYWw8VD4+OjplbmNvZGUp
OgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPE9wdGlvbmFsPFQ+Pjo6ZGVjb2RlKToKKyAg
ICAgICAgQWRkIHRlbXBsYXRpemVkIEVuY29kZXIvRGVjb2RlciB0byB3b3JrIHdpdGggc3RyZWFt
aW5nIGVuY29kZXIuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0
R0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFBpeGVsQnVmZmVy
VG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpwYWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlv
bnNHZW5lcmF0ZWQuaDoKKyAgICAgICAgKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZm
ZXIpOgorICAgICAgICAocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVk
LgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1v
cnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2VtYXBob3JlRm9yR2V0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVT
aGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRl
R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpkZWNvZGVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hh
cmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6c2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVt
b3J5QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9y
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBv
cHVsYXRlR2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAg
ICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2Vu
ZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkNH
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1
dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9D
R0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmg6CisgICAgICAgICogU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmPFdl
YkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVu
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNv
cmU6OkltYWdlRGF0YT4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRQ
aXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVm
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yR2V0SW1h
Z2VEYXRhVG9Db21wbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6IERlbGV0
ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZDo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDoKKwogMjAyMS0wNS0xMCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92
ZSBXS0J1bmRsZVBhZ2VHcm91cFJlZgpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTYgKzE5OCwx
NiBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpub3RpZnlNYXJrCiB2b2lkIFJlbW90
ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQo
bV9zdHJlYW1UaHJlYWQpOwotICAgIHBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcihtX2NvbnRl
eHQtPnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKSwgaW1hZ2VCdWZmZXIsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZl
cihtX2NvbnRleHQtPnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKSwgaW1hZ2VCdWZm
ZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7Ci0gICAgcGFpbnRJbWFnZURhdGFUb0ltYWdlQnVmZmVyKG1fY29udGV4dC0+cmVh
ZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcoKSwgaW1hZ2VCdWZmZXIsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKyAgICBwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihtX2Nv
bnRleHQtPnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OnBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VE
YXRhPiYmIGltYWdlRGF0YSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHRh
cmdldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIo
T3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYgcGl4ZWxCdWZmZXIsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciB0YXJnZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1U
aHJlYWQpOwogICAgIC8vIEZJWE1FOiBXZSBkbyBub3QgaGF2ZSBmdW5jdGlvbmluZyByZWFkL3dy
aXRlIGZlbmNlcyBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLiBUaHVzIHRoaXMgaXMgc3luY2hy
b25vdXMsCkBAIC0yMTksOCArMjE5LDggQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6
cGFpbnRJbWFnZQogICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVuZGVyaW5nQmFj
a2VuZC0+cmVtb3RlUmVzb3VyY2VDYWNoZSgpLmNhY2hlZEltYWdlQnVmZmVyKHRhcmdldCkpIHsK
ICAgICAgICAgICAgIC8vIEhlcmUgd2UgZG8gbm90IHRyeSB0byBwbGF5IGJhY2sgcGVuZGluZyBj
b21tYW5kcyBmb3IgaW1hZ2VCdWZmZXIuIEN1cnJlbnRseSB0aGlzIGNhbGwgaXMgb25seSBtYWRl
IGZvciBlbXB0eQogICAgICAgICAgICAgLy8gaW1hZ2UgYnVmZmVycyBhbmQgdGhlcmUncyBubyBn
b29kIHdheSB0byBhZGQgZGlzcGxheSBsaXN0cy4KLSAgICAgICAgICAgIGlmIChpbWFnZURhdGEp
Ci0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMo
Y29udGV4dEF0dHJpYnV0ZXMsIGltYWdlRGF0YS5yZWxlYXNlTm9uTnVsbCgpLCBpbWFnZUJ1ZmZl
ci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgICAgICAgICBp
ZiAocGl4ZWxCdWZmZXIpCisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMsIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwg
aW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuY2xl
YXJSZWN0KHsgSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkgfSk7CiAgICAg
ICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5ICJmbHVzaCIgaW1wbGVtZW50YXRpb24gaW4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCBvdmVybG9hZHMgb3JkZXJpbmcgYW5kIGVmZmVjdHMuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcm90ZWN0ZWQ6CiAKICNpbmNsdWRlICJSZW1vdGVHcmFw
aGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oIiAvLyBOT0xJTlQKIAotICAgIHZvaWQg
cGFpbnRJbWFnZURhdGFUb0ltYWdlQnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIHBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKE9wdGlv
bmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICBXZWFrUHRyPEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKICAg
ICBSZWZQdHI8SVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uPFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMPj4gbV9zdHJlYW1Db25uZWN0aW9uOwpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTC5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0wgTm90UgogICAgIHZvaWQgTXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUodWlu
dDMyX3QgbW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBmaXJzdHMsIElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4gY291bnRzLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+
IGluc3RhbmNlQ291bnRzLCBpbnQzMl90IGRyYXdjb3VudCkKICAgICB2b2lkIE11bHRpRHJhd0Vs
ZW1lbnRzQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBj
b3VudHMsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gb2Zmc2V0
cywgaW50MzJfdCBkcmF3Y291bnQpCiAgICAgdm9pZCBNdWx0aURyYXdFbGVtZW50c0luc3RhbmNl
ZEFOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gY291bnRz
LCB1aW50MzJfdCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IG9mZnNldHMsIElQ
Qzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gaW5zdGFuY2VDb3VudHMsIGludDMyX3QgZHJhd2Nv
dW50KQotICAgIHZvaWQgUGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKSAtPiAoUmVm
UHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCisgICAgdm9p
ZCBQYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgLT4gKE9wdGlvbmFsPFdlYkNv
cmU6OlBpeGVsQnVmZmVyPiByZXR1cm5WYWx1ZSkgU3luY2hyb25vdXMKIH0KIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0
ZWQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNzksMTEgKzEzNzksMTEgQEAKICAgICAgICAgYXNzZXJ0SXNDdXJyZW50KG1f
c3RyZWFtVGhyZWFkKTsKICAgICAgICAgbV9jb250ZXh0LT5tdWx0aURyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKG1vZGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xz
aXplaSo+KGNvdW50cy5kYXRhKCkpLCBjb3VudHMuc2l6ZSgpKSwgdHlwZSwgbWFrZUdDR0xTcGFu
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTGludCo+KG9mZnNldHMuZGF0YSgpKSwgb2Zmc2V0
cy5zaXplKCkpLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkq
PihpbnN0YW5jZUNvdW50cy5kYXRhKCkpLCBpbnN0YW5jZUNvdW50cy5zaXplKCkpLCBkcmF3Y291
bnQpOwogICAgIH0KLSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVm
ZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6
OkltYWdlRGF0YT4gcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6
OlBpeGVsQnVmZmVyPiByZXR1cm5WYWx1ZSA9IHsgfTsKICAgICAgICAgYXNzZXJ0SXNDdXJyZW50
KG1fc3RyZWFtVGhyZWFkKTsKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVyblZhbHVlID0gbV9j
b250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmV0dXJuVmFsdWUpKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlCiAgICAgdXNpbmcgQmFz
ZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPjsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dDsKICAg
ICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOwotICAgIHVzaW5nIEJh
c2VDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGE7CisgICAgdXNpbmcgQmFzZUNvbmNy
ZXRlSW1hZ2VCdWZmZXI6OnB1dFBpeGVsQnVmZmVyOwogCiBwdWJsaWM6CiAgICAgc3RhdGljIGF1
dG8gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViQ29y
ZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCkBAIC03NiwxNiArNzYsMTYgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxl
IGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKICAgICB7
Ci0gICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+
KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGdldEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpOwotICAgICAgICAgICAgYXV0byBpbWFn
ZURhdGEgPSBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGdldEltYWdlRGF0
YUl0ZW0ub3V0cHV0Rm9ybWF0KCksIGdldEltYWdlRGF0YUl0ZW0uc3JjUmVjdCgpKTsKLSAgICAg
ICAgICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5wb3B1bGF0ZUdldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeShpbWFnZURhdGEuZ2V0KCkpOworICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGdldFBp
eGVsQnVmZmVySXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1
ZmZlcj4oKTsKKyAgICAgICAgICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBCYXNlQ29uY3JldGVJbWFn
ZUJ1ZmZlcjo6Z2V0UGl4ZWxCdWZmZXIoZ2V0UGl4ZWxCdWZmZXJJdGVtLm91dHB1dEZvcm1hdCgp
LCBnZXRQaXhlbEJ1ZmZlckl0ZW0uc3JjUmVjdCgpKTsKKyAgICAgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5wb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KFdURk1vdmUo
cGl4ZWxCdWZmZXIpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSkg
ewotICAgICAgICAgICAgYXV0byYgcHV0SW1hZ2VEYXRhSXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCk7Ci0gICAgICAgICAgICBwdXRJbWFnZURhdGEo
cHV0SW1hZ2VEYXRhSXRlbS5pbnB1dEZvcm1hdCgpLCBwdXRJbWFnZURhdGFJdGVtLmltYWdlRGF0
YSgpLCBwdXRJbWFnZURhdGFJdGVtLnNyY1JlY3QoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0UG9p
bnQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0Rm9ybWF0KCkpOworICAgICAgICBpZiAoaXRlbS5p
czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIHB1dFBpeGVsQnVmZmVySXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRQaXhlbEJ1ZmZlcj4oKTsKKyAgICAgICAgICAgIHB1dFBpeGVsQnVmZmVyKHB1dFBpeGVs
QnVmZmVySXRlbS5pbnB1dEZvcm1hdCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0ucGl4ZWxCdWZmZXIo
KSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLmRlc3RQ
b2ludCgpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uZGVzdEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAJKHJl
dmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDY1ICszMTUsNjUg
QEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZXROZXh0SXRlbQogICAgIG1fcGVuZGlu
Z1dha2V1cEluZm8gPSB7e3sgaWRlbnRpZmllciwgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6Omhl
YWRlclNpemUoKSwgZGVzdGluYXRpb25JZGVudGlmaWVyLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29u
OjpVbnNwZWNpZmllZCB9LCBXVEY6Om51bGxvcHQgfX07CiB9CiAKLU9wdGlvbmFsPFNoYXJlZE1l
bW9yeTo6SVBDSGFuZGxlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1v
cnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCkKK09wdGlvbmFsPFNoYXJl
ZE1lbW9yeTo6SVBDSGFuZGxlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRN
ZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcihzaXplX3QgYnl0ZUNvdW50KQogewotICAgIE1F
U1NBR0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoIW1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
IHx8IGJ5dGVDb3VudCA+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCksIFdURjo6
bnVsbG9wdCwgIlRoZSBleGlzdGluZyBTaG1lbSBmb3IgZ2V0SW1hZ2VEYXRhKCkgaXMgYWxyZWFk
eSBiaWcgZW5vdWdoIHRvIGhhbmRsZSB0aGUgcmVxdWVzdCIpOworICAgIE1FU1NBR0VfQ0hFQ0tf
V0lUSF9SRVRVUk5fVkFMVUUoIW1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgfHwgYnl0ZUNv
dW50ID4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+c2l6ZSgpLCBXVEY6Om51bGxvcHQs
ICJUaGUgZXhpc3RpbmcgU2htZW0gZm9yIGdldFBpeGVsQnVmZmVyKCkgaXMgYWxyZWFkeSBiaWcg
ZW5vdWdoIHRvIGhhbmRsZSB0aGUgcmVxdWVzdCIpOwogCiAgICAgaWYgKGJ5dGVDb3VudCA+IDY0
ICogTUIpIHsKICAgICAgICAgLy8gSnVzdCBhIHNhbml0eSBjaGVjay4gQSA0SyBpbWFnZSBpcyAz
Nk1CLgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGRlc3Ryb3lH
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsKLSAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9y
eSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoYnl0ZUNvdW50KTsKKyAgICBkZXN0cm95R2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKTsKKyAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5
ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShieXRlQ291bnQpOwogICAgIFNoYXJlZE1lbW9yeTo6
SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpCi0gICAg
ICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICByZXR1cm4gU2hhcmVkTWVtb3J5
OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5
ID8gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSA6IDAgfTsKKyAgICBpZiAobV9n
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSkKKyAgICAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7CisgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZSho
YW5kbGUpLCBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID8gbV9nZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeS0+c2l6ZSgpIDogMCB9OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRl
U2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBp
ZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIo
Ynl0ZUNvdW50KSkKKyAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRQaXhlbEJ1ZmZlckhlbHBlcihieXRlQ291bnQpKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKGhhbmRsZS52YWx1ZSgpKSk7CiAgICAgZWxzZQogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcih7IH0pOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9y
ZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBo
b3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
SVBDOjpTZW1hcGhvcmUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihtX2dldEltYWdlRGF0YVNl
bWFwaG9yZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIobV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9y
ZSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5
QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6
U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVp
bnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoYXV0byBo
YW5kbGUgPSB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoYnl0ZUNvdW50
KSkKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGUudmFsdWUoKSksIG1f
Z2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKKyAgICBpZiAoYXV0byBoYW5kbGUgPSB1cGRhdGVTaGFy
ZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlckhlbHBlcihieXRlQ291bnQpKQorICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZS52YWx1ZSgpKSwgbV9nZXRQaXhlbEJ1ZmZlclNl
bWFwaG9yZSk7CiAgICAgZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0sIG1fZ2V0
SW1hZ2VEYXRhU2VtYXBob3JlKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9LCBtX2dl
dFBpeGVsQnVmZmVyU2VtYXBob3JlKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KCkKK3ZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCkKIHsKLSAgICBtX2dl
dEltYWdlRGF0YVNoYXJlZE1lbW9yeSA9IG51bGxwdHI7CisgICAgbV9nZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
cG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoV2ViQ29yZTo6SW1hZ2VEYXRhKiBpbWFn
ZURhdGEpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVsYXRlR2V0UGl4ZWxCdWZm
ZXJTaGFyZWRNZW1vcnkoT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYgcGl4ZWxCdWZm
ZXIpCiB7Ci0gICAgTUVTU0FHRV9DSEVDSyhtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSwgIldl
IGNhbid0IHJ1biBnZXRJbWFnZURhdGEgd2l0aG91dCBhIGJ1ZmZlciB0byB3cml0ZSBpbnRvIik7
CisgICAgTUVTU0FHRV9DSEVDSyhtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LCAiV2UgY2Fu
J3QgcnVuIGdldFBpeGVsQnVmZmVyIHdpdGhvdXQgYSBidWZmZXIgdG8gd3JpdGUgaW50byIpOwog
Ci0gICAgaWYgKGltYWdlRGF0YSkgewotICAgICAgICBNRVNTQUdFX0NIRUNLKGltYWdlRGF0YS0+
ZGF0YSgpLmJ5dGVMZW5ndGgoKSA8PSBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgp
LCAiU2htZW0gZm9yIHJldHVybiBvZiBnZXRJbWFnZURhdGEgaXMgdG9vIHNtYWxsIik7Ci0gICAg
ICAgIG1lbWNweShtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBpbWFnZURhdGEt
PmRhdGEoKS5kYXRhKCksIGltYWdlRGF0YS0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CisgICAgaWYg
KHBpeGVsQnVmZmVyKSB7CisgICAgICAgIE1FU1NBR0VfQ0hFQ0socGl4ZWxCdWZmZXItPmRhdGEo
KS5ieXRlTGVuZ3RoKCkgPD0gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+c2l6ZSgpLCAi
U2htZW0gZm9yIHJldHVybiBvZiBnZXRQaXhlbEJ1ZmZlciBpcyB0b28gc21hbGwiKTsKKyAgICAg
ICAgbWVtY3B5KG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPmRhdGEoKSwgcGl4ZWxCdWZm
ZXItPmRhdGEoKS5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0ZUxlbmd0aCgpKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbWVtc2V0KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRh
KCksIDAsIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCkpOworICAgICAgICBtZW1z
ZXQobV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAwLCBtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5LT5zaXplKCkpOwogCi0gICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUu
c2lnbmFsKCk7CisgICAgbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZS5zaWduYWwoKTsKIH0KIAog
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTUyMSw4ICs1
MjEsOCBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VCiAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKICAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3Jl
YXRlPERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOwotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0g
ICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgICAgICBy
ZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dFN0YXRlOgpAQCAtNTgxLDcgKzU4MSw3IEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0OjpJdGVtSGFu
ZGxlPiBXQVJOX1UKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoK
ICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpHZXRJbWFnZURhdGE6IHsKKyAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
R2V0UGl4ZWxCdWZmZXI6IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1
KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE5leHRJdGVtQnVmZmVyVG9SZWFkKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3Rp
bmF0aW9uKTsKIAotICAgIHZvaWQgcG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoV2Vi
Q29yZTo6SW1hZ2VEYXRhKik7CisgICAgdm9pZCBwb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVk
TWVtb3J5KE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKTsKIAogICAgIGJvb2wgYWxs
b3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBjb25zdDsKIApAQCAtMTA5LDcgKzEwOSw3IEBA
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheVJlc3VsdCBzdWJtaXQo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6SW1hZ2VC
dWZmZXImIGRlc3RpbmF0aW9uKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG5l
eHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJBcHBseWluZ0Rpc3BsYXlMaXN0cyhXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciYgaW5pdGlhbERlc3RpbmF0aW9uLCBzaXplX3QgaW5pdGlhbE9mZnNldCwg
RGlzcGxheUxpc3RSZWFkZXJIYW5kbGUmLCBHUFVQcm9jZXNzV2FrZXVwUmVhc29uKTsKIAotICAg
IE9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB1cGRhdGVTaGFyZWRNZW1vcnlGb3JH
ZXRJbWFnZURhdGFIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCk7CisgICAgT3B0aW9uYWw8U2hhcmVk
TWVtb3J5OjpJUENIYW5kbGU+IHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVs
cGVyKHNpemVfdCBieXRlQ291bnQpOwogICAgIHZvaWQgdXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VS
ZXF1ZXN0KCk7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCkBAIC0xMjMsMTAgKzEyMywx
MCBAQCBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQg
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgd2FrZVVwQW5kQXBwbHlEaXNwbGF5
TGlzdChjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50cyYpOwotICAgIHZvaWQg
dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsK
LSAgICB2b2lkIHNlbWFwaG9yZUZvckdldEltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwotICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5
QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6
U2VtYXBob3JlJik+JiYpOwotICAgIHZvaWQgZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9y
eSgpOworICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMy
X3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6
SVBDSGFuZGxlJik+JiYpOworICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKKyAgICB2b2lk
IHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90
IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOworICAgIHZvaWQgZGVzdHJveUdl
dFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCk7CiAgICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VC
dWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBX
ZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQg
Z2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRC
R1JBRGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8dWludDhfdD4mJik+JiYpOwpAQCAtMTYx
LDggKzE2MSw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxEaXNwbGF5TGlzdFJlYWRlckhhbmRsZT4+IG1f
c2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzOwogICAgIE9wdGlvbmFsPFBlbmRpbmdXYWtldXBJbmZv
cm1hdGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsKICAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3Vt
ZURpc3BsYXlMaXN0U2VtYXBob3JlOwotICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0SW1hZ2VEYXRh
U2VtYXBob3JlOwotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5OworICAgIElQQzo6U2VtYXBob3JlIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmU7Cisg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeTsKICAg
ICBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1ZXN0IG1fcmVuZGVyaW5nUmVzb3VyY2VzUmVx
dWVzdDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTAgKzI1LDEwIEBACiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBD
cmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6
OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNv
cmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFdha2VVcEFuZEFwcGx5
RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVu
dHMgYXJndW1lbnRzKQotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSh1aW50
MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRs
ZSkgU3luY2hyb25vdXMKLSAgICBTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSAtPiAoSVBDOjpT
ZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cwotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFu
ZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3Jl
KSBTeW5jaHJvbm91cwotICAgIERlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKQorICAg
IFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkg
LT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwor
ICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFw
aG9yZSkgU3luY2hyb25vdXMKKyAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JH
ZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91
cworICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiAgICAgR2V0RGF0YVVS
TEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxTdHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0
RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAg
R2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEpIFN5bmNocm9ub3VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsOCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlCiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxPcHRpb25hbDxUPj4gewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBPcHRpb25hbDxUPiYgb3B0aW9u
YWwpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKICAgICB7
CiAgICAgICAgIGlmICghb3B0aW9uYWwpIHsKICAgICAgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7
CkBAIC0xNDYsNyArMTQ3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50
Q29kZQogICAgICAgICBlbmNvZGVyIDw8IG9wdGlvbmFsLnZhbHVlKCk7CiAgICAgfQogCi0gICAg
c3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBP
cHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3Rh
dGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBPcHRp
b25hbDxUPiYgb3B0aW9uYWwpCiAgICAgewogICAgICAgICBib29sIGlzRW5nYWdlZDsKICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0VuZ2FnZWQpKQpAQCAtMTY1LDcgKzE2Niw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBPcHRpb25hbDxPcHRpb25hbDxUPj4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAg
ICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdlZDsKICAgICAgICAgZGVjb2RlciA+PiBpc0Vu
Z2FnZWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMTQsNzcgKzMxMTQsNiBA
QCBPcHRpb25hbDxXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246Ok1lCiB9CiAjZW5kaWYgLy8g
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KLXZv
aWQgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPiYgaW1hZ2VEYXRhKQotewot
ICAgIGVuY29kZXIgPDwgaW1hZ2VEYXRhLT5zaXplKCk7Ci0KLSAgICBhdXRvJiByYXdEYXRhID0g
aW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
cmF3RGF0YS5ieXRlTGVuZ3RoKCkpOwotICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJhd0RhdGEuZGF0YSgpLCByYXdEYXRhLmJ5dGVMZW5ndGgoKSwgMSk7Ci19Ci0KLXRlbXBsYXRl
Ci12b2lkIEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGU8RW5j
b2Rlcj4oRW5jb2RlciYsIGNvbnN0IFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci10ZW1wbGF0
ZQotdm9pZCBBcmd1bWVudENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlPFN0
cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIGNvbnN0IFJl
ZjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci0KLU9wdGlvbmFsPFJlZjxXZWJDb3JlOjpJbWFnZURh
dGE+PiBBcmd1bWVudENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SW50U2l6ZT4gaW1hZ2VEYXRhU2l6ZTsKLSAg
ICBkZWNvZGVyID4+IGltYWdlRGF0YVNpemU7Ci0gICAgaWYgKCFpbWFnZURhdGFTaXplKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8dWludDY0X3Q+IGRhdGFM
ZW5ndGg7Ci0gICAgZGVjb2RlciA+PiBkYXRhTGVuZ3RoOwotICAgIGlmICghZGF0YUxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8gcmF3RGF0YSA9IFVpbnQ4
Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKCpkYXRhTGVuZ3RoKTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJhd0RhdGEtPmRhdGEoKSwgcmF3RGF0YS0+
bGVuZ3RoKCksIDEpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZSgqaW1hZ2VEYXRhU2l6ZSwgV1RGTW92ZShyYXdE
YXRhKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICByZXR1cm4geyBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSB9OwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZURhdGE+Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlZlB0cjxXZWJD
b3JlOjpJbWFnZURhdGE+JiBpbWFnZURhdGEpCi17Ci0gICAgaWYgKCFpbWFnZURhdGEpIHsKLSAg
ICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVu
Y29kZXIgPDwgdHJ1ZTsKLSAgICBBcmd1bWVudENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+
Pjo6ZW5jb2RlKGVuY29kZXIsIGltYWdlRGF0YS5jb3B5UmVmKCkucmVsZWFzZU5vbk51bGwoKSk7
Ci19Ci0KLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdl
RGF0YT4+OjplbmNvZGUoRW5jb2RlciYsIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
Jik7Ci0KLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdl
RGF0YT4+OjplbmNvZGUoU3RyZWFtQ29ubmVjdGlvbkVuY29kZXImLCBjb25zdCBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPiYpOwotCi1PcHRpb25hbDxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRh
Pj4gQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIGJvb2wgaXNFbmdhZ2VkOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlm
ICghaXNFbmdhZ2VkKQotICAgICAgICByZXR1cm4geyBudWxscHRyIH07Ci0KLSAgICBhdXRvIHJl
c3VsdCA9IEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUoZGVj
b2Rlcik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgcmV0dXJuIHsgV1RGTW92ZSgqcmVzdWx0KSB9OwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKSAmJiBFTkFCTEUoV0VCR0wpCiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lv
biAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ltYWdlRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5kZXhlZERCLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnB1dE1vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2VsZWN0aW9uT3B0
aW9uLmg+CkBAIC04MDQsMTggKzgwMyw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZToKIH07CiAjZW5kaWYKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVu
Y29kZXI+Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPiYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxSZWZQdHI8V2ViQ29yZTo6
SW1hZ2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPgotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgUmVm
PFdlYkNvcmU6OkltYWdlRGF0YT4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVmPFdlYkNvcmU6
OkltYWdlRGF0YT4+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCiAjaWYgSEFWRShQQVNTS0lUX0lO
U1RBTExNRU5UUykKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5
bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbj4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UGF5bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbiYp
OwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVl
L0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKENHX0RJU1BMQVlfTElTVF9CQUNLRURfSU1BR0VfQlVG
RkVSKQogCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0ltYWdlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGl4ZWxCdWZmZXIuaD4KICNp
bmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQWRkaXRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTA1LDEzICsxMDUs
MTMgQEAgVmVjdG9yPHVpbnQ4X3Q+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcgogICAgIHJldHVy
biB7IH07CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IENHRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
K09wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJC
YWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9p
bnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgQ0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlckJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1v
dGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAy
NzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5
TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBA
IHB1YmxpYzoKICAgICAvLyBOT1RFOiBUaGVzZSBhbGwgQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6
QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRl
c3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpX
ZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNPcmlnaW5BdFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlRGF0YS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGl4ZWxCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMTYzLDE0ICsxNjMsMTQgQEAg
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bQogICAgIHJldHVybiBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKLVJlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9i
aXRtYXAtPmRhdGEoKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwg
ZGVzdEZvcm1hdCwgbV9iaXRtYXAtPmRhdGEoKSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2lu
dCwgZGVzdEZvcm1hdCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEltYWdlRGF0YTsKLX0KLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IFNoYXJlYWJsZUJpdG1hcDsKQEAgLTYzLDggKzU5LDggQEAgcHVibGljOgogICAgIFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZT4gY29weUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJD
b3JlOjpDb3B5QmFja2luZ1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJD
b3JlOjpQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OlBpeGVsQnVmZmVyJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92
ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3Bw
CShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNyArMTM2LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWludAog
CiAgICAgLy8gRklYTUU6IFdlIGNhbm5vdCBzeW5jaHJvbml6ZSBzbyB0aGF0IHdlIHdvdWxkIGtu
b3cgbm8gcGVuZGluZyBvcGVyYXRpb25zIGFyZSB1c2luZyB0aGUgYGJ1ZmZlcmAuCiAKLSAgICAv
LyBGSVhNRTogQ3VycmVudGx5IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmdldEltYWdlRGF0YSBl
dCBhbCBkbyBub3Qgd2FpdCBmb3IgdGhlIGZsdXNoZXMgb2YgdGhlIGltYWdlcworICAgIC8vIEZJ
WE1FOiBDdXJyZW50bHkgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Z2V0UGl4ZWxCdWZmZXIgZXQg
YWwgZG8gbm90IHdhaXQgZm9yIHRoZSBmbHVzaGVzIG9mIHRoZSBpbWFnZXMKICAgICAvLyBpbnNp
ZGUgdGhlIGRpc3BsYXkgbGlzdHMuIFJhdGhlciwgaXQgYXNzdW1lcyB0aGF0IHByb2Nlc3Npbmcg
aXRzIHNlcXVlbmNlIChlLmcuIHRoZSBkaXNwbGF5IGxpc3QpIHdpbGwgZXF1YWwgdG8gcmVhZCBm
bHVzaCBiZWluZwogICAgIC8vIGZ1bGZpbGxlZC4gRm9yIGJlbG93LCB3ZSBjYW5ub3QgY3JlYXRl
IGEgbmV3IGZsdXNoIGlkIHNpbmNlIHdlIGdvIHRocm91Z2ggZGlmZmVyZW50IHNlcXVlbmNlIChS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTCBzZXF1ZW5jZSkKIApJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVH
cmFwaGljc0NvbnRleHRHTFByb3h5LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgcHVibGljOgogICAgIHZvaWQgbXVs
dGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3Qg
R0NHTGludD4gZmlyc3RzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTFNw
YW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NHTHNpemVpIGRyYXdjb3VudCkg
ZmluYWw7CiAgICAgdm9pZCBtdWx0aURyYXdFbGVtZW50c0FOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBmaW5hbDsKICAgICB2
b2lkIG11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHTFNw
YW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5cGUsIEdDR0xTcGFuPGNvbnN0
IEdDR0xpbnQ+IG9mZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3Vu
dHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgZmluYWw7CisgICAgT3B0
aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxC
dWZmZXIoKSBmaW5hbDsKICAgICAvLyBFbmQgb2YgbGlzdCB1c2VkIGJ5IGdlbmVyYXRlLWdwdXAt
d2ViZ2wgc2NyaXB0LgogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5l
cmF0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNjYsMTEgKzIzNjYsMTEgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5OjptdWx0aQogICAgIH0KIH0KIAotUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKQorT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IFJlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKQogewot
ICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHJldHVyblZhbHVlID0geyB9OworICAgIE9w
dGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiByZXR1cm5WYWx1ZSA9IHsgfTsKICAgICBpZiAo
IWlzQ29udGV4dExvc3QoKSkgewotICAgICAgICBhdXRvIHNlbmRSZXN1bHQgPSBzZW5kU3luYyhN
ZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGE6OlJlcGx5KHJldHVyblZhbHVlKSk7CisgICAgICAgIGF1
dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRH
TDo6UGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXI6OlJl
cGx5KHJldHVyblZhbHVlKSk7CiAgICAgICAgIGlmICghc2VuZFJlc3VsdCkKICAgICAgICAgICAg
IG1hcmtDb250ZXh0TG9zdCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDM4
ICsxOTQsMzggQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gYml0bWFwLT5jcmVhdGVJbWFn
ZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0
YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBPcHRpb25hbDxXZWJD
b3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNv
bnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IFdlYkNv
cmU6OkltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3Quc2l6ZSgpKTsKLSAgICAgICAgaWYgKCFpbWFn
ZURhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgc2l6ZV90IGRhdGFT
aXplID0gaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOworICAgICAgICBhdXRvIHBpeGVs
QnVmZmVyID0gV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShXZWJDb3JlOjpEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IsIFdlYkNvcmU6OlBpeGVsRm9ybWF0OjpSR0JBOCwgc3JjUmVj
dC5zaXplKCkpOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcGl4ZWxCdWZmZXItPmRh
dGEoKS5ieXRlTGVuZ3RoKCk7CiAKICAgICAgICAgSVBDOjpUaW1lb3V0IHRpbWVvdXQgPSA1X3M7
Ci0gICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5ID0gbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShkYXRhU2l6ZSwgdGltZW91
dCk7CisgICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5ID0gbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHktPnNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplLCB0
aW1lb3V0KTsKICAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgYXV0
byYgbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhp
cyk7Ci0gICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRJ
bWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICAgICAgbXV0YWJsZVRoaXMubV9k
cmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3Jj
UmVjdCk7CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwog
Ci0gICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2FpdEZvckdldElt
YWdlRGF0YVRvQ29tcGxldGUodGltZW91dCkpCi0gICAgICAgICAgICBtZW1jcHkoaW1hZ2VEYXRh
LT5kYXRhKCkuZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAg
ICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndhaXRGb3JHZXRQaXhlbEJ1ZmZl
clRvQ29tcGxldGUodGltZW91dCkpCisgICAgICAgICAgICBtZW1jcHkocGl4ZWxCdWZmZXItPmRh
dGEoKS5kYXRhKCksIHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1lbXNldChpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIDAsIGRhdGFT
aXplKTsKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICAgICAgICAgIG1lbXNldChwaXhl
bEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSwgMCwgZGF0YVNpemUpOworICAgICAgICByZXR1cm4gcGl4
ZWxCdWZmZXI7CiAgICAgfQogCi0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpIG92ZXJyaWRlCisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYg
cGl4ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICAvLyBUaGUgbWF0aCBpbnNpZGUgSW1h
Z2VEYXRhOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGggdGhlIG1hdGggaW5zaWRlIEltYWdl
QnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKCkgYWJvdXQgaG93IG1fcmVzb2x1dGlvblNjYWxl
IGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIGluIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHB1dEltYWdlRGF0YSgpIGlzIG9ubHkgY2FsbGVkIHdoZW4gcmVzb2x1
dGlvblNjYWxlKCkgPT0gMS4KKyAgICAgICAgLy8gVGhlIG1hdGggaW5zaWRlIFBpeGVsQnVmZmVy
OjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGggdGhlIG1hdGggaW5zaWRlIEltYWdlQnVmZmVy
QmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoKSBhYm91dCBob3cgbV9yZXNvbHV0aW9uU2NhbGUgaW50
ZXJhY3RzIHdpdGggdGhlIGRhdGEgaW4gdGhlIEltYWdlQnVmZmVyLgorICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgcHV0UGl4ZWxCdWZmZXIoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIHJlc29sdXRp
b25TY2FsZSgpID09IDEuCiAgICAgICAgIEFTU0VSVChyZXNvbHV0aW9uU2NhbGUoKSA9PSAxKTsK
LSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1dEltYWdlRGF0YShpbnB1dEZv
cm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOworICAgICAg
ICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkucHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQs
IHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOwogICAgIH0KIAog
ICAgIGJvb2wgcHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUw
LDUwICsxNTAsNTAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZQog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1TaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHNpemVfdCBkYXRhU2l6ZSwg
SVBDOjpUaW1lb3V0IHRpbWVvdXQpCitTaGFyZWRNZW1vcnkqIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoc2l6ZV90IGRhdGFTaXplLCBJ
UEM6OlRpbWVvdXQgdGltZW91dCkKIHsKICAgICBzZW5kRGVmZXJyZWRXYWtldXBNZXNzYWdlSWZO
ZWVkZWQoKTsKIAotICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkgPSAhbV9nZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeUxlbmd0
aDsKLSAgICBib29sIG5lZWRzU2VtYXBob3JlID0gIW1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOwor
ICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkgPSAhbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eSB8fCBkYXRhU2l6ZSA+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlMZW5ndGg7CisgICAg
Ym9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlOwogCiAgICAg
aWYgKG5lZWRzU2hhcmVkTWVtb3J5KQotICAgICAgICBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9y
eSA9IG51bGxwdHI7CisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxs
cHRyOwogCiAgICAgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlOwogICAgIElQQzo6U2Vt
YXBob3JlIHNlbWFwaG9yZTsKIAogICAgIGlmIChuZWVkc1NoYXJlZE1lbW9yeSAmJiBuZWVkc1Nl
bWFwaG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YShkYXRhU2l6
ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlB
bmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5KGhhbmRsZSwgc2VtYXBob3JlKSwgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6
TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKKyAgICAgICAgc2VuZFN5bmMoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFw
aG9yZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVy
OjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCks
IHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNN
ZXNzYWdlcyk7CiAgICAgZWxzZSBpZiAobmVlZHNTaGFyZWRNZW1vcnkpCi0gICAgICAgIHNlbmRT
eW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlG
b3JHZXRJbWFnZURhdGEoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhOjpSZXBseShoYW5kbGUpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpN
YWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOworICAgICAgICBzZW5kU3luYyhNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4
ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBk
YXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSksIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50
YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CiAgICAgZWxzZSBpZiAobmVlZHNTZW1hcGhv
cmUpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpT
ZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OlNlbWFwaG9yZUZvckdldEltYWdlRGF0YTo6UmVwbHkoc2VtYXBob3JlKSwgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7CisgICAgICAgIHNlbmRTeW5jKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcigpLCBN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZm
ZXI6OlJlcGx5KHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVv
dXQpOwogCiAgICAgaWYgKCFoYW5kbGUuaGFuZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZ2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwg
U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgICAgIG1fZ2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5TGVuZ3RoID0gaGFuZGxlLmRhdGFTaXplOworICAgICAgICBtX2dldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwg
U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgICAgIG1fZ2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnlMZW5ndGggPSBoYW5kbGUuZGF0YVNpemU7CiAgICAgfQogICAgIGlm
IChuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUgPSBXVEZN
b3ZlKHNlbWFwaG9yZSk7CisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUgPSBXVEZN
b3ZlKHNlbWFwaG9yZSk7CiAKLSAgICBpZiAobV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVt
b3J5VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5VGltZXIuc3RvcCgpOwotICAgIG1fZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9y
eVRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOworICAgIGlmIChtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fZGVzdHJveUdldFBpeGVs
QnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuc3RvcCgpOworICAgIG1fZGVzdHJveUdldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5VGltZXIuc3RhcnRPbmVTaG90KDVfcyk7CiAKLSAgICByZXR1cm4gbV9n
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkuZ2V0KCk7CisgICAgcmV0dXJuIG1fZ2V0UGl4ZWxCdWZm
ZXJTaGFyZWRNZW1vcnkuZ2V0KCk7CiB9CiAKLWJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Ojp3YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQgdGltZW91dCkK
K2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJU
b0NvbXBsZXRlKElQQzo6VGltZW91dCB0aW1lb3V0KQogewotICAgIEFTU0VSVChtX2dldEltYWdl
RGF0YVNlbWFwaG9yZSk7Ci0gICAgcmV0dXJuIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlLT53YWl0
Rm9yKHRpbWVvdXQpOworICAgIEFTU0VSVChtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlKTsKKyAg
ICByZXR1cm4gbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZS0+d2FpdEZvcih0aW1lb3V0KTsKIH0K
IAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRJbWFnZURhdGFT
aGFyZWRNZW1vcnkoKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lH
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRN
ZW1vcnkgPSBudWxscHRyOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRp
bmdGb3JTeW5jUmVwbHkpOworICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBudWxs
cHRyOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlc3Ryb3lH
ZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigp
LCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNS
ZXBseSk7CiB9CiAKIFN0cmluZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldERhdGFV
UkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgJKHJldmlzaW9uIDI3NzI1NSkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgRGlzcGxh
eUxpc3Q7CiBjbGFzcyBJdGVtOwogfQogY2xhc3MgRmxvYXRTaXplOwotY2xhc3MgSW1hZ2VEYXRh
OworY2xhc3MgUGl4ZWxCdWZmZXI7CiBlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
OiB1aW50OF90OwogZW51bSBjbGFzcyBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgOiB1aW50OF90Owog
ZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKQEAgLTc4LDkgKzc4LDkgQEAgcHVibGlj
OgogICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICB2b2lkIHNlbmREZWZlcnJlZFdha2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwog
Ci0gICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6ZV90IGRh
dGFTaXplLCBJUEM6OlRpbWVvdXQpOwotICAgIGJvb2wgd2FpdEZvckdldEltYWdlRGF0YVRvQ29t
cGxldGUoSVBDOjpUaW1lb3V0KTsKLSAgICB2b2lkIGRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRN
ZW1vcnkoKTsKKyAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVy
KHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsKKyAgICBib29sIHdhaXRGb3JHZXRQaXhl
bEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0KTsKKyAgICB2b2lkIGRlc3Ryb3lHZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeSgpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlk
ZTsKQEAgLTEzNiwxMCArMTM2LDEwIEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnJlbnREZXN0aW5hdGlvbkltYWdlQnVm
ZmVySWRlbnRpZmllcjsKICAgICBPcHRpb25hbDxHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3Vt
ZW50cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHM7CiAgICAgdW5zaWduZWQgbV9y
ZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1cCB7IDAgfTsKLSAgICBPcHRp
b25hbDxJUEM6OlNlbWFwaG9yZT4gbV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7Ci0gICAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnk7Ci0gICAgdWludDY0X3Qg
bV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlMZW5ndGggeyAwIH07Ci0gICAgV2ViQ29yZTo6VGlt
ZXIgbV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5VGltZXIgeyAqdGhpcywgJlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSB9
OworICAgIE9wdGlvbmFsPElQQzo6U2VtYXBob3JlPiBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3Jl
OworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnk7
CisgICAgdWludDY0X3QgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeUxlbmd0aCB7IDAgfTsK
KyAgICBXZWJDb3JlOjpUaW1lciBtX2Rlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRp
bWVyIHsgKnRoaXMsICZSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeSB9OwogICAgIFdlYWtQdHI8R1BVUHJvY2Vzc0Nvbm5lY3Rpb24+
IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2Nv
Y29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMCwxMyArMTIwLDEzIEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3UKICAgICByZXR1cm4geyB9OwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdAogewogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9p
bnQmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKQordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlP
U3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNv
bnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICBT
dHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKICAg
ICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRv
QkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1
dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFdlYkNvcmU6
OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBlckxlZnRDb3JuZXIgPSB0cnVl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBjYW5NYXBCYWNraW5nU3RvcmUgPSBmYWxzZTsK
</data>
<flag name="commit-queue"
          id="449077"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428201</attachid>
            <date>2021-05-10 14:27:41 -0700</date>
            <delta_ts>2021-05-10 16:58:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225584-20210510142740.patch</filename>
            <type>text/plain</type>
            <size>230351</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBAQAorMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhl
ciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBs
YWNlIHVzZSBvZiB0aGUgRE9NIGxheWVyICYgcmVmLWNvdW50ZWQgSW1hZ2VEYXRhIGNsYXNzIHdp
dGggdGhlIG5ldyAKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgUGl4ZWxCdWZmZXIgY2xhc3MsIHdo
aWNoIEltYWdlRGF0YSBub3cgdXNlcyBpbnRlcm5hbGx5LgorCisgICAgICAgIFNpbmNlIFBpeGVs
QnVmZmVyIGlzIG5vdC1yZWZlcmVuY2UgY291bnRlZCBvciBoZWFwLWFsbG9jYXRlZCBpbiBtb3N0
IGNhc2VzLAorICAgICAgICBtYW55IHVzZXMgb2YgUmVmUHRyPEltYWdlRGF0YT4gdG8gaW5kaWNh
dGUgYSBwb3RlbnRpYWxseSBudWxsIEltYWdlRGF0YSBoYXZlCisgICAgICAgIGJlZW4gcmVwbGFj
ZWQgd2l0aCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4uIEdlbmVyYWxseSwgdGhpcyBhbGxvd3MgdXMg
dG8gcmVtb3ZlCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gdGhhdCB3YXMgb25s
eSBuZWVkZWQgZm9yIHRoZSBET00gb2JqZWN0LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdG8g
bWFueSBmdW5jdGlvbnMgd2l0aCBJbWFnZURhdGEgaW4gdGhlaXIgbmFtZSBub3cgaGF2ZQorICAg
ICAgICBQaXhlbEJ1ZmZlciBpbiB0aGVpciBuYW1lIGluc3RlYWQsIGUuZy4gSW1hZ2VCdWZmZXI6
OmdldEltYWdlRGF0YSBpcyBub3cKKyAgICAgICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVy
ICh0aG91Z2ggSSB0aGluayBjaGFuZ2luZyB0aGlzIGluIHRoZSBmdXR1cmUgdG8gCisgICAgICAg
IEltYWdlQnVmZmVyOjpjb3B5UGl4ZWxCdWZmZXIgaXMgYSBnb29kIGlkZWEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9i
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ltYWdl
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpwaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0UGl4ZWxCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1
ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBp
eGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQnVmZmVyU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFk
b3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0
UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJl
c3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBl
bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpk
ZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZl
Q29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNp
emVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdp
bmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpQdXRQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQ
dXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0UGl4ZWxCdWZmZXI6OkdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcjo6cGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YTo6R2V0SW1hZ2VEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE6Om91
dHB1dEZvcm1hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6R2V0SW1hZ2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmlucHV0Rm9ybWF0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE6OmRlc3RQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZXN0Rm9ybWF0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxp
ZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVk
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVm
ZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJl
cXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdl
RGF0YVRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0
c0ZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZG5QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6CisgICAgICAgICogcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgcHJvdGVjdGlvbiBv
ZiB0aGUgcGl4ZWwgYnVmZmVyIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSByZW1v
dmVkIGluIHIyNzcyMzcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA3NiwxMyArMTA3NiwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6
ZSB9KTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgaWYg
KCFwaXhlbEJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBhdXRvIGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFy
ZWRCdWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHBpeGVsQnVmZmVyLT5kYXRh
KCkucG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewog
ICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJy
b3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTUwLDYgKzMxNTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICBJbnRTaXplIGltYWdlRGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKICAgICAgICAgaW1h
Z2VEYXRhU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBD
cmVhdGluZyB0aGlzIEltYWdlRGF0YSBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgc2tpcCBy
aWdodCB0byBjcmVhdGluZyBhIFBpeGVsQnVmZmVyIGRpcmVjdGx5LgogICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVNpemUsIGFycmF5LnJlbGVhc2VO
b25OdWxsKCkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgZmFpbCgp
OwpAQCAtMzE2Miw3ICszMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6
ZXJvKCksIGxvZ2ljYWxTaXplIH0pOworICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZm
ZXIoKSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRv
IGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
YnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXph
dGlvblN0YXRlKSkpOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsNyArNzQzLDcgQEAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhU
TUxDYW52YXNFbAogI2lmIFVTRShDRykKICAgICAvLyBUcnkgdG8gZ2V0IEltYWdlRGF0YSBmaXJz
dCwgYXMgdGhhdCBtYXkgYXZvaWQgbG9zc3kgY29udmVyc2lvbnMuCiAgICAgaWYgKGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBVbmNhY2hlZFN0cmluZyB7
IGRhdGFVUkwoKmltYWdlRGF0YSwgZW5jb2RpbmdNSU1FVHlwZSwgcXVhbGl0eSkgfTsKKyAgICAg
ICAgcmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgZGF0YVVSTChpbWFnZURhdGEtPnBpeGVsQnVmZmVy
KCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpIH07CiAjZW5kaWYKIAogICAgIG1ha2VSZW5k
ZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC03NzQsNyArNzc0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIFVTRShDRykKICAgICBpZiAoYXV0byBp
bWFnZURhdGEgPSBnZXRJbWFnZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYjsK
LSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0gZGF0YSgqaW1hZ2VEYXRhLCBlbmNv
ZGluZ01JTUVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRh
ID0gZGF0YShpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxp
dHkpOwogICAgICAgICBpZiAoIWJsb2JEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJsb2Ig
PSBCbG9iOjpjcmVhdGUoJmRvY3VtZW50KCksIFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01J
TUVUeXBlKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgV1RG
TW92ZShibG9iKSk7CkBAIC04MTIsNyArODEyLDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldAogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgpKTsK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2Nv
bnRleHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVy
biBJbWFnZURhdGE6OmNyZWF0ZShkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
bV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJp
dG1hcC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDYsMTAgKzgwNiw5IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyBJZiBubyBjcm9wcGluZywgcmVz
aXppbmcsIGZsaXBwaW5nLCBldGMuIGFyZSBuZWVkZWQsIHRoZW4gc2ltcGx5IHVzZSB0aGUKICAg
ICAvLyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBhbHBoYVByZW11
bHRpcGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEo
b3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKLSAgICBpZiAoc291cmNlUmVjdGFuZ2xlLnJldHVy
blZhbHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJuVmFs
dWUoKS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkKLSAgICAgICAgJiYgc291cmNlUmVjdGFu
Z2xlLnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUKLSAgICAgICAgJiYgb3B0aW9u
cy5pbWFnZU9yaWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5v
bmUpIHsKLSAgICAgICAgYml0bWFwRGF0YS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIGlmIChz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5sb2NhdGlvbigpLmlzWmVybygpICYmIHNvdXJj
ZVJlY3RhbmdsZS5yZXR1cm5WYWx1ZSgpLnNpemUoKSA9PSBpbWFnZURhdGEtPnNpemUoKSAmJiBz
b3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZSAmJiBvcHRp
b25zLmltYWdlT3JpZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6
Tm9uZSkgeworICAgICAgICBiaXRtYXBEYXRhLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgc291
cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworICAgICAgICAKICAgICAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSkpOwogICAgICAgICAvLyBUaGUgcmVz
dWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRp
b24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgICAgICBwcm9taXNlLnJlc29sdmUoV1RG
TW92ZShpbWFnZUJpdG1hcCkpOwpAQCAtODIzLDcgKzgyMiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6
OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVm
ZmVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRydWUsIFdURk1vdmUocHJvbWlzZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHRlbXBCaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRSZWN0
KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgdGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhLT5waXhl
bEJ1ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGVtcEJpdG1hcERhdGEsIGRlc3RSZWN0LCBzb3VyY2VSZWN0
YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNp
emVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmll
bnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIxICs0MywxNiBAQCBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gSW1hZ2VECiAgICAgcmV0dXJuIGNoZWNrZWREYXRh
U2l6ZTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3Jl
YXRlKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgaWYgKCFzdyB8fCAhc2gpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIEludFNpemUg
c2l6ZShzdywgc2gpOwotICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNp
emUpOwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoaXMg
c2l6ZSJfcyB9OwotICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOwotICAgIGlmICghYnl0ZUFy
cmF5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhICJyZWFsIiBv
dXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxsZWQgb24gaXQ/
Ci0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9mIG1lbW9yeSJf
cyB9OwotICAgIH0KLSAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoV1RGTW92ZShwaXhlbEJ1ZmZlcikpKTsKK30K
KworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKFdURk1vdmUoKnBpeGVs
QnVmZmVyKSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCkBAIC04MCw2ICs3NSwyMyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZURhdGE6OmNyZWF0ZShjb25zCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdU
Rk1vdmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKK0V4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJ
bWFnZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCit7CisgICAgaWYgKCFz
dyB8fCAhc2gpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9Owor
ICAgIEludFNpemUgc2l6ZShzdywgc2gpOworICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6
OmRhdGFTaXplKHNpemUpOworICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVm
ZmVyIG9mIHRoaXMgc2l6ZSJfcyB9OworICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOworICAg
IGlmICghYnl0ZUFycmF5KSB7CisgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBi
ZSBhICJyZWFsIiBvdXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBj
YWxsZWQgb24gaXQ/CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0
IG9mIG1lbW9yeSJfcyB9OworICAgIH0KKyAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgp
IH0pKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRl
KFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25h
bDx1bnNpZ25lZD4gc2gpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5n
dGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSAr
MzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZURhdGE+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWdu
ZWQgc2gpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SW1hZ2VEYXRhPiBjcmVhdGUo
UGl4ZWxCdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURh
dGE+IGNyZWF0ZShPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQg
c2gpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRh
Pj4gY3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFs
PHVuc2lnbmVkPiBzaCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCkBAIC01
Miw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CiAgICAgUGl4
ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsg
fQogCisgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbEJ1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlRGF0YShQaXhl
bEJ1ZmZlciYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDE0ICsyMTk5LDE0IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAot
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKLSAgICBpZiAoIWltYWdl
RGF0YSkgeworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBidWZmZXItPmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7Cisg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcs
IE1lc3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8g
Z2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURh
dGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJl
dHVybiBpbWFnZURhdGE7CisgICAgcmV0dXJuIHsgeyBJbWFnZURhdGE6OmNyZWF0ZShXVEZNb3Zl
KCpwaXhlbEJ1ZmZlcikpIH0gfTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBpbnQgZHgsIGludCBkeSkKQEAgLTIy
NDYsNyArMjI0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW0K
ICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBk
YXRhLmhlaWdodCgpIH0pOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAg
ICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVz
dE9mZnNldCB9KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzYsMTIgKzEy
MzYsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbgogICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKmJhc2UuYnVmZmVyKCkpOwog
fQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigp
CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2xlYXJJZkNvbXBvc2l0
ZWQoQ2xlYXJDYWxsZXJPdGhlcik7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4dHVyZUV4dGVuc2lvbkZs
YWdzKCkgY29uc3QKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgogICAgICAg
ICAgICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgYWRqdXN0ZWRTb3VyY2VJ
bWFnZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC0+ZXh0cmFjdFBpeGVsQnVmZmVyKHBpeGVscy0+cGl4ZWxCdWZmZXIoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBhZGp1c3RlZFNvdXJjZUltYWdl
UmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlbW92ZVNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChX
ZWJHTENvbnRleHRPYmplY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZv
aWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAgICAgICBh
dXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNl
UmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VC
dWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b25jcmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMCwyMCArMjMwLDIwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAg
ICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
Ci0gICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1
ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzY0LDEyICs3NjQsMTAgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRh
LCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RQ
aXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGlu
dCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFn
ZURhdGEtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IHBpeGVsQnVmZmVyLnNpemUoKS53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBwaXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7CiAKICAg
ICB1bnNpZ25lZCBwYWNrZWRTaXplOwogICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCkBAIC03NzksNyArNzc3LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0
YS5yZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5k
YXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFn
ZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9O
b3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhwaXhlbEJ1
ZmZlci5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFP
cDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBF
eHRlbnNpb25zR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEFWRk9VTkRBVElPTikKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1Y7CkBAIC0xMjkyLDcg
KzEyOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSBidWZmZXIgYWJzdHJhY3Rpb25zIHRo
YXQgdGhlIGNhbGxlciBzaG91bGQgaG9sZCBzZXBhcmF0ZSB0bwogICAgIC8vIHRoZSBjb250ZXh0
LgogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpID0gMDsK
IAogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgbGF5ZXIgc2hvdWxk
IGJlIG1hcmtlZCBjb21wb3NpdGVkIGJ5CkBAIC0xMzQzLDExICsxMzQzLDExIEBAIHB1YmxpYzoK
ICAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgogICAgIHN0
YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVp
IGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0
ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0
aGUgZ2l2ZW4gUGl4ZWxCdWZmZXIgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNr
aW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBl
LAogICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
cy4gUmV0dXJucyB0cnVlCiAgICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4
dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0
UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKICAgICAvLyBk
YXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
OCArMTI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
MiwyMjcgKzYyLDIyNyBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
CiAgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwgc291
cmNlUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwot
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHNy
Y1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5
TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICB1aW50OF90IGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKICAgICAgICAg
aWYgKCFhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgdWludDhfdCByID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gcGl4ZWxBcnJheS5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbE9mZnNldCArIDIpOwogCiAgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAg
ICBzcmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAotICAgIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2lu
dDo6emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAog
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRh
KSBjb25zdAogewogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXplKCku
YXJlYSgpLnVuc2FmZUdldCgpKTsKLSAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbG9naWNh
bFNpemUoKS53aWR0aCgpICogNDsKLSAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdygpOworICAgIHNpemVfdCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUo
KS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc291cmNlQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOwogCi0gICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpOworICAgIHVpbnQ4X3QqIHNvdXJjZVJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKTsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxv
Z2ljYWxTaXplKCkpOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBwaXhlbEZvcm1hdCgpLCBzb3VyY2VCeXRlc1BlclJvdywgc291cmNlUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2ljYWxTaXpl
KCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlQ
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCBj
b25zdCB1aW50OF90KiBzcmNQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVsRm9ybWF0LCB1aW50
OF90KiBkZXN0UGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90
KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsK
KyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAgaWYgKCFhbHBoYSkgewot
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7Cisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9
IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4ZWxGb3JtYXQgPT0g
ZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVs
KVswXTsKKyAgICBpZiAoc291cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhl
bClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlUGl4ZWwpWzBd
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgotICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOwotICAgIGRlc3RQ
aXhlbFsxXSA9IHNyY1BpeGVsWzFdOwotICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOwot
ICAgIGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0g
PSBzb3VyY2VQaXhlbFsyXTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gc291cmNlUGl4ZWxb
MV07CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IHNvdXJjZVBpeGVsWzBdOworICAgIGRlc3Rp
bmF0aW9uUGl4ZWxbM10gPSBzb3VyY2VQaXhlbFszXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNvdXJjZVBpeGVsRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzb3VyY2VQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1h
dCwgdWludDhfdCogZGVzdGluYXRpb25QaXhlbCkKIHsKLSAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgdWludDhfdCBhbHBoYSA9IHNvdXJjZVBpeGVsWzNdOwogICAgIGlmICgh
YWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Ci0gICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKHNyY1BpeGVsRm9ybWF0LCBzcmNQaXhlbCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0
UGl4ZWwpOworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzb3VyY2VQ
aXhlbEZvcm1hdCwgc291cmNlUGl4ZWwsIGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0
aW9uUGl4ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyY1BpeGVsRm9y
bWF0ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICBpZiAoc291
cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkgeworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzJdID0gKHNvdXJjZVBpeGVsWzJdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxwaGE7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0g
ICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwotICAgIGRlc3RQ
aXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7
CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IChzb3VyY2VQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFs
cGhhOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMF0gKiAyNTUpIC8g
YWxwaGE7CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IGFscGhhOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChQaXhlbEZvcm1hdCBz
cmNQaXhlbEZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIFBpeGVsRm9ybWF0IGRlc3RQ
aXhlbEZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3Jt
YXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNQaXhlbFszXTsKKyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAg
ICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKLSAgICAgICAgY29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoc3JjUGl4ZWxGb3JtYXQsIHNyY1BpeGVsLCBkZXN0UGl4ZWxGb3Jt
YXQsIGRlc3RQaXhlbCk7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KHNvdXJjZVBpeGVsRm9ybWF0LCBzb3VyY2VQaXhlbCwgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwg
ZGVzdGluYXRpb25QaXhlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3Jj
UGl4ZWxGb3JtYXQgPT0gZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgIGlmIChzb3VyY2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0KSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSAoc291cmNlUGl4ZWxb
MF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAo
c291cmNlUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxbM10gPSBhbHBoYTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KLSAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291cmNlUGl4ZWxbMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IChzb3VyY2VQ
aXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0g
YWxwaGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQo
UGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVs
LCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlv
blBpeGVsKQogewotICAgIGlmIChzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQpIHsK
LSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgIGlmIChzb3Vy
Y2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVsRm9ybWF0KSB7CisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2VQaXhlbClbMF07CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAg
ZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Ci0gICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxb
MV07Ci0gICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07Ci0gICAgZGVzdFBpeGVsWzNdID0g
c3JjUGl4ZWxbM107CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOwor
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICBkZXN0aW5hdGlv
blBpeGVsWzJdID0gc291cmNlUGl4ZWxbMF07CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IHNv
dXJjZVBpeGVsWzNdOwogfQogCiB0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKFBpeGVsRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgUGl4ZWxGb3JtYXQsIHVpbnQ4X3QqKT4KIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAotICAgIFBpeGVsRm9ybWF0IHNy
Y1BpeGVsRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywK
LSAgICBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgUGl4ZWxGb3Jt
YXQgc291cmNlUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90
KiBzb3VyY2VSb3dzLAorICAgIFBpeGVsRm9ybWF0IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndp
ZHRoKCkgKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKLSAg
ICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY1BpeGVsRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdFBp
eGVsRm9ybWF0LCAmZGVzdFJvd3NbeF0pOwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBj
b3B5RnVuY3Rvcihzb3VyY2VQaXhlbEZvcm1hdCwgJnNvdXJjZVJvd3NbeF0sIGRlc3RpbmF0aW9u
UGl4ZWxGb3JtYXQsICZkZXN0aW5hdGlvblJvd3NbeF0pOworICAgICAgICBzb3VyY2VSb3dzICs9
IHNvdXJjZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0aW5hdGlvblJvd3MgKz0gZGVzdGluYXRp
b25CeXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc291cmNlUGl4
ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBzb3VyY2VSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25CeXRl
c1BlclJvdywgdWludDhfdCogZGVzdGluYXRpb25Sb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAogewogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldHRpbmcgb3IgcHV0
dGluZyBwaXhlbCBkYXRhIHdpdGggZGVlcCBjb2xvciBidWZmZXJzLgotICAgIEFTU0VSVChzcmNQ
aXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc3JjUGl4ZWxGb3JtYXQgPT0gUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBBU1NFUlQoZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpSR0JBOCB8fCBkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAg
ICBBU1NFUlQoc291cmNlUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJj
ZVBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGRlc3RpbmF0aW9uUGl4ZWxG
b3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKLSAgICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0
ID09IGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZUFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3Ms
IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0
aW9uUm93cywgc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNQ
aXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgICAgICBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc291
cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlv
blBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIHNp
emUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKGRlc3RpbmF0
aW9uQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxp
ZWRUb1VucHJlbXVsdGlwbGllZD4oc291cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93
LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVy
Um93LCBkZXN0aW5hdGlvblJvd3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQ
aXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
Pihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRlc3Rp
bmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgc2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0aW5hdGlvbkFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBk
YXRhKSBjb25zdAogewotICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNyY1JlY3QpOworICAgIGF1dG8gc291cmNlUmVjdFNjYWxlZCA9IHRvQmFja2VuZENv
b3JkaW5hdGVzKHNvdXJjZVJlY3QpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBzb3VyY2VSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBp
bnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07Cisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgp
LCBzb3VyY2VSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CiAKLSAgICBpZiAoc3Jj
UmVjdFNjYWxlZC54KCkgPCAwKQotICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVk
LngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGlu
YXRpb25SZWN0LnNldFgoLXNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0
U2NhbGVkLnkoKSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgp
KTsKKyAgICBpZiAoc291cmNlUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2V0WSgtc291cmNlUmVjdFNjYWxlZC55KCkpOwogCi0gICAgaWYgKGRlc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKLSAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCku
emVyb0ZpbGwoKTsKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBzb3VyY2VSZWN0
U2NhbGVkLnNpemUoKSkKKyAgICAgICAgcGl4ZWxCdWZmZXItPmRhdGEoKS56ZXJvRmlsbCgpOwog
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgo
KTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgdW5z
aWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VSZWN0U2NhbGVkLndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5k
YXRhKCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRl
c3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBi
eXRlc1BlclJvdygpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRhdGEpICsgc291cmNlUmVjdENsaXBwZWQueSgpICogc291cmNlQnl0ZXNQZXJS
b3cgKyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAot
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1h
dCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhl
bEZvcm1hdDo6UkdCQTgsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVs
Rm9ybWF0KCksIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5h
dGlvbkFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci0+Zm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQ
ZXJSb3csIGRlc3RpbmF0aW9uUm93cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiAKLSAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0LCB2b2lkKiBkYXRhKQordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlQWxwaGFGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uUG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRp
b25BbHBoYUZvcm1hdCwgdm9pZCogZGF0YSkKIHsKLSAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRT
Y2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGF1dG8gc291cmNl
UmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworICAgIGF1dG8g
ZGVzdGluYXRpb25Qb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RpbmF0aW9u
UG9pbnQpOwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IElu
dFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAg
SW50UmVjdCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOwotICAgIGRlc3RSZWN0Lm1vdmVCeShk
ZXN0UG9pbnRTY2FsZWQpOworICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBwZWQgPSBpbnRlcnNl
Y3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkgfSwgc291cmNlUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBzb3VyY2VSZWN0Q2xpcHBl
ZDsKKyAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQpOwog
Ci0gICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKLSAgICAgICAgZGVzdFJlY3Quc2V0WChk
ZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2Fs
ZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFgoZGVzdGluYXRpb25SZWN0
LngoKSAtIHNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2NhbGVkLnko
KSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxl
ZC55KCkpOworICAgIGlmIChzb3VyY2VSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5zZXRZKGRlc3RpbmF0aW9uUmVjdC55KCkgLSBzb3VyY2VSZWN0U2NhbGVkLnko
KSk7CiAKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7Ci0gICAgc3JjUmVj
dENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRl
c1BlclJvdyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3Vy
Y2VCeXRlc1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50
OF90KiBzb3VyY2VSb3dzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RD
bGlwcGVkLnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICog
NDsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCi0gICAgICAgIGRlc3RGb3JtYXQs
IHBpeGVsRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUo
KSk7CisgICAgICAgIHNvdXJjZUFscGhhRm9ybWF0LCBwaXhlbEJ1ZmZlci5mb3JtYXQoKSwgc291
cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsCisgICAgICAgIGRlc3RpbmF0aW9uQWxwaGFGb3Jt
YXQsIHBpeGVsRm9ybWF0KCksIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93
cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OCArNDMsOCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRH
TDsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKIGNs
YXNzIE5hdGl2ZUltYWdlOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAKIGVudW0gQmFja2luZ1N0b3Jl
Q29weSB7CiAgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgpAQCAtMTA5LDggKzEwOSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVs
QnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE1NCw4ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBj
b25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRh
dGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQsIHZvaWQqIGRhdGEpOwogCiAgICAgUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BpeGVsQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw0NSBAQAogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4gUGl4ZWxCdWZmZXI6OmNvbXB1dGVCdWZmZXJTaXplKFBpeGVsRm9ybWF0IGZvcm1h
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZvcm1h
dHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUX1VOVVNFRChmb3JtYXQsIGZv
cm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JB
OCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0Owor
CisgICAgcmV0dXJuIHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIGJ5dGVzUGVyUGl4ZWw7
Cit9CisKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVj
b2RpbmcoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1h
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZGF0YUJ5dGVMZW5ndGgpCit7CisgICAg
QVNTRVJUKGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9y
bWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGNvbXB1dGVCdWZmZXJTaXplKGZvcm1hdCwgc2l6ZSku
dW5zYWZlR2V0KCkgPT0gZGF0YUJ5dGVMZW5ndGgpOworCisgICAgYXV0byBwaXhlbEFycmF5ID0g
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YUJ5dGVMZW5ndGgp
OworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4geyB7IGNvbG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgcGl4ZWxBcnJheS5yZWxlYXNl
Tm9uTnVsbCgpIH0gfTsKK30KKworT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjp0
cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZv
cm1hdHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKGZvcm1hdCA9PSBQaXhl
bEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisKKyAgICBh
dXRvIGJ1ZmZlclNpemUgPSBjb21wdXRlQnVmZmVyU2l6ZShmb3JtYXQsIHNpemUpOworICAgIGlm
IChidWZmZXJTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChidWZmZXJTaXplLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBjb2xvclNwYWNl
LCBmb3JtYXQsIHNpemUsIHBpeGVsQXJyYXkucmVsZWFzZU5vbk51bGwoKSB9IH07Cit9CisKIFBp
eGVsQnVmZmVyOjpQaXhlbEJ1ZmZlcihEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8SlNDOjpVaW50OENs
YW1wZWRBcnJheT4mJiBkYXRhKQogICAgIDogbV9jb2xvclNwYWNlIHsgY29sb3JTcGFjZSB9CiAg
ICAgLCBtX2Zvcm1hdCB7IGZvcm1hdCB9CkBAIC00Niw0ICs4Miw5IEBAIFBpeGVsQnVmZmVyIFBp
eGVsQnVmZmVyOjpkZWVwQ2xvbmUoKSBjb24KICAgICByZXR1cm4geyBtX2NvbG9yU3BhY2UsIG1f
Zm9ybWF0LCBtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCks
IG1fZGF0YS0+bGVuZ3RoKCkpIH07CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKK3sKKyAgICByZXR1cm4g
dHMgPDwgJnBpeGVsQnVmZmVyLmRhdGEoKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMyArMzAsMTkgQEAKICNpbmNsdWRlICJQaXhlbEZvcm1hdC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBQaXhlbEJ1ZmZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxCdWZmZXIpOwog
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNp
emUmKTsKKwogICAgIFBpeGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQsIGNvbnN0IEludFNpemUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJik7Ci0gICAg
flBpeGVsQnVmZmVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgflBpeGVsQnVmZmVyKCk7CiAKICAg
ICBQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CiAgICAgUGl4ZWxCdWZmZXIm
IG9wZXJhdG9yPShQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CkBAIC00OCwxMSArNTQsNjYgQEAg
cHVibGljOgogCiAgICAgUGl4ZWxCdWZmZXIgZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBkZWNvZGUo
RGVjb2RlciYpOworCiBwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gdHJ5Q3JlYXRlRm9yRGVjb2RpbmcoRGVzdGluYXRpb25Db2xvclNwYWNl
LCBQaXhlbEZvcm1hdCwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGRhdGFCeXRlTGVuZ3RoKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVy
Zmxvdz4gY29tcHV0ZUJ1ZmZlclNpemUoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNpemUmKTsKKwog
ICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CiAgICAgUGl4ZWxGb3JtYXQg
bV9mb3JtYXQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgUmVmPEpTQzo6VWludDhDbGFtcGVk
QXJyYXk+IG1fZGF0YTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBQaXhlbEJ1ZmZlciYpOworCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9kYXRhLT5ieXRlTGVuZ3RoKCkgPT0gKG1fc2l6ZS5h
cmVhKCkudW5zYWZlR2V0KCkgKiA0KSk7CisKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsK
KyAgICBlbmNvZGVyIDw8IG1fZm9ybWF0OworICAgIGVuY29kZXIgPDwgbV9zaXplOworICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVM
ZW5ndGgoKSwgMSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgRGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShj
b2xvclNwYWNlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFBpeGVsRm9y
bWF0IGZvcm1hdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZvcm1hdCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBub24tOCBiaXQgZm9y
bWF0cy4KKyAgICBpZiAoIShmb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6QkdSQTgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgSW50U2l6ZSBzaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGNvbXB1dGVkQnVmZmVyU2l6ZSA9IFBp
eGVsQnVmZmVyOjpjb21wdXRlQnVmZmVyU2l6ZShmb3JtYXQsIHNpemUpOworICAgIGlmIChjb21w
dXRlZEJ1ZmZlclNpemUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgYXV0byBidWZmZXJTaXplID0gY29tcHV0ZWRCdWZmZXJTaXplLnVuc2FmZUdl
dCgpOworICAgIGlmICghZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250
YWluPHVpbnQ4X3Q+KGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgYXV0byByZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcoY29s
b3JTcGFjZSwgZm9ybWF0LCBzaXplLCBidWZmZXJTaXplKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhl
ZExlbmd0aERhdGEocmVzdWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0LT5tX2RhdGEtPmJ5dGVM
ZW5ndGgoKSwgMSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC05MDQsMTIgKzkwNCwx
MiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsK
LSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJE
YXRhID0gbGF5ZXJJbWFnZS5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCkuZGF0YSgpLCBi
bHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXll
ckRhdGEsIGJsdXJSZWN0KTsKKyAgICBsYXllckltYWdlLnB1dFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwog
fQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTEFOR0xFVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlICJUZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAg
LTc3LDExICs3NywxMSBAQCBzdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhp
CiB9CiAjZW5kaWYKIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKIHsKLSAgICBh
dXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICBTY29wZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tBbGlnbm1lbnQoR0xfUEFDS19B
TElHTk1FTlQpOwogICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkKICAgICAgICAgcGFja0FsaWdu
bWVudC5waXhlbFN0b3JlKDQpOwpAQCAtOTAsMTYgKzkwLDE2IEBAIFJlZlB0cjxJbWFnZURhdGE+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICBTY29wZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tT
a2lwUGl4ZWxzKEdMX1BBQ0tfU0tJUF9QSVhFTFMsIDAsIG1faXNGb3JXZWJHTDIpOwogICAgIFNj
b3BlZEJ1ZmZlckJpbmRpbmcgc2NvcGVkUGl4ZWxQYWNrQnVmZmVyUmVzZXQoR0xfUElYRUxfUEFD
S19CVUZGRVIsIDAsIG1faXNGb3JXZWJHTDIpOwogCi0gICAgZ2w6OlJlYWRuUGl4ZWxzUm9idXN0
QU5HTEUoMCwgMCwgaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCksIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CisgICAg
Z2w6OlJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoMCwgMCwgcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0
aCgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwg
bnVsbHB0ciwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogICAgIC8vIEZJWE1FOiBSZW5k
ZXJpbmcgdG8gR0xfUkdCIHRleHR1cmVzIHdpdGggYSBJT1N1cmZhY2UgYm91bmQgdG8gdGhlIHRl
eHR1cmUgaW1hZ2UgbGVhdmVzCiAgICAgLy8gdGhlIGFscGhhIGluIHRoZSBJT1N1cmZhY2UgaW4g
aW5jb3JyZWN0IHN0YXRlLiBBbHNvIEFOR0xFIGdsOjpSZWFkUGl4ZWxzIHdpbGwgaW4gc29tZQog
ICAgIC8vIGNhc2VzIGV4cG9zZSB0aGUgbm9uLTI1NSB2YWx1ZXMuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTgwNAogI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGEpCi0gICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGltYWdlRGF0YS0+d2lkdGgo
KSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpKTsKKyAgICAg
ICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMocGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgp
LCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLmhlaWdodCgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEo
KSk7CiAjZW5kaWYKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZl
cjsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVz
KCkKQEAgLTUwOCw3ICs1MDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVw
YXJlVGV4CiAjZW5kaWYKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3Bl
ZFJlc3RvcmVSZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwg
bV9zdGF0ZS5ib3VuZFJlYWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlh
bGlhcykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0R0xDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEdMQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAj
aW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC0xMDYsMTUgKzEwNiwxNSBAQCBib29sIEdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywgUmVmPEltYWdlRGF0YT4m
JiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29u
c3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywg
UGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIEFTU0VSVCghaW1hZ2VEYXRhLT5zaXplKCku
aXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIXBpeGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5KCkpOwog
ICAgIGlmIChjYW52YXNTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
Q29udmVydCBSR0JBIHRvIEJHUkEuIEJHUkEgaXMgQ0FJUk9fRk9STUFUX0FSR0IzMiBvbiBsaXR0
bGUtZW5kaWFuIGFyY2hpdGVjdHVyZXMuCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURh
dGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCk7Ci0gICAgdWludDhfdCogcGl4ZWxzID0gaW1hZ2VEYXRh
LT5kYXRhKCkuZGF0YSgpOworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gcGl4ZWxCdWZmZXIuZGF0
YSgpLmJ5dGVMZW5ndGgoKTsKKyAgICB1aW50OF90KiBwaXhlbHMgPSBwaXhlbEJ1ZmZlci5kYXRh
KCkuZGF0YSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0
KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKIApAQCAtMTI2
LDEwICsxMjYsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0Nhbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZURhdGEtPnNpemUo
KTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLnNpemUoKTsKIAogICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCks
IENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSwgaW1hZ2VEYXRhLT53aWR0aCgpICogNCkpOworICAgICAgICBwaXhlbEJ1ZmZlci5kYXRh
KCkuZGF0YSgpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VT
aXplLmhlaWdodCgpLCBpbWFnZVNpemUud2lkdGgoKSAqIDQpKTsKIAogICAgIGF1dG8gaW1hZ2Ug
PSBOYXRpdmVJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2VTdXJmYWNlKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24g
Mjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIK
LSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1
ZGUgPGNhaXJvLmg+CiAKICNpZiBVU0UoQ0FJUk8pCkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCCiAgICAgcmV0dXJuIGltYWdlRGF0
YTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNS
ZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdl
RGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQogewotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlu
cHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1fc3VyZmFjZS5nZXQoKSkpOwogCiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNr
ZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CiAgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0g
dG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAgICAgUmVm
UHRyPE5hdGl2ZUltYWdlPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7
CiAKIHByb3RlY3RlZDoKICAgICBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3Qg
UGFyYW1ldGVycyYsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0R0xDRy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiAjaWYgSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMTkVPTi5oIgpA
QCAtNTA2LDkgKzUwNiw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6
ZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNv
bnRleHRBdHRyaWJ1dGVzLCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6
ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7
Ci0gICAgQVNTRVJUKCFpbWFnZURhdGEtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCgh
cGl4ZWxCdWZmZXIuc2l6ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gSW5wdXQgaXMgR0xfUkdCQSA9PSBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGEqTGFzdC4KQEAgLTUyMSwxNiArNTIxLDE4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW4KICAgICBlbHNlCiAg
ICAgICAgIGJpdG1hcEluZm8gfD0ga0NHSW1hZ2VBbHBoYUxhc3Q7CiAKLSAgICBhdXRvIGltYWdl
U2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwotICAgIGludCByb3dCeXRlcyA9IGltYWdlU2l6ZS53
aWR0aCgpICogNDsKLSAgICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5o
ZWlnaHQoKTsKLSAgICB1aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRh
dGEoKTsKLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGltYWdlUGl4ZWxzLCBkYXRh
U2l6ZSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3Jl
YXRlV2l0aERhdGEoJmltYWdlRGF0YS5sZWFrUmVmKCksIGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSwg
W10gKHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKLSAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxJbWFnZURhdGEqPihjb250ZXh0KS0+ZGVyZWYoKTsKKyAgICBhdXRvIHBpeGVs
QXJyYXkgPSBtYWtlUmVmKHBpeGVsQnVmZmVyLmRhdGEoKSk7CisgICAgYXV0byBkYXRhU2l6ZSA9
IHBpeGVsQXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICBhdXRvIGRhdGEgPSBwaXhlbEFycmF5LT5k
YXRhKCk7CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIGRhdGFTaXpl
KTsKKworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhEYXRhKCZwaXhlbEFycmF5LmxlYWtSZWYoKSwgZGF0YSwgZGF0YVNpemUsIFtdICh2b2lk
KiBjb250ZXh0LCBjb25zdCB2b2lkKiwgc2l6ZV90KSB7CisgICAgICAgIHN0YXRpY19jYXN0PEpT
Qzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICB9KSk7CiAKLSAg
ICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShhZG9wdENGKENHSW1hZ2VDcmVhdGUo
aW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHJvd0J5dGVzLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSkpOworICAgIGF1dG8gaW1hZ2VTaXplID0g
cGl4ZWxCdWZmZXIuc2l6ZSgpOworICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRl
KGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdo
dCgpLCA4LCAzMiwgNCAqIGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9yU3BhY2UocGl4
ZWxCdWZmZXIuY29sb3JTcGFjZSgpKSwgYml0bWFwSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAw
LCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpKTsKIAogICAgIC8vIENTUyBzdHls
aW5nIG1heSBjYXVzZSB0aGUgY2FudmFzJ3MgY29udGVudCB0byBiZSByZXNpemVkIG9uCiAgICAg
Ly8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0IHRoZSBjb3Jy
ZWN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC0xODcsMjQgKzE4NiwyNSBAQCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuCiAKICAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKICAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAg
ICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkK
KyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIXBp
eGVsQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXV0byYg
cGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwotICAgICAgICBhdXRvIGRhdGFTaXplID0g
cGl4ZWxBcnJheS5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBpbWFnZURhdGEtPnNpemUoKTsKKyAgICAgICAgYXV0byBwaXhlbEFycmF5ID0gbWFrZVJl
ZihwaXhlbEJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJy
YXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgYXV0byBkYXRhID0gcGl4ZWxBcnJheS0+ZGF0YSgp
OwogCi0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocGl4ZWxBcnJheS5kYXRh
KCksIGRhdGFTaXplKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRh
LCBkYXRhU2l6ZSk7CiAKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoaW1hZ2VEYXRhLmxlYWtSZWYoKSwgcGl4ZWxBcnJheS5k
YXRhKCksIGRhdGFTaXplLCBbXSAodm9pZCogY29udGV4dCwgY29uc3Qgdm9pZCosIHNpemVfdCkg
ewotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxJbWFnZURhdGEqPihjb250ZXh0KS0+ZGVy
ZWYoKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEoJnBpeGVsQXJyYXkubGVha1JlZigpLCBkYXRhLCBkYXRhU2l6ZSwgW10g
KHZvaWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICAg
ICAgfSkpOwogICAgICAgICAKICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGltZW5zaW9ucy5oZWln
aHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBzUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVT
a2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50
RGVmYXVsdCkpOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IHBpeGVsQnVmZmVyLT5zaXplKCk7
CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgp
LCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCA0ICogaW1hZ2VTaXplLndpZHRoKCksIGNhY2hl
ZENHQ29sb3JTcGFjZShwaXhlbEJ1ZmZlci0+Y29sb3JTcGFjZSgpKSwga0NHQml0bWFwQnl0ZU9y
ZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQo
KSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKICAgICB9IGVsc2UgaWYg
KHJlc29sdXRpb25TY2FsZSgpID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKSB7CiAgICAgICAgIGF1dG8gbmF0aXZlSW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghbmF0aXZlSW1hZ2UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTksMTQg
KzE1OSwxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlCiAgICAg
cmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOwogfQogCi1SZWZQ
dHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2RhdGEpOworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3Jj
UmVjdCwgbV9kYXRhKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKIHsKLSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdl
RGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3Jt
YXQsIG1fZGF0YSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1
dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9k
YXRhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3Jp
Z2luQXRVcHBlckxlZnRDb3JuZXIgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKICNpZiBIQVZFKElPU1VSRkFDRSkKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3Jl
R3JhcGhpY3MuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0xNjgsMTEgKzE2OCwxMSBAQCB2b2lk
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvCiAKIFJldGFpblB0cjxDRkRhdGFS
ZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdAogewotICAgIGlmIChtX3JlcXVpcmVzRHJhd0FmdGVyUHV0
SW1hZ2VEYXRhKSB7CisgICAgaWYgKG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlcikg
ewogICAgICAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdl
LgogICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCiAgICAgICAgIGNv
bnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotICAgICAgICBtX3JlcXVp
cmVzRHJhd0FmdGVyUHV0SW1hZ2VEYXRhID0gZmFsc2U7CisgICAgICAgIG1fcmVxdWlyZXNEcmF3
QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwogfQpAQCAtMTgzLDE3ICsxODMsMTcgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFjawogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEo
bG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0CiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKLSAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3Vy
ZmFjZUJhc2VBZGRyZXNzKCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lk
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7CiAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9j
aygqbV9zdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsK
LSAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VE
YXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRy
ZXNzKCkpOwotICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgPSB0cnVlOworICAg
IEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVm
ZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIGxvY2suc3VyZmFjZUJhc2VBZGRy
ZXNzKCkpOworICAgIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRQaXhlbEJ1ZmZlciA9IHRydWU7CiB9
CiAKIElPU3VyZmFjZSogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzdXJmYWNlKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAKICAg
ICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYsIHN0ZDo6dW5p
cXVlX3B0cjxJT1N1cmZhY2U+JiYpOwogCisgICAgSU9TdXJmYWNlKiBzdXJmYWNlKCk7CisKICAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGZs
dXNoQ29udGV4dCgpIG92ZXJyaWRlOwogCkBAIC02MSw5ICs2Myw4IEBAIHB1YmxpYzoKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7Ci0gICAgSU9TdXJm
YWNlKiBzdXJmYWNlKCk7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzSW5Vc2UoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2b2lkIHJlbGVhc2VHcmFwaGljc0NvbnRleHQoKSBvdmVycmlkZTsKQEAgLTc4LDcgKzc5
LDcgQEAgcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgbXV0
YWJsZSBib29sIG1fcmVxdWlyZXNEcmF3QWZ0ZXJQdXRJbWFnZURhdGEgeyBmYWxzZSB9OworICAg
IG11dGFibGUgYm9vbCBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgeyBmYWxzZSB9
OwogCiAgICAgbXV0YWJsZSBib29sIG1fbmVlZHNTZXR1cENvbnRleHQgeyBmYWxzZSB9OwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2lmIFVTRShDRykKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CkBAIC0xMTgsNyArMTE4LDcgQEAgYm9v
bCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cgogICAgIHJldHVybiBDR0ltYWdl
RGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiB9CiAKLXN0YXRpYyBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3N0YXRpYyBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgUGl4ZWxCdWZmZXImIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQogewogICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOwogCkBAIC0xMjYsMTggKzEyNiwyMCBAQCBzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJl
Zj4gY2ZEYXRhKGNvbnN0CiAgICAgQVNTRVJUKHV0aSk7CiAKICAgICBDR0ltYWdlQWxwaGFJbmZv
IGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBjaGFyKiBk
YXRhID0gc291cmNlLmRhdGEoKS5kYXRhKCk7CisgICAgCisgICAgYXV0byBkYXRhID0gc291cmNl
LmRhdGEoKS5kYXRhKCk7CisgICAgYXV0byBkYXRhU2l6ZSA9IHNvdXJjZS5kYXRhKCkuYnl0ZUxl
bmd0aCgpOworCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwogCiAgICAg
aWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRv
bid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3Np
dGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lk
dGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50
cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGRhdGFTaXplKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHByZW11
bHRpcGxpZWREYXRhLmdyb3coZGF0YVNpemUpOwogICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWZm
ZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0
YVNpemU7IGkgKz0gNCkgewogICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAz
XTsKICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKICAgICAgICAgICAgICAgICBidWZm
ZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKQEAgLTE1NCwxMiArMTU2LDE0
IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QKICAgICAgICAgZGF0
YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKICAgICB9CiAKLSAgICB2ZXJpZnlJbWFnZUJ1
ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQo
KSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAw
KSk7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBkYXRhU2l6ZSk7CisK
KyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YShudWxscHRyLCBkYXRhLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwogICAgIGlmICghZGF0YVBy
b3ZpZGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaW1hZ2UgPSBhZG9w
dENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIs
IDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9y
ZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2Us
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IHNvdXJj
ZS5zaXplKCk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCAzMiwgNCAqIGltYWdlU2l6ZS53aWR0
aCgpLCBjYWNoZWRDR0NvbG9yU3BhY2Uoc291cmNlLmNvbG9yU3BhY2UoKSksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CiAKICAgICBhdXRvIGNmRGF0YSA9IGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CiAgICAg
aWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEu
Z2V0KCkpKQpAQCAtMTc2LDcgKzE4MCw3IEBAIFN0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRh
LCBjb25zdCBTdHIKICAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiAr
IGJhc2U2NERhdGE7CiB9CiAKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCitTdHJp
bmcgZGF0YVVSTChjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7CiAgICAgaWYgKGF1dG8gZGF0YSA9IGNm
RGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKICAgICAgICAgcmV0dXJuIGRhdGFVUkwo
ZGF0YS5nZXQoKSwgbWltZVR5cGUpOwpAQCAtMTkwLDcgKzE5NCw3IEBAIFZlY3Rvcjx1aW50OF90
PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkQKICAgICByZXR1cm4gZGF0YTsKIH0KIAotVmVjdG9y
PHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNv
bnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkKIHsKICAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwg
bWltZVR5cGUsIHF1YWxpdHkpKQogICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogCiBXRUJDT1JFX0VYUE9S
VCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVy
LCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQCBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlCiBib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYs
IENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRh
UmVmKTsKIAogU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CitTdHJpbmcgZGF0YVVSTChjb25zdCBQaXhl
bEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSk7CiAKIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7Ci1WZWN0b3I8dWlu
dDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgUGl4ZWxC
dWZmZXImLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xDb2NvYS5tbQkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjYxLDEzICs2NjEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZUZvcgogICAgIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIH0KIAot
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVk
UmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgYXV0byYgZGlzcGxheUJ1ZmZlciA9IG1f
c3dhcENoYWluLT5kaXNwbGF5QnVmZmVyKCk7CiAgICAgaWYgKCFkaXNwbGF5QnVmZmVyLnN1cmZh
Y2UgfHwgIWRpc3BsYXlCdWZmZXIuaGFuZGxlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoZGlzcGxheUJ1ZmZlci5zdXJmYWNl
LT5zaXplKCkgIT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gTm90ZTogV2Ug
YXJlIHVzaW5nIEdMIHRvIHJlYWQgdGhlIElPU3VyZmFjZS4gQXQgdGhlIHRpbWUgb2Ygd3JpdGlu
ZywgdGhlcmUgYXJlIG5vIGNvbnZpbmllbnQKICAgICAvLyBmdW5jdGlvbnMgdG8gY29udmVydCB0
aGUgSU9TdXJmYWNlIHBpeGVsIGRhdGEgdG8gSW1hZ2VEYXRhLiBUaGUgaW1hZ2UgZGF0YSBlbmRz
IHVwIGJlaW5nCiAgICAgLy8gZHJhd24gdG8gYSBJbWFnZUJ1ZmZlciwgYnV0IGF0IHRoZSB0aW1l
IHRoZXJlJ3Mgbm8gZnVuY3Rpb25zIHRvIGNvbnN0cnVjdCBhIE5hdGl2ZUltYWdlCkBAIC02Nzgs
NyArNjc4LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuRwogICAg
IFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5nQnVmZmVy
VGV4dHVyZVRhcmdldFF1ZXJ5KCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVY
VFVSRV9SRUNUQU5HTEVfQVJCKTsKICAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwg
dGV4dHVyZSk7CiAgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxheU9iaiwgZGlzcGxh
eUJ1ZmZlci5oYW5kbGUsIEVHTF9CQUNLX0JVRkZFUikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRl
eHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAgICBTY29w
ZWRGcmFtZWJ1ZmZlciBmYm87CiAgICAgU2NvcGVkUmVzdG9yZVJlYWRGcmFtZWJ1ZmZlckJpbmRp
bmcgZmJvQmluZGluZyhtX2lzRm9yV2ViR0wyLCBtX3N0YXRlLmJvdW5kUmVhZEZCTywgZmJvKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUJsZW5kTkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5F
T04uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKIAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGFybV9uZW9uLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiwzMyArMTEyLDM0IEBAIHZvaWQgRkVCbGVuZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAotICAgIGF1dG8q
IGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgYXV0
byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51
bGxwdHI7Ci0gICAgaWYgKCFkc3RQaXhlbEFycmF5KQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgZWZm
ZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QSA9IGluLT5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgSW50UmVj
dCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
Mi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5QiA9IGluMi0+
cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIEludFJlY3QgZWZm
ZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKIAotICAgIHVuc2lnbmVkIHBp
eGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5QS0+bGVuZ3RoKCk7Ci0gICAgQVNTRVJUKHBp
eGVsQXJyYXlMZW5ndGggPT0gc3JjUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKKyAgICBJbnRSZWN0
IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUIgPSBp
bjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKIAotICAgIGlmIChw
aXhlbEFycmF5TGVuZ3RoID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oc3JjUGl4
ZWxBcnJheUEtPmRhdGEoKSwgc3JjUGl4ZWxBcnJheUItPmRhdGEoKSwgZHN0UGl4ZWxBcnJheS0+
ZGF0YSgpLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VQaXhlbEFycmF5
TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOworICAgIEFTU0VSVChwaXhlbEFy
cmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7CisKKyAgICBpZiAoc291
cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CisgICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNv
dXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdlIGV4
cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPiAwKTsKKyAgICBB
U1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwogICAgIHVpbnQzMl90IHNvdXJjZUFb
Ml0gPSB7MCwgMH07CiAgICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7MCwgMH07CiAK
LSAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1BpeGVsQXJy
YXlBLT5kYXRhKCkpWzBdOwotICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KHNyY1BpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOworICAgIHNvdXJjZUFbMF0g
PSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUEtPmRhdGEoKSlb
MF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4o
c291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSlbMF07CiAgICAgcGxhdGZvcm1BcHBseU5FT04ocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFu
ZERlc3QpLCA4KTsKLSAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZHN0UGl4ZWxBcnJh
eS0+ZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmRE
ZXN0WzBdOwogfQogCiB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNo
YXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWdu
ZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDEwICsyOTgs
MTAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbQogICAgICAgICBy
ZXR1cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4oaXRl
bS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyPigpKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXI6CiAgICAgICAgIHJldHVy
biBhcHBlbmQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPihpdGVtLmdldDxNZXRhQ29tbWFu
ZENoYW5nZUl0ZW1CdWZmZXI+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToK
LSAgICAgICAgcmV0dXJuIGFwcGVuZDxHZXRJbWFnZURhdGE+KGl0ZW0uZ2V0PEdldEltYWdlRGF0
YT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4g
YXBwZW5kPFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxHZXRQaXhl
bEJ1ZmZlcj4oaXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dFBpeGVsQnVmZmVyPihp
dGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2Ug
SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxQYWlu
dEZyYW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgsOCBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgY2FzZSBJdGVt
VHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyOgogICAgIGNhc2Ug
SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJ
bWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgY2FzZSBJ
dGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CiAgICAgICAgIC8vIFNob3VsZCBhbHJlYWR5IGJlIGhh
bmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjgwLDExICsyODAsMTEgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0
cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxG
aWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxHZXRJbWFnZURhdGE+Ojp2YWx1ZSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEdldFBpeGVsQnVmZmVyPjo6dmFsdWUpOwogICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBn
ZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQ
dXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgZ2V0PFB1dFBpeGVsQnVmZmVyPigpLn5QdXRQaXhlbEJ1
ZmZlcigpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6
CiAgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKQEAgLTUwNCwxMCAr
NTA0LDEwIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbUhhbmRsZSBkZXMKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1
cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gY29weUludG88R2V0SW1h
Z2VEYXRhPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VE
YXRhOgotICAgICAgICByZXR1cm4gY29weUludG88UHV0SW1hZ2VEYXRhPihpdGVtT2Zmc2V0LCAq
dGhpcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHJldHVy
biBjb3B5SW50bzxHZXRQaXhlbEJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOworICAgIGNhc2Ug
SXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88UHV0UGl4
ZWxCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVEYXNoPihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHN0YXRpYyBzaXplX3Qg
c2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUKICAgICAgICAgcmV0dXJuIHNpemVvZihNZXRhQ29t
bWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXIpOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1l
dGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihNZXRhQ29t
bWFuZENoYW5nZUl0ZW1CdWZmZXIpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YToK
LSAgICAgICAgcmV0dXJuIHNpemVvZihHZXRJbWFnZURhdGEpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihQdXRJbWFnZURhdGEpOworICAg
IGNhc2UgSXRlbVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdl
dFBpeGVsQnVmZmVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihQdXRQaXhlbEJ1ZmZlcik7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICAgICAgICAgcmV0dXJuIHNpemVv
ZihQYWludEZyYW1lRm9yTWVkaWEpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgaXNEcmF3aW5n
SXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgorICAgIGNhc2UgSXRlbVR5
cGU6OkdldFBpeGVsQnVmZmVyOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJdGVt
VHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJl
Y3Q6CkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUp
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YToKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICBjYXNlIEl0
ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNl
OgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZUlubGluZVBhdGg6CkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5
cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAg
IGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVEYXNoOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVBhdGg6CkBAIC0zNTEsNyArMzUxLDcgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5
cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZUxpbmU6CiAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgIGNhc2Ug
SXRlbVR5cGU6OkdldEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZl
cjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCShyZXZpc2lvbiAy
NzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4IEBAIGVu
dW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGbHVzaENvbnRleHQsCiAgICAgTWV0
YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyLAogICAgIE1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlciwKLSAgICBHZXRJbWFnZURhdGEsCi0gICAgUHV0SW1hZ2VEYXRhLAorICAg
IEdldFBpeGVsQnVmZmVyLAorICAgIFB1dFBpeGVsQnVmZmVyLAogI2lmIEVOQUJMRShWSURFTykK
ICAgICBQYWludEZyYW1lRm9yTWVkaWEsCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIu
aCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0j
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC03
NjksMzUgKzc2OCw2MCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
CiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgR2V0SW1hZ2VEYXRhJiBpdGVtKQorc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdldFBpeGVsQnVmZmVyJiBpdGVtKQog
ewogICAgIHRzLmR1bXBQcm9wZXJ0eSgib3V0cHV0Rm9ybWF0IiwgaXRlbS5vdXRwdXRGb3JtYXQo
KSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwogICAg
IHJldHVybiB0czsKIH0KIAotUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKICAgICA6IG1fc3JjUmVjdChz
cmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQotICAgICwgbV9pbWFnZURhdGEo
aW1hZ2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQg
dG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KKyAgICAsIG1fcGl4
ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpIC8vIFRoaXMgY29weSBpcyBhY3R1YWxs
eSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNzIG9mIHB1dFBpeGVsQnVmZmVyKCku
CiAgICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQogICAgICwgbV9kZXN0Rm9ybWF0KGRl
c3RGb3JtYXQpCiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXImJiBwaXhlbEJ1
ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogICAgIDogbV9zcmNSZWN0KHNyY1Jl
Y3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCi0gICAgLCBtX2ltYWdlRGF0YShXVEZN
b3ZlKGltYWdlRGF0YSkpCisgICAgLCBtX3BpeGVsQnVmZmVyKFdURk1vdmUocGl4ZWxCdWZmZXIp
KQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZvcm1hdChk
ZXN0Rm9ybWF0KQogewogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQorUHV0UGl4ZWxCdWZmZXI6OlB1dFBp
eGVsQnVmZmVyKGNvbnN0IFB1dFBpeGVsQnVmZmVyJiBvdGhlcikKKyAgICA6IG1fc3JjUmVjdChv
dGhlci5tX3NyY1JlY3QpCisgICAgLCBtX2Rlc3RQb2ludChvdGhlci5tX2Rlc3RQb2ludCkKKyAg
ICAsIG1fcGl4ZWxCdWZmZXIob3RoZXIubV9waXhlbEJ1ZmZlci5kZWVwQ2xvbmUoKSkKKyAgICAs
IG1faW5wdXRGb3JtYXQob3RoZXIubV9pbnB1dEZvcm1hdCkKKyAgICAsIG1fZGVzdEZvcm1hdChv
dGhlci5tX2Rlc3RGb3JtYXQpCit7Cit9CisKK1B1dFBpeGVsQnVmZmVyJiBQdXRQaXhlbEJ1ZmZl
cjo6b3BlcmF0b3I9KGNvbnN0IFB1dFBpeGVsQnVmZmVyJiBvdGhlcikKK3sKKyAgICBQdXRQaXhl
bEJ1ZmZlciBjb3B5IHsgb3RoZXIgfTsKKyAgICBzd2FwKGNvcHkpOworICAgIHJldHVybiAqdGhp
czsKK30KKwordm9pZCBQdXRQaXhlbEJ1ZmZlcjo6c3dhcChQdXRQaXhlbEJ1ZmZlciYgb3RoZXIp
Cit7CisgICAgc3RkOjpzd2FwKG1fc3JjUmVjdCwgb3RoZXIubV9zcmNSZWN0KTsKKyAgICBzdGQ6
OnN3YXAobV9kZXN0UG9pbnQsIG90aGVyLm1fZGVzdFBvaW50KTsKKyAgICBzdGQ6OnN3YXAobV9w
aXhlbEJ1ZmZlciwgb3RoZXIubV9waXhlbEJ1ZmZlcik7CisgICAgc3RkOjpzd2FwKG1faW5wdXRG
b3JtYXQsIG90aGVyLm1faW5wdXRGb3JtYXQpOworICAgIHN0ZDo6c3dhcChtX2Rlc3RGb3JtYXQs
IG90aGVyLm1fZGVzdEZvcm1hdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRQaXhlbEJ1ZmZlciYgaXRlbSkKIHsKICAgICB0cy5k
dW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUoKSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJwaXhlbEJ1ZmZlclNpemUiLCBpdGVtLnBpeGVsQnVmZmVyKCku
c2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1JlY3QoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0UG9pbnQiLCBpdGVtLmRlc3RQb2ludCgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImRlc3RGb3JtYXQiLCBpdGVtLmRlc3RGb3JtYXQoKSk7CkBAIC0x
MDY0LDggKzEwODgsOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OiB0cyA8PCAiZmx1c2gtY29udGV4dCI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25J
bWFnZUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29tbWFuZC1jaGFuZ2UtZGVzdGluYXRpb24taW1hZ2Ut
YnVmZmVyIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVt
QnVmZmVyOiB0cyA8PCAibWV0YS1jb21tYW5kLWNoYW5nZS1pdGVtLWJ1ZmZlciI7IGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0YTogdHMgPDwgImdldC1pbWFnZS1kYXRhIjsg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB0cyA8PCAicHV0LWltYWdl
LWRhdGEiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjogdHMgPDwg
ImdldC1waXhlbC1idWZmZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1
ZmZlcjogdHMgPDwgInB1dC1waXhlbC1idWZmZXIiOyBicmVhazsKICNpZiBFTkFCTEUoVklERU8p
CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB0cyA8PCAicGFpbnQtZnJh
bWUtZm9yLW1lZGlhIjsgYnJlYWs7CiAjZW5kaWYKQEAgLTEyMzEsMTEgKzEyNTUsMTEgQEAgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSQogICAgIGNhc2UgSXRlbVR5cGU6
Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8TWV0
YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldEltYWdlRGF0
YT4oKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8R2V0UGl4ZWxCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1hZ2VEYXRh
PigpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOgorICAgICAgICB0cyA8PCBp
dGVtLmdldDxQdXRQaXhlbEJ1ZmZlcj4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFZJ
REVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllcklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNp
bmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC00OSw3ICs0OSw2IEBAIGNsYXNzIFRleHRTdHJl
YW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgTWVk
aWFQbGF5ZXI7CiBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CiAKQEAgLTE5MDAsMTMgKzE4
OTksMTMgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotY2xhc3MgR2V0
SW1hZ2VEYXRhIHsKK2NsYXNzIEdldFBpeGVsQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkdldEltYWdlRGF0YTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkdldFBpeGVs
QnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBH
ZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpCisgICAgR2V0UGl4ZWxCdWZmZXIoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNyY1JlY3QpCiAgICAgICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgICAg
ICwgbV9vdXRwdXRGb3JtYXQob3V0cHV0Rm9ybWF0KQogICAgIHsKQEAgLTE5MjAsMTcgKzE5MTks
MjQgQEAgcHJpdmF0ZToKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fb3V0cHV0Rm9ybWF0
OwogfTsKIAotY2xhc3MgUHV0SW1hZ2VEYXRhIHsKK2NsYXNzIFB1dFBpeGVsQnVmZmVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlB1dEltYWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVyOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUHV0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUGl4ZWxCdWZmZXImJiwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKworICAgIFB1dFBpeGVsQnVmZmVyKGNvbnN0IFB1
dFBpeGVsQnVmZmVyJik7CisgICAgUHV0UGl4ZWxCdWZmZXIoUHV0UGl4ZWxCdWZmZXImJikgPSBk
ZWZhdWx0OworICAgIFB1dFBpeGVsQnVmZmVyJiBvcGVyYXRvcj0oY29uc3QgUHV0UGl4ZWxCdWZm
ZXImKTsKKyAgICBQdXRQaXhlbEJ1ZmZlciYgb3BlcmF0b3I9KFB1dFBpeGVsQnVmZmVyJiYpID0g
ZGVmYXVsdDsKKworICAgIHZvaWQgc3dhcChQdXRQaXhlbEJ1ZmZlciYpOwogCiAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3Jt
YXQ7IH0KLSAgICBJbWFnZURhdGEmIGltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuICptX2ltYWdl
RGF0YTsgfQorICAgIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcGl4ZWxCdWZmZXI7IH0KICAgICBJbnRSZWN0IHNyY1JlY3QoKSBjb25zdCB7IHJldHVy
biBtX3NyY1JlY3Q7IH0KICAgICBJbnRQb2ludCBkZXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBt
X2Rlc3RQb2ludDsgfQogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdEZvcm1hdDsgfQpAQCAtMTkzOSwzMSArMTk0NSwzMSBAQCBwdWJs
aWM6CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biB7eyBtX2Rlc3RQb2ludCwgbV9zcmNSZWN0LnNpemUoKSB9fTsgfQogCiAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdXRJbWFnZURhdGE+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1dFBp
eGVsQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgogICAgIEludFJlY3QgbV9z
cmNSZWN0OwogICAgIEludFBvaW50IG1fZGVzdFBvaW50OwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IG1faW1hZ2VEYXRhOworICAgIFBpeGVsQnVmZmVyIG1fcGl4ZWxCdWZmZXI7CiAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBtX2lucHV0Rm9ybWF0OwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gbV9kZXN0Rm9ybWF0OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgUHV0
SW1hZ2VEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3ZvaWQgUHV0UGl4ZWxC
dWZmZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwg
bV9pbnB1dEZvcm1hdDsKLSAgICBlbmNvZGVyIDw8IG1ha2VSZWYoKm1faW1hZ2VEYXRhKTsKKyAg
ICBlbmNvZGVyIDw8IG1fcGl4ZWxCdWZmZXI7CiAgICAgZW5jb2RlciA8PCBtX3NyY1JlY3Q7CiAg
ICAgZW5jb2RlciA8PCBtX2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdEZvcm1hdDsK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0
SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFB1dFBpeGVsQnVm
ZmVyPiBQdXRQaXhlbEJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0
aW9uYWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gaW5wdXRGb3JtYXQ7Ci0gICAgT3B0aW9uYWw8
UmVmPEltYWdlRGF0YT4+IGltYWdlRGF0YTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcGl4
ZWxCdWZmZXI7CiAgICAgT3B0aW9uYWw8SW50UmVjdD4gc3JjUmVjdDsKICAgICBPcHRpb25hbDxJ
bnRQb2ludD4gZGVzdFBvaW50OwogICAgIE9wdGlvbmFsPEFscGhhUHJlbXVsdGlwbGljYXRpb24+
IGRlc3RGb3JtYXQ7CkBAIC0xOTcyLDggKzE5NzgsOCBAQCBPcHRpb25hbDxQdXRJbWFnZURhdGE+
IFB1dEltYWdlRGF0YTo6ZGVjCiAgICAgaWYgKCFpbnB1dEZvcm1hdCkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGRlY29kZXIgPj4gaW1hZ2VEYXRhOwotICAgIGlmICghaW1h
Z2VEYXRhKQorICAgIGRlY29kZXIgPj4gcGl4ZWxCdWZmZXI7CisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGRlY29kZXIgPj4gc3JjUmVj
dDsKQEAgLTE5ODgsNyArMTk5NCw3IEBAIE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VE
YXRhOjpkZWMKICAgICBpZiAoIWRlc3RGb3JtYXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAq
c3JjUmVjdCwgKmRlc3RQb2ludCwgKmRlc3RGb3JtYXQgfX07CisgICAgcmV0dXJuIHt7ICppbnB1
dEZvcm1hdCwgV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCAqc3JjUmVjdCwgKmRlc3RQb2ludCwgKmRl
c3RGb3JtYXQgfX07CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMzE3LDEwICsyMzIzLDEw
IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IFZhcmlhbnQKICAgICAsIEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlCiAgICAgLCBGaWxsUm91bmRlZFJlY3QKICAgICAsIEZsdXNoQ29udGV4dAotICAg
ICwgR2V0SW1hZ2VEYXRhCisgICAgLCBHZXRQaXhlbEJ1ZmZlcgogICAgICwgTWV0YUNvbW1hbmRD
aGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyCiAgICAgLCBNZXRhQ29tbWFuZENoYW5nZUl0ZW1C
dWZmZXIKLSAgICAsIFB1dEltYWdlRGF0YQorICAgICwgUHV0UGl4ZWxCdWZmZXIKICAgICAsIFJl
c3RvcmUKICAgICAsIFJvdGF0ZQogICAgICwgU2F2ZQpAQCAtMjQxOSw4ICsyNDI1LDggQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaQogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6Rmx1c2hDb250ZXh0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbkltYWdlQnVmZmVyLAogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVm
ZmVyLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhLAot
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhLAorICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXIsCisgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlciwKICNpZiBFTkFCTEUoVklE
RU8pCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVk
aWEsCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsMTQgKzU1LDE0IEBAIFJlY29yZGVyOjp+UmVjb3JkZXIoKQogICAgIExPRyhEaXNwbGF5TGlz
dHMsICJSZWNvcmRlZCBkaXNwbGF5IGxpc3Q6XG4lcyIsIG1fZGlzcGxheUxpc3QuZGVzY3JpcHRp
b24oKS5kYXRhKCkpOwogfQogCi12b2lkIFJlY29yZGVyOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpCit2
b2lkIFJlY29yZGVyOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKIHsKLSAgICBhcHBlbmQ8R2V0SW1h
Z2VEYXRhPihvdXRwdXRGb3JtYXQsIHNvdXJjZVJlY3QpOworICAgIGFwcGVuZDxHZXRQaXhlbEJ1
ZmZlcj4ob3V0cHV0Rm9ybWF0LCBzb3VyY2VSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6cHV0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIFJlY29yZGVyOjpwdXRQaXhl
bEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKLSAgICBhcHBlbmQ8UHV0SW1h
Z2VEYXRhPihpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RG
b3JtYXQpOworICAgIGFwcGVuZDxQdXRQaXhlbEJ1ZmZlcj4oaW5wdXRGb3JtYXQsIHBpeGVsQnVm
ZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOwogfQogCiBzdGF0aWMgYm9vbCBj
b250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNo
YW5nZUZsYWdzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyAr
MzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBjbGFzcyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIDogdWludDhfdDsKKwogY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVj
dDsKLWNsYXNzIEdseXBoQnVmZmVyOwogY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEZvbnQ7CitjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNzIEltYWdlOwotY2xhc3Mg
SW1hZ2VEYXRhOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAKIHN0cnVjdCBHcmFwaGljc0NvbnRleHRT
dGF0ZTsKIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKQEAgLTU3LDggKzU4LDggQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3Bs
YXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZm
ZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3Q7CiBjbGFzcyBG
bG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbWFnZURhdGE7CiAKIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEy
ICsyODYsMTIgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcgogICAg
ICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAg
IEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgp
KTsKLSAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOwotICAgIGlmICgh
aW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Qp
OworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHBp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1l
bnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVm
ZmVyLT5zaXplKCk7CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9h
dHMobV92YWx1ZXMpOwogICAgIApAQCAtMzEzLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVz
dWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVm
ZmVyLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAg
LTEwOCwxMSArMTA4LDExIEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBs
eVMKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRv
KiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFpbWFnZVJlc3VsdCkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBpbWFnZVJlc3Vs
dC0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwogICAgIExv
b2t1cFRhYmxlIGdyZWVuVGFibGU7CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCB2b2lkIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTCiAgICAgTG9va3VwVGFibGUgYWxwaGFUYWJsZTsK
ICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxlLCBibHVlVGFibGUs
IGFscGhhVGFibGUpOwogCi0gICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KHBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxl
bmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3Ro
OyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
aW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBp
eGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7CisgICAgdWlu
dDhfdCogZGF0YSA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCk7CisgICAgZm9yICh1bnNp
Z25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgZGVzdGluYXRpb25QaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdID0g
cmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsg
MV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CiAgICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksMjEgKzIyOSwy
MSBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoCiAgICAgRmlsdGVy
RWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRvKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgICAgICBpZiAoIXJlc3VsdElt
YWdlKQorICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIGF1dG8mIGRzdFBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICAgICAgSW50
UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzcmNQaXhlbEFycmF5ID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgICAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0SW1hZ2VEYXRhKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAg
IGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBJbnRSZWN0IGVmZmVjdEJE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwogCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzcmNQaXhlbEFy
cmF5LCBkc3RQaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKKyAgICAgICAgcGxh
dGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZFQ29udm9s
dmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CkBAIC0zNzEsMzMgKzM3MSwyOCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0CiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
Ci0gICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZTsKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQot
ICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotCi0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgZHN0UGl4ZWxB
cnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogCi0g
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzcmNQaXhlbEFycmF5OworICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJheTsKICAgICBpZiAobV9wcmVzZXJ2ZUFs
cGhhKQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGllZFJlc3VsdChlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgc291cmNlUGl4
ZWxBcnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgZWxzZQotICAgICAgICBzcmNQaXhlbEFycmF5ID0gaW4t
PnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgICAgICBzb3VyY2VQaXhlbEFycmF5
ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47
CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwog
ICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKIAogICAgIFBhaW50
aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzcmNQaXhlbEFycmF5LAotICAgICAg
ICBkc3RQaXhlbEFycmF5LAorICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKKyAgICAgICAgZGVz
dGluYXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAg
cGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC05OSwxNiArOTksMTYgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6
cGxhdGZvcm1BcHBseVNvZgogICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5F
TF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5L
Tk9XTik7CiAKLSAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgZHN0
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgSW50UmVj
dCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CiAgICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0
QURyYXdpbmdSZWN0KTsKIAotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9u
cyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNp
bmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgogICAgIGF1dG8gZGlzcGxhY2VtZW50
SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAg
IApAQCAtMTM2LDE4ICsxMzYsMTggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1B
cHBseVNvZgogICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5dGVzOwogCiAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkgewotICAg
ICAgICAgICAgaW50IGRzdEluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CisgICAgICAg
ICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNj
YWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZHN0SW5kZXggKyBkaXNwbGFj
ZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAgICAgICAgICAgIGludCBzcmNZID0g
eSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+
aXRlbShkc3RJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwor
ICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9y
WCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1l
bnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKyAgICAgICAgICAgIGludCBzcmNZID0geSAr
IHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRl
bShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0
WSk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkKiBkc3RQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIGRzdEluZGV4KTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkKiBkZXN0aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsK
ICAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8
IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAg
ICAgKmRzdFBpeGVsUHRyID0gMDsKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0
ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICpkc3RQaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJ
bWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsK
KyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZ
LCByb3dCeXRlcykpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTk5LDE2
ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAKICAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0Nv
bG9yKTsKIAotICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIg
d291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJl
YShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBpbWFn
ZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1
dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFwaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3JjUGl4ZWxBcnJheSA9IGltYWdl
RGF0YS0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxB
cnJheS5kYXRhKCksIGltYWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5zaXplKCkud2lk
dGgoKSk7CisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7
CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEo
KSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7
CiAgICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVhKTsKKyAgICByZXN1bHRJ
bWFnZS0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0
Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
ICNpZiBVU0UoQUNDRUxFUkFURSkKQEAgLTUyMywxNiArNTIzLDE2IEBAIHZvaWQgRkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2EKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byYgZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAg
c2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOwogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNTQ1LDcgKzU0NSw3IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBw
bHlTb2Z0d2EKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
cGxhdGZvcm1BcHBseShkc3RQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndp
ZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBs
eShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgo
KSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKIH0KIAogSW50T3V0c2V0cyBGRUdh
dXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9u
IDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IkNvbG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYv
UGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3NSwyMyArNDc1LDIz
IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRvKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byYgcmVzdWx0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRh
KCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKIAotICAgIEludFJl
Y3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQo
cmVzdWx0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
ICAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJv
d3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlv
dXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxl
LgogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGlt
cGxlbWVudGF0aW9uCiAKICAgICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5nKHJlc3VsdFBpeGVsQXJyYXksIGFi
c29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsKKyAg
ICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53
aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25l
bnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAg
LTI0MywyMyArMjQzLDIzIEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBhdXRv
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlm
ICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UtPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBzZXRJc0FscGhhSW1hZ2Uo
aW4tPmlzQWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
KyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBp
eGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIEludFNpemUgcmFkaXVz
ID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7CiAgICAg
aWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0
RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8g
c3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBh
dXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3
aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXNvdXJjZVBpeGVsQXJy
YXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CkBA
IC0yNzAsNyArMjcwLDcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsK
LSAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNyY1BpeGVsQXJyYXkuZ2V0KCk7Cisg
ICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEFycmF5LmdldCgpOwog
ICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsK
ICAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgp
ICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWls
ZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zOTYsMTcgKzM5
NiwxNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsCiAKIHZvaWQg
RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGF1dG8qIHJlc3Vs
dEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRh
KCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwogCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkp
OwogCiAgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHBpeGVsQXJyYXku
emVyb0ZpbGwoKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIEZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtSm9iczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRmlsbFJlZ2lvblBhcmFt
ZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CiAgICAgICAgICAgICAg
ICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJy
YXkgPSAmcGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZk
ZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0
YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBz
dGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7CkBAIC00
NTcsNyArNDU3LDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQog
ICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21h
bGwuCi0gICAgZmlsbFJlZ2lvbihwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEs
IDAsIGhlaWdodCk7CisgICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50
aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0
eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksOCArMjksOCBAQAog
I2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlw
ZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC03
Nyw3ICs3Nyw3IEBAIEZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2UKICAg
ICByZXR1cm4gYWJzb2x1dGVQb2ludDsKIH0KIAotSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29u
c3QKK0ludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBsb2Nh
dGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKICAgICBsb2NhdGlvbi5tb3Zl
QnkoLWVmZmVjdFJlY3QubG9jYXRpb24oKSk7CkBAIC0yNDcsOCArMjQ3LDggQEAgdm9pZCBGaWx0
ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaQogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFy
UmVzdWx0KCkKIHsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG51bGxwdHI7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFdURjo6
bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFdURjo6bnVsbG9wdDsK
IH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCkBAIC0yNjUs
NyArMjY1LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZQogCiBJ
bWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiB7Ci0gICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVy
TmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3Rpbmcg
aW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LmdldCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9y
TnVsbChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7CisgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVm
ZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdCA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwogCiAgICAgaWYgKCFo
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNzksOSArMjc5LDkgQEAg
SW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZQogCiAgICAgSW50UmVjdCBk
ZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwog
ICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5h
dGlvblJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTI5MCwxMSArMjkw
LDE0IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjoKICAgICBJbnRT
aXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKICAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNpemUuYXJlYSgpICogNCkudW5zYWZl
R2V0KCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2Fs
ZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5o
YXNPdmVyZmxvd2VkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRp
cGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGlt
YWdlRGF0YTsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFwaXhl
bEFycmF5KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb3B5VW5tdWx0aXBsaWVkUmVz
dWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gcGl4ZWxBcnJh
eTsKIH0KIAogUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRp
cGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQpAQCAtMzAyLDExICszMDUsMTQgQEAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OgogICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNp
emUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVk
U2l6ZSkpOwogICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgYXV0byBpbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCgoc2NhbGVkU2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFpbWFn
ZURhdGEpCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVy
Zmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEudW5zYWZlR2V0KCkpOworICAg
IGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11
bHRpcGxpZWRSZXN1bHQoKmltYWdlRGF0YSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJu
IGltYWdlRGF0YTsKKyAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVj
dCwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQXJyYXk7CiB9CiAKIHZvaWQgRmlsdGVy
RWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
CkBAIC00MzMsNzggKzQzOSw4MCBAQCBzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBseWluZ0Fs
cGhhKGNvCiAjZW5kaWYKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gRmlsdGVyRWZmZWN0Ojpjb252
ZXJ0SW1hZ2VEYXRhVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xv
clNwYWNlLCBJbWFnZURhdGEmIGlucHV0RGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4
ZWxCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3Bh
Y2UsIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQpCiB7Ci0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgaW5w
dXREYXRhLnNpemUoKSk7CisgICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBl
cmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBk
byBpdCBkaXJlY3RseS4KKworICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IHBpeGVsQnVmZmVyLnNpemUoKSk7CiAgICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRl
IGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIEltYWdlRGF0YQorICAgIC8vIENyZWF0
ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgogICAgIGF1dG8g
YnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVy
aW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCks
IFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgaW5wdXREYXRh
LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGJ1
ZmZlci0+cHV0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgZGVzdGluYXRp
b25SZWN0KTsKICAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdl
dENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgb3V0cHV0Rm9ybWF0KTsKIH0K
IAotUmVmUHRyPEltYWdlRGF0YT4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0Nv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdldENvbG9yU3BhY2UsIEltYWdlQnVm
ZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIHRhcmdl
dENvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVj
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQpCiB7CiAgICAgRmxvYXRTaXpl
IGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKICAg
ICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBh
bmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgogICAgIGF1dG8g
Y29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0
ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNw
YWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIGlmICghY29udmVydGVkQnVmZmVyKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAv
LyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcg
ZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKICAgICBjb252ZXJ0ZWRCdWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOwotICAgIHJldHVybiBj
b252ZXJ0ZWRCdWZmZXItPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QpOworICAgIHJl
dHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgcmVjdCk7
CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3Rp
bmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShjb2xv
clNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICghY29udmVydGVkSW1hZ2VE
YXRhKQorICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKKyAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0
ZXMoY29udmVydGVkSW1hZ2VEYXRhLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Cisg
ICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRp
b24sIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFn
ZURhdGFUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgSW1hZ2VE
YXRhJiBpbWFnZURhdGEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit2
b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwg
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICAvLyBDb252ZXJ0
cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCwKICAgICAvLyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUg
dG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZEltYWdlRGF0YSA9IGNvbnZlcnRJbWFn
ZURhdGFUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgaW1hZ2VEYXRhLCBvdXRwdXRGb3JtYXQpOwot
ICAgIGlmICghY29udmVydGVkSW1hZ2VEYXRhKQorICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZm
ZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxCdWZm
ZXIsIG91dHB1dEZvcm1hdCk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZEltYWdlRGF0YS0+ZGF0YSgp
LCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBp
eGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CiB9CiAKIHZvaWQgRmls
dGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKQogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAgICAgCi0gICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmls
dGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBF
eGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAi
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpKTsKKyAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0
aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KTsKIAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAv
LyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc0ltYWdl
RGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICBpZiAo
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CiAg
ICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0
aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgcmVjdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsg
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAgICAgICAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCwgaW5wdXRTaXplKTsKICAgICAgICAgICAgIGlm
ICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRT
aXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNw
YWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VE
YXRhVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
ICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJl
Y3QpOworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29s
b3JTcGFjZSkpIHsKKyAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlv
bihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwpAQCAtNTE0LDMxICs1MjIsMzEgQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogewogICAgIEFTU0VSVChoYXNS
ZXN1bHQoKSk7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0
ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVs
dGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVP
ck51bGwobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpIDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQu
Z2V0KCkpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJF
ZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlw
bGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1h
Z2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAg
ICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkp
IHsKKyAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNp
b24oY29sb3JTcGFjZSkpIHsKICAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZm
ZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9
KTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CisgICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUo
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTgsIGlucHV0U2l6
ZSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChyZXF1
aXJlc0ltYWdlRGF0YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAg
IGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKQEAgLTU1
OCw3MSArNTY2LDczIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnUK
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotSW1hZ2VEYXRhKiBG
aWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK09wdGlvbmFsPFBp
eGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
CiB7CiAgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCiAgICAgLy8gT25seSBvbmUg
cmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKKyAgICBB
U1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9PSBXVEY6Om51bGxvcHQpOworCiAgICAg
aWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAKICAgICBJbnRT
aXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Is
IFBpeGVsRm9ybWF0OjpCR1JBOCwgcmVzdWx0U2l6ZSk7CisgICAgcmV0dXJuIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7CiB9CiAKLUltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRlcnMs
ICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmls
dGVyTmFtZSgpLCB0aGlzKTsKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93
ZWQuCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgQVNTRVJUKG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID09IFdURjo6bnVsbG9wdCk7CisKICAgICBpZiAobV9hYnNvbHV0ZVBhaW50
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VE
YXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LmdldCgpOworICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZm
ZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpC
R1JBOCwgcmVzdWx0U2l6ZSk7CisgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
OwogfQogCi1ib29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29u
dmVyc2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRzdENvbG9yU3BhY2UpCiti
b29sIEZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9u
KE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gZGVzdGluYXRpb25Db2xvclNwYWNlKQog
ewogI2lmIFVTRShDRykKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3
ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KICAgICAv
LyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNl
IGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQKICAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBt
YW5pcHVsYXRpbmcgcmF3IHBpeGVscwotICAgIHJldHVybiBkc3RDb2xvclNwYWNlICYmIHJlc3Vs
dENvbG9yU3BhY2UoKSAhPSAqZHN0Q29sb3JTcGFjZTsKKyAgICByZXR1cm4gZGVzdGluYXRpb25D
b2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNl
OwogI2Vsc2UKICAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90
IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZHN0Q29sb3JTcGFjZSk7CisgICAg
VU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
I2VuZGlmCiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQordm9pZCBGaWx0ZXJFZmZlY3Q6
OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBz
cGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5LgotICAgIFVOVVNFRF9QQVJBTShkc3RDb2xvclNw
YWNlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKICNlbHNlCi0g
ICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkc3RDb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFj
ZSkKKyAgICBpZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jl
c3VsdENvbG9yU3BhY2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBjYW4g
YXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9u
IGJ5IGFkZGluZwogICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUg
e3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KLSAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50cmFu
c2Zvcm1Db2xvclNwYWNlKG1fcmVzdWx0Q29sb3JTcGFjZSwgZHN0Q29sb3JTcGFjZSk7CisgICAg
aW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3VsdENvbG9yU3Bh
Y2UsIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAKLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBk
c3RDb2xvclNwYWNlOworICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRlc3RpbmF0aW9uQ29sb3JT
cGFjZTsKIAotICAgIGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0cjsKLSAgICBpZiAobV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCi0gICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbnVsbHB0
cjsKKyAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OworICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gV1RGOjpudWxsb3B0OwogI2VuZGlmCiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3Nl
ZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjYsOCArMjcsMTAgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTQxLDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RmlsdGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJ
bWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZp
bHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsKIApAQCAtMTAwLDcgKzEwMyw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShj
b25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBJbnRSZWN0IHJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgCiAgICAg
Ly8gUmVjdXJzZXMgb24gaW5wdXRzLgogICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKQEAgLTE4NSw4ICsxODgsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgPSAwOwogCiAgICAgSW1hZ2VCdWZm
ZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIEltYWdlRGF0YSogY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmls
dGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0
aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFsw
LCBhbHBoYV0uCkBAIC0yMDIsMTggKzIwNSwxOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb3B5
SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2b2lkIGNvcHlD
b252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgSW1hZ2VEYXRhJiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc0ltYWdlRGF0
YUNvbG9yU3BhY2VDb252ZXJzaW9uKE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwot
ICAgIFJlZlB0cjxJbWFnZURhdGE+IGNvbnZlcnRJbWFnZURhdGFUb0NvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlLCBJbWFnZURhdGEmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uKTsKKyAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGlu
YXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wg
cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKE9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4pOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0UGl4ZWxC
dWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0
SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKICAgICAKIAogICAg
IEZpbHRlciYgbV9maWx0ZXI7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3Rz
OwogCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIFJl
ZlB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgUmVmUHRyPElt
YWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRl
UGFpbnRSZWN0OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw4ICszMiw4IEBACiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1
ZUFycmF5Lmg+CiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQpAQCAtMjA5LDEwICsyMDksMTAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byBpbWFnZURhdGEgPSByZWFkUmVuZGVyaW5nUmVzdWx0cygpOwot
ICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkUmVuZGVyaW5n
UmVzdWx0cygpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBw
YWludFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIGltYWdlRGF0YS5yZWxlYXNlTm9uTnVs
bCgpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOwor
ICAgIHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgV1RGTW92ZSgqcGl4ZWxCdWZm
ZXIpLCBpbWFnZUJ1ZmZlci5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci5jb250ZXh0KCkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyKQpAQCAtMjIxLDQwICsyMjEsNDAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21wbwogICAgICAgICByZXR1cm47
CiAgICAgaWYgKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byBpbWFnZURhdGEgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsK
LSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVhZENvbXBvc2l0
ZWRSZXN1bHRzKCk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAg
IHBhaW50VG9DYW52YXMoY29udGV4dEF0dHJpYnV0ZXMoKSwgaW1hZ2VEYXRhLnJlbGVhc2VOb25O
dWxsKCksIGltYWdlQnVmZmVyLmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7
CisgICAgcGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcygpLCBXVEZNb3ZlKCpwaXhlbEJ1
ZmZlciksIGltYWdlQnVmZmVyLmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7
CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKQog
ewogICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJl
bXVsdGlwbHlpbmcsIHdoaWNoIGlzIGxvc3N5LgogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygp
LnByZW11bHRpcGxpZWRBbHBoYSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFp
bnRpbmcoKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5n
KCkKIHsKICAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0
cygpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygp
CiB7CiAgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKGdldEludGVybmFsRnJh
bWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXR1cm4gcmVhZENvbXBvc2l0ZWRSZXN1bHRz
KCk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzKCkKK09wdGlvbmFsPFBpeGVs
QnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzKCkK
IHsKICAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAko
d29ya2luZyBjb3B5KQpAQCAtODcsOCArODcsOCBAQCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0w7
CiAjZW5kaWYKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIElt
YWdlRGF0YTsKIGNsYXNzIE1lZGlhUGxheWVyOworY2xhc3MgUGl4ZWxCdWZmZXI7CiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQogY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOwog
I2VuZGlmCkBAIC00NjMsMTEgKzQ2MywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwYXRjaENv
bnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJikgZmluYWw7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpIGZpbmFsOwog
ICAgIHZvaWQgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyJikgZmlu
YWw7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50
aW5nKCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFp
bnRpbmcoKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNG
b3JQYWludGluZygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkQ29tcG9zaXRlZFJl
c3VsdHNGb3JQYWludGluZygpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgY29weVRl
eHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXImLCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
IGZsaXBZKSBmaW5hbDsKQEAgLTUyNiw3ICs1MjYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgcG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDR0xlbnVtJiBmb3JtYXQsIEdDR0xlbnVtJiB0eXBlKTsKICNlbmRpZiAvLyAh
VVNFKEFOR0xFKQogCi0gICAgc3RhdGljIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBSZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRTaXplJiBj
YW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFRvQ2Fu
dmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIFBpeGVsQnVmZmVyJiYsIGNv
bnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcml2YXRlOgog
I2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNTUzLDkgKzU1Myw5IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjaGVja0dQVVN0YXR1cygpOwogCiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiByZWFkUmVuZGVy
aW5nUmVzdWx0cygpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlYWRDb21wb3NpdGVkUmVzdWx0
cygpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsK
KyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZFJlbmRlcmluZ1Jlc3VsdHMoKTsKKyAgICBP
cHRpb25hbDxQaXhlbEJ1ZmZlcj4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7CisgICAgT3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IHJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKTsKIAogICAgIGJvb2wg
cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOwogICAgIHZvaWQgcHJlcGFyZVRleHR1cmVJbXBs
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDExICszMCwxMSBAQAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE9QRU5HTCkKIAogI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPGNzdHJpbmc+CkBAIC02MSwxMiArNjEsMTEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0KLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCiB7Ci0gICAgYXV0
byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
YXV0byBwaXhlbEJ1ZmZlciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIGdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKICAgICBib29sIG11c3RSZXN0b3Jl
UGFja0FsaWdubWVudCA9IGZhbHNlOwpAQCAtNzYsMTIgKzc1LDEyIEBAIFJlZlB0cjxJbWFnZURh
dGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50ID0gdHJ1ZTsKICAgICB9CiAKLSAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBpbWFnZURhdGEt
PndpZHRoKCksIGltYWdlRGF0YS0+aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgcGl4
ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLmhlaWdodCgpLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7CiAK
ICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9y
ZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwogCi0gICAgcmV0dXJuIGltYWdl
RGF0YTsKKyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQAogI2luY2x1ZGUg
IkFOR0xFV2ViS2l0QnJpZGdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcu
aCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4KQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4CiAgICAgOjpnbEZsdXNoKCk7CiB9
CiAKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVy
aW5nUmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKIHsKICAgICBib29sIG11c3RSZXN0b3JlRkJPID0g
ZmFsc2U7CiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xFUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxMCBAQAogI2lm
IEVOQUJMRShXRUJHTCkgJiYgVVNFKE9QRU5HTF9FUykKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TE9wZW5HTEVTLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxBTkdMRS9TaGFkZXJMYW5nLmg+CiAK
QEAgLTQ2LDcgKzQ2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5QaXhl
bAogICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotCiAg
ICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIEZJWE1F
OiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4
ZWQsIGkuZS4sCkBAIC02NSwxMSArNjQsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZG5QaXhlbAogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRz
KCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpSR0JBOCwgZ2V0SW50ZXJu
YWxGcmFtZWJ1ZmZlclNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OwogICAgIGJv
b2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7CkBAIC03OSwxMiArNzgsMTIgQEAg
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuRwogICAgICAgICBtdXN0UmVz
dG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KIAotICAgIDo6Z2xSZWFkUGl4ZWxzKDAs
IDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpKTsKKyAgICA6OmdsUmVhZFBp
eGVscygwLCAwLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXpl
KCkuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVsQnVmZmVyLT5kYXRh
KCkuZGF0YSgpKTsKIAogICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAg
IDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CiAKLSAg
ICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAogYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3
MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDExIEBACiAj
aW5jbHVkZSAiQ09NUHRyLmgiCiAjaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
ICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgi
CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtMzEyLDE2ICszMTIs
MTYgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZQogICAgIHJldHVy
biB7IH07CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7CisgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBudWxscHRyKTsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZv
cm1hdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwg
ZGVzdEZvcm1hdCwgbnVsbHB0cik7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1
ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZv
cm1hdCwgbnVsbHB0cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsNyAr
NDI3LDcgQEAgSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKSBjb25zdAogICAgIGF1dG8m
IGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwogICAgIAogICAgIGlmIChsYXN0
RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVy
ZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dEltYWdlRGF0YShJbnRSZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7CisgICAgICAg
IHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRS
ZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7CiAgICAgCiAgICAgcmV0dXJuIHsgfTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCShyZXZpc2lvbiAyNzcy
NTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJQ
aXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgogI2luY2x1ZGUgIlJhc3Rl
clNoYXBlLmgiCiAjaW5jbHVkZSAiUmVjdGFuZ2xlU2hhcGUuaCIKQEAgLTE5NywxNCArMTk3LDE0
IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3QKICAgICBpZiAoaW1h
Z2UpCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgIGF1dG8gaW1hZ2VEYXRhID0gaW1h
Z2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIHsgSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSB9KTsKKyAgICBhdXRvIHBpeGVs
QnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOwog
ICAgIAotICAgIC8vIFdlIGNvdWxkIGdldCB0byBhIHZhbHVlIHdoZXJlIGltYWdlRGF0YSBjb3Vs
ZCBiZSBudWxscHRyLiBBIGNhc2Ugd2hlcmUgSW1hZ2VSZWN0LnNpemUoKSBpcyBodWdlLCBpbWFn
ZURhdGE6OmNyZWF0ZQotICAgIC8vIGNhbiByZXR1cm4gYSBudWxscHRyIGJlY2F1c2UgZGF0YSBz
aXplIGhhcyBvdmVyZmxvd2VkLiBSZWZlciByZGFyOi8vcHJvYmxlbS82MTc5Mzg4NAotICAgIGlm
ICghaW1hZ2VEYXRhKQorICAgIC8vIFdlIGNvdWxkIGdldCB0byBhIHZhbHVlIHdoZXJlIFBpeGVs
QnVmZmVyIGNvdWxkIGJlIG51bGxvcHQuIEEgY2FzZSB3aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlz
IGh1Z2UsIFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUKKyAgICAvLyBjYW4gcmV0dXJuIGEgbnVsbG9w
dCBiZWNhdXNlIGRhdGEgc2l6ZSBoYXMgb3ZlcmZsb3dlZC4gUmVmZXIgcmRhcjovL3Byb2JsZW0v
NjE3OTM4ODQKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlU2hh
cGUoKTsKIAotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBwaXhlbEFy
cmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JBLgogICAgIHVp
bnQ4X3QgYWxwaGFQaXhlbFRocmVzaG9sZCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyb3VuZGYo
Y2xhbXBUbzxmbG9hdD4odGhyZXNob2xkLCAwLCAxKSAqIDI1NS4wZikpOwpJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI3NzI2NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMjEtMDUtMDkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIFVzZSBQaXhlbEJ1ZmZlciByYXRoZXIgdGhhbiBJbWFnZURhdGEg
aW4gcGxhdGZvcm0vIGNvZGUgdG8gZml4IGxheWVyaW5nIHZpb2xhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NTg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBhbGwgdXNlcyBvZiB0
aGUgRE9NIGxheWVyIG9iamVjdCBXZWJDb3JlOjpJbWFnZURhdGEgd2l0aCB0aGUgbmV3IHBsYXRm
b3JtCisgICAgICAgIGxheWVyIFdlYkNvcmU6OlBpeGVsQnVmZmVyLCB3aGljaCBmaXhlcyBhIGxh
eWVyaW5nIHZpb2xhdGlvbiBXZWJDb3JlIGFuZCBhdm9pZHMKKyAgICAgICAgdW5uZWNlc3Nhcnkg
YWxsb2NhdGlvbnMgLyByZWZlcmVuY2UgY291bnRpbmcuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxPcHRpb25h
bDxUPj46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8T3B0aW9uYWw8VD4+
OjpkZWNvZGUpOgorICAgICAgICBBZGQgdGVtcGxhdGl6ZWQgRW5jb2Rlci9EZWNvZGVyIHRvIHdv
cmsgd2l0aCBzdHJlYW1pbmcgZW5jb2Rlci4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVH
cmFwaGljc0NvbnRleHRHTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0
c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBh
aW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0w6OnBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVz
c2FnZXMuaW46CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oOgorICAgICAgICAocGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9QaXhlbEJ1ZmZlcik6CisgICAgICAgIChwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVw
ZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVscGVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhv
cmVGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVzdHJveUdldFBpeGVs
QnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6cG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlY29kZUl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURh
dGFIZWxwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JHZXRJbWFnZURh
dGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1
cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6cG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOiBEZWxldGVkLgor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAg
KiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZURhdGE+Pjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
ICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxC
dWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGlj
c0NvbnRleHRHTFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpwdXRQaXhlbEJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnB1dEltYWdlRGF0
YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldFBpeGVsQnVmZmVy
VG9Db21wbGV0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldFBp
eGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNr
ZW5kOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOgorCiAy
MDIxLTA1LTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIFdLQnVuZGxlUGFnZUdyb3VwUmVmCkluZGV4OiBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5OCwxNiArMTk4LDE2IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6Om5vdGlmeU1h
cmsKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGFz
c2VydElzQ3VycmVudChtX3N0cmVhbVRocmVhZCk7Ci0gICAgcGFpbnRJbWFnZURhdGFUb0ltYWdl
QnVmZmVyKG1fY29udGV4dC0+cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpLCBpbWFn
ZUJ1ZmZlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBhaW50UGl4ZWxCdWZm
ZXJUb0ltYWdlQnVmZmVyKG1fY29udGV4dC0+cmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGlu
ZygpLCBpbWFnZUJ1ZmZlciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXNzZXJ0SXND
dXJyZW50KG1fc3RyZWFtVGhyZWFkKTsKLSAgICBwYWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIo
bV9jb250ZXh0LT5yZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpLCBpbWFnZUJ1ZmZl
ciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBhaW50UGl4ZWxCdWZmZXJUb0lt
YWdlQnVmZmVyKG1fY29udGV4dC0+cmVhZENvbXBvc2l0ZWRSZXN1bHRzRm9yUGFpbnRpbmcoKSwg
aW1hZ2VCdWZmZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRJbWFnZURhdGFUb0ltYWdlQnVmZmVyKFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpwYWludFBpeGVsQnVmZmVy
VG9JbWFnZUJ1ZmZlcihPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4mJiBwaXhlbEJ1ZmZl
ciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHRhcmdldCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGFzc2VydElzQ3Vy
cmVudChtX3N0cmVhbVRocmVhZCk7CiAgICAgLy8gRklYTUU6IFdlIGRvIG5vdCBoYXZlIGZ1bmN0
aW9uaW5nIHJlYWQvd3JpdGUgZmVuY2VzIGluIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuIFRodXMg
dGhpcyBpcyBzeW5jaHJvbm91cywKQEAgLTIxOSw4ICsyMTksOCBAQCB2b2lkIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMOjpwYWludEltYWdlCiAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0g
bV9yZW5kZXJpbmdCYWNrZW5kLT5yZW1vdGVSZXNvdXJjZUNhY2hlKCkuY2FjaGVkSW1hZ2VCdWZm
ZXIodGFyZ2V0KSkgewogICAgICAgICAgICAgLy8gSGVyZSB3ZSBkbyBub3QgdHJ5IHRvIHBsYXkg
YmFjayBwZW5kaW5nIGNvbW1hbmRzIGZvciBpbWFnZUJ1ZmZlci4gQ3VycmVudGx5IHRoaXMgY2Fs
bCBpcyBvbmx5IG1hZGUgZm9yIGVtcHR5CiAgICAgICAgICAgICAvLyBpbWFnZSBidWZmZXJzIGFu
ZCB0aGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGFkZCBkaXNwbGF5IGxpc3RzLgotICAgICAgICAgICAg
aWYgKGltYWdlRGF0YSkKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcywgaW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxs
KCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsK
KyAgICAgICAgICAgIGlmIChwaXhlbEJ1ZmZlcikKKyAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb250ZXh0QXR0cmlidXRlcywgV1RGTW92ZSgq
cGl4ZWxCdWZmZXIpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS5jbGVhclJlY3QoeyBJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNp
emUoKSB9KTsKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgImZsdXNoIiBpbXBsZW1lbnRh
dGlvbiBpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIG92ZXJsb2FkcyBvcmRlcmluZyBhbmQgZWZm
ZWN0cy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHByb3RlY3RlZDoKIAogI2luY2x1
ZGUgIlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgiIC8vIE5PTElO
VAogCi0gICAgdm9pZCBwYWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIoUmVmUHRyPFdlYkNvcmU6
OkltYWdlRGF0YT4mJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgcGFpbnRQaXhlbEJ1ZmZlclRvSW1h
Z2VCdWZmZXIoT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAog
ICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOwogICAgIFJlZlB0cjxJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb248UmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0w+PiBtX3N0cmVhbUNvbm5lY3Rpb247CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCBtZXNzYWdlcyAtPiBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTCBOb3RSCiAgICAgdm9pZCBNdWx0aURyYXdBcnJheXNJbnN0
YW5jZWRBTkdMRSh1aW50MzJfdCBtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGZp
cnN0cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBjb3VudHMsIElQQzo6QXJyYXlSZWZl
cmVuY2U8aW50MzJfdD4gaW5zdGFuY2VDb3VudHMsIGludDMyX3QgZHJhd2NvdW50KQogICAgIHZv
aWQgTXVsdGlEcmF3RWxlbWVudHNBTkdMRSh1aW50MzJfdCBtb2RlLCBJUEM6OkFycmF5UmVmZXJl
bmNlPGludDMyX3Q+IGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxp
bnQzMl90PiBvZmZzZXRzLCBpbnQzMl90IGRyYXdjb3VudCkKICAgICB2b2lkIE11bHRpRHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxp
bnQzMl90PiBjb3VudHMsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJf
dD4gb2Zmc2V0cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBpbnN0YW5jZUNvdW50cywg
aW50MzJfdCBkcmF3Y291bnQpCi0gICAgdm9pZCBQYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpIC0+IChSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiByZXR1cm5WYWx1ZSkgU3luY2hy
b25vdXMKKyAgICB2b2lkIFBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSAtPiAo
T3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1
bmN0aW9uc0dlbmVyYXRlZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0
ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3OSwxMSArMTM3OSwxMSBAQAogICAgICAgICBhc3Nl
cnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwogICAgICAgICBtX2NvbnRleHQtPm11bHRpRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTHNpemVpKj4oY291bnRzLmRhdGEoKSksIGNvdW50cy5zaXplKCkpLCB0eXBl
LCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMaW50Kj4ob2Zmc2V0cy5k
YXRhKCkpLCBvZmZzZXRzLnNpemUoKSksIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNv
bnN0IEdDR0xzaXplaSo+KGluc3RhbmNlQ291bnRzLmRhdGEoKSksIGluc3RhbmNlQ291bnRzLnNp
emUoKSksIGRyYXdjb3VudCk7CiAgICAgfQotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6SW1hZ2VE
YXRhPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvUGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3Jl
OjpQaXhlbEJ1ZmZlcj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgewotICAgICAgICBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiByZXR1cm5WYWx1ZSA9IHsgfTsKKyAgICAgICAgT3B0
aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IHJldHVyblZhbHVlID0geyB9OwogICAgICAgICBh
c3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJlYWQpOwotICAgICAgICByZXR1cm5WYWx1ZSA9IG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICAgICAgcmV0
dXJuVmFsdWUgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIo
KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXR1cm5WYWx1ZSkpOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmUK
ICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkNvbmNyZXRlSW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
Ojpjb250ZXh0OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjptX2JhY2tlbmQ7
Ci0gICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YTsKKyAgICB1
c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXI7CiAKIHB1YmxpYzoK
ICAgICBzdGF0aWMgYXV0byBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCYgcmVtb3RlUmVuZGVyaW5nQmFja2VuZCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKQEAgLTc2LDE2ICs3Niwx
NiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1IYW5kbGUgaXRlbSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkdldEltYWdlRGF0YT4oKSkgewotICAgICAgICAgICAgYXV0byYgZ2V0SW1hZ2VEYXRhSXRlbSA9
IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCk7Ci0gICAgICAg
ICAgICBhdXRvIGltYWdlRGF0YSA9IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpnZXRJbWFnZURh
dGEoZ2V0SW1hZ2VEYXRhSXRlbS5vdXRwdXRGb3JtYXQoKSwgZ2V0SW1hZ2VEYXRhSXRlbS5zcmNS
ZWN0KCkpOwotICAgICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnBvcHVsYXRlR2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KGltYWdlRGF0YS5nZXQoKSk7CisgICAgICAgIGlmIChpdGVt
LmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRQaXhlbEJ1ZmZlcj4oKSkgeworICAgICAgICAg
ICAgYXV0byYgZ2V0UGl4ZWxCdWZmZXJJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkdldFBpeGVsQnVmZmVyPigpOworICAgICAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IEJh
c2VDb25jcmV0ZUltYWdlQnVmZmVyOjpnZXRQaXhlbEJ1ZmZlcihnZXRQaXhlbEJ1ZmZlckl0ZW0u
b3V0cHV0Rm9ybWF0KCksIGdldFBpeGVsQnVmZmVySXRlbS5zcmNSZWN0KCkpOworICAgICAgICAg
ICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLnBvcHVsYXRlR2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnkoV1RGTW92ZShwaXhlbEJ1ZmZlcikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0
SW1hZ2VEYXRhPigpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwdXRJbWFnZURhdGFJdGVtID0gaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKTsKLSAgICAgICAgICAg
IHB1dEltYWdlRGF0YShwdXRJbWFnZURhdGFJdGVtLmlucHV0Rm9ybWF0KCksIHB1dEltYWdlRGF0
YUl0ZW0uaW1hZ2VEYXRhKCksIHB1dEltYWdlRGF0YUl0ZW0uc3JjUmVjdCgpLCBwdXRJbWFnZURh
dGFJdGVtLmRlc3RQb2ludCgpLCBwdXRJbWFnZURhdGFJdGVtLmRlc3RGb3JtYXQoKSk7CisgICAg
ICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcj4oKSkg
eworICAgICAgICAgICAgYXV0byYgcHV0UGl4ZWxCdWZmZXJJdGVtID0gaXRlbS5nZXQ8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpOworICAgICAgICAgICAgcHV0UGl4ZWxC
dWZmZXIocHV0UGl4ZWxCdWZmZXJJdGVtLmlucHV0Rm9ybWF0KCksIHB1dFBpeGVsQnVmZmVySXRl
bS5waXhlbEJ1ZmZlcigpLCBwdXRQaXhlbEJ1ZmZlckl0ZW0uc3JjUmVjdCgpLCBwdXRQaXhlbEJ1
ZmZlckl0ZW0uZGVzdFBvaW50KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0Rm9ybWF0KCkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTUsNjUgKzMxNSw2NSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNldE5leHRJdGVt
CiAgICAgbV9wZW5kaW5nV2FrZXVwSW5mbyA9IHt7eyBpZGVudGlmaWVyLCBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZTo6aGVhZGVyU2l6ZSgpLCBkZXN0aW5hdGlvbklkZW50aWZpZXIsIEdQVVByb2Nl
c3NXYWtldXBSZWFzb246OlVuc3BlY2lmaWVkIH0sIFdURjo6bnVsbG9wdCB9fTsKIH0KIAotT3B0
aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVw
ZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YUhlbHBlcihzaXplX3QgYnl0ZUNvdW50KQor
T3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVscGVyKHNpemVfdCBieXRlQ291
bnQpCiB7Ci0gICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRSghbV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnkgfHwgYnl0ZUNvdW50ID4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkt
PnNpemUoKSwgV1RGOjpudWxsb3B0LCAiVGhlIGV4aXN0aW5nIFNobWVtIGZvciBnZXRJbWFnZURh
dGEoKSBpcyBhbHJlYWR5IGJpZyBlbm91Z2ggdG8gaGFuZGxlIHRoZSByZXF1ZXN0Iik7CisgICAg
TUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxVRSghbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeSB8fCBieXRlQ291bnQgPiBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LT5zaXplKCks
IFdURjo6bnVsbG9wdCwgIlRoZSBleGlzdGluZyBTaG1lbSBmb3IgZ2V0UGl4ZWxCdWZmZXIoKSBp
cyBhbHJlYWR5IGJpZyBlbm91Z2ggdG8gaGFuZGxlIHRoZSByZXF1ZXN0Iik7CiAKICAgICBpZiAo
Ynl0ZUNvdW50ID4gNjQgKiBNQikgewogICAgICAgICAvLyBKdXN0IGEgc2FuaXR5IGNoZWNrLiBB
IDRLIGltYWdlIGlzIDM2TUIuCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQog
Ci0gICAgZGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpOwotICAgIG1fZ2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShieXRlQ291bnQpOworICAg
IGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpOworICAgIG1fZ2V0UGl4ZWxCdWZm
ZXJTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ5dGVDb3VudCk7CiAgICAg
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmIChtX2dldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeSkKLSAgICAgICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRs
ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgIHJldHVy
biBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgbV9nZXRJbWFnZURh
dGFTaGFyZWRNZW1vcnkgPyBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpIDogMCB9
OworICAgIGlmIChtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KQorICAgICAgICBtX2dldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6
OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICByZXR1cm4gU2hhcmVkTWVtb3J5OjpJUENIYW5k
bGUgeyBXVEZNb3ZlKGhhbmRsZSksIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPyBtX2dl
dFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LT5zaXplKCkgOiAwIH07CiB9CiAKLXZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKHVpbnQz
Ml90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6
OklQQ0hhbmRsZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRl
Q291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5k
bGUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKIAotICAgIGlmIChhdXRvIGhhbmRsZSA9IHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldElt
YWdlRGF0YUhlbHBlcihieXRlQ291bnQpKQorICAgIGlmIChhdXRvIGhhbmRsZSA9IHVwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVscGVyKGJ5dGVDb3VudCkpCiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlLnZhbHVlKCkpKTsKICAgICBlbHNlCiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6c2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgSVBDOjpTZW1hcGhvcmUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6c2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKG1f
Z2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX2dldFBpeGVs
QnVmZmVyU2VtYXBob3JlKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1cGRh
dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNv
dW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
JiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0
UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
ICAgIGlmIChhdXRvIGhhbmRsZSA9IHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YUhl
bHBlcihieXRlQ291bnQpKQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRs
ZS52YWx1ZSgpKSwgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOworICAgIGlmIChhdXRvIGhhbmRs
ZSA9IHVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVscGVyKGJ5dGVDb3VudCkp
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlLnZhbHVlKCkpLCBtX2dl
dFBpeGVsQnVmZmVyU2VtYXBob3JlKTsKICAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHsgfSwgbV9nZXRJbWFnZURhdGFTZW1hcGhvcmUpOworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcih7IH0sIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwogfQogCi12b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKQordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnko
KQogewotICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKKyAgICBtX2dl
dFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeShXZWJDb3JlOjpJ
bWFnZURhdGEqIGltYWdlRGF0YSkKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cG9wdWxh
dGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZl
cj4mJiBwaXhlbEJ1ZmZlcikKIHsKLSAgICBNRVNTQUdFX0NIRUNLKG1fZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5LCAiV2UgY2FuJ3QgcnVuIGdldEltYWdlRGF0YSB3aXRob3V0IGEgYnVmZmVyIHRv
IHdyaXRlIGludG8iKTsKKyAgICBNRVNTQUdFX0NIRUNLKG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnksICJXZSBjYW4ndCBydW4gZ2V0UGl4ZWxCdWZmZXIgd2l0aG91dCBhIGJ1ZmZlciB0byB3
cml0ZSBpbnRvIik7CiAKLSAgICBpZiAoaW1hZ2VEYXRhKSB7Ci0gICAgICAgIE1FU1NBR0VfQ0hF
Q0soaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpIDw9IG1fZ2V0SW1hZ2VEYXRhU2hhcmVk
TWVtb3J5LT5zaXplKCksICJTaG1lbSBmb3IgcmV0dXJuIG9mIGdldEltYWdlRGF0YSBpcyB0b28g
c21hbGwiKTsKLSAgICAgICAgbWVtY3B5KG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5kYXRh
KCksIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0
aCgpKTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgTUVTU0FHRV9DSEVDSyhwaXhl
bEJ1ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSA8PSBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVt
b3J5LT5zaXplKCksICJTaG1lbSBmb3IgcmV0dXJuIG9mIGdldFBpeGVsQnVmZmVyIGlzIHRvbyBz
bWFsbCIpOworICAgICAgICBtZW1jcHkobV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS0+ZGF0
YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5ieXRl
TGVuZ3RoKCkpOwogICAgIH0gZWxzZQotICAgICAgICBtZW1zZXQobV9nZXRJbWFnZURhdGFTaGFy
ZWRNZW1vcnktPmRhdGEoKSwgMCwgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSk7
CisgICAgICAgIG1lbXNldChtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LT5kYXRhKCksIDAs
IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSk7CiAKLSAgICBtX2dldEltYWdl
RGF0YVNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlLnNp
Z25hbCgpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldERhdGFVUkxGb3JJ
bWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24sIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtNTIxLDggKzUyMSw4IEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBX
QVJOX1UKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwogICAgIGNh
c2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1
dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6
UHV0SW1hZ2VEYXRhPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICBjYXNlIERp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CisgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPihkYXRhLCBsZW5ndGgsIGhh
bmRsZUxvY2F0aW9uKTsKICAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURh
c2g6CiAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8RGlzcGxheUxpc3Q6OlNldExpbmVE
YXNoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKICAgICBjYXNlIERpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0U3RhdGU6CkBAIC01ODEsNyArNTgxLDcgQEAgT3B0aW9uYWw8RGlzcGxh
eUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVQogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTdHJva2VSZWN0OgogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VMaW5l
OgogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgY2FzZSBE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkdldEltYWdlRGF0YTogeworICAgIGNhc2UgRGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjogewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0TmV4dEl0ZW1CdWZmZXJUb1JlYWQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgZGVzdGluYXRpb24pOwogCi0gICAgdm9pZCBwb3B1bGF0ZUdldEltYWdlRGF0YVNo
YXJlZE1lbW9yeShXZWJDb3JlOjpJbWFnZURhdGEqKTsKKyAgICB2b2lkIHBvcHVsYXRlR2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnkoT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+JiYpOwog
CiAgICAgYm9vbCBhbGxvd3NFeGl0VW5kZXJNZW1vcnlQcmVzc3VyZSgpIGNvbnN0OwogCkBAIC0x
MDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5
UmVzdWx0IHN1Ym1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYgZGVzdGluYXRpb24pOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcj4gbmV4dERlc3RpbmF0aW9uSW1hZ2VCdWZmZXJBZnRlckFwcGx5aW5nRGlzcGxh
eUxpc3RzKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbml0aWFsRGVzdGluYXRpb24sIHNpemVfdCBp
bml0aWFsT2Zmc2V0LCBEaXNwbGF5TGlzdFJlYWRlckhhbmRsZSYsIEdQVVByb2Nlc3NXYWtldXBS
ZWFzb24pOwogCi0gICAgT3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IHVwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldEltYWdlRGF0YUhlbHBlcihzaXplX3QgYnl0ZUNvdW50KTsKKyAgICBP
cHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0
UGl4ZWxCdWZmZXJIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCk7CiAgICAgdm9pZCB1cGRhdGVSZW5k
ZXJpbmdSZXNvdXJjZVJlcXVlc3QoKTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KQEAg
LTEyMywxMCArMTIzLDEwIEBAIHByaXZhdGU6CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2
ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCB3YWtlVXBB
bmRBcHBseURpc3BsYXlMaXN0KGNvbnN0IEdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRz
Jik7Ci0gICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEodWludDMyX3Qg
Ynl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlJik+JiYpOwotICAgIHZvaWQgc2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7Ci0gICAgdm9pZCB1cGRh
dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNv
dW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
JiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7Ci0gICAgdm9pZCBkZXN0cm95R2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5KCk7CisgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhl
bEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4mJik7CisgICAgdm9pZCBzZW1hcGhvcmVGb3JHZXRQ
aXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+
JiYpOworICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxC
dWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNo
YXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgY29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CisgICAg
dm9pZCBkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkoKTsKICAgICB2b2lkIGdldERh
dGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4m
Jik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsK
ICAgICB2b2lkIGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYm
KT4mJik7CkBAIC0xNjEsOCArMTYxLDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPERpc3BsYXlMaXN0UmVh
ZGVySGFuZGxlPj4gbV9zaGFyZWREaXNwbGF5TGlzdEhhbmRsZXM7CiAgICAgT3B0aW9uYWw8UGVu
ZGluZ1dha2V1cEluZm9ybWF0aW9uPiBtX3BlbmRpbmdXYWtldXBJbmZvOwogICAgIElQQzo6U2Vt
YXBob3JlIG1fcmVzdW1lRGlzcGxheUxpc3RTZW1hcGhvcmU7Ci0gICAgSVBDOjpTZW1hcGhvcmUg
bV9nZXRJbWFnZURhdGFTZW1hcGhvcmU7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnk7CisgICAgSVBDOjpTZW1hcGhvcmUgbV9nZXRQaXhlbEJ1ZmZl
clNlbWFwaG9yZTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldFBpeGVsQnVmZmVyU2hh
cmVkTWVtb3J5OwogICAgIFNjb3BlZFJlbmRlcmluZ1Jlc291cmNlc1JlcXVlc3QgbV9yZW5kZXJp
bmdSZXNvdXJjZXNSZXF1ZXN0OwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxMCArMjUsMTAgQEAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQgewogICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2Fs
U2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAg
V2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChzdHJ1Y3QgV2ViS2l0OjpHUFVQcm9jZXNzV2FrZXVw
TWVzc2FnZUFyZ3VtZW50cyBhcmd1bWVudHMpCi0gICAgVXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0
SW1hZ2VEYXRhKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cwotICAgIFNlbWFwaG9yZUZvckdldEltYWdlRGF0
YSgpIC0+IChJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCi0gICAgVXBkYXRl
U2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKHVpbnQzMl90IGJ5dGVDb3Vu
dCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlLCBJUEM6OlNlbWFw
aG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzCi0gICAgRGVzdHJveUdldEltYWdlRGF0YVNoYXJl
ZE1lbW9yeSgpCisgICAgVXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMy
X3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUp
IFN5bmNocm9ub3VzCisgICAgU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoKSAtPiAoSVBDOjpT
ZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cworICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFu
ZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlLCBJUEM6OlNlbWFwaG9yZSBzZW1hcGhv
cmUpIFN5bmNocm9ub3VzCisgICAgRGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCkK
ICAgICBHZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIGVudW06dWludDhfdCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoU3RyaW5nIHVybFN0cmluZykgU3luY2hy
b25vdXMKICAgICBHZXREYXRhRm9ySW1hZ2VCdWZmZXIoU3RyaW5nIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0b3I8dWludDhfdD4gZGF0YSkgU3lu
Y2hyb25vdXMKICAgICBHZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChWZWN0
b3I8dWludDhfdD4gZGF0YSkgU3luY2hyb25vdXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM1
LDcgKzEzNSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGUKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVudENvZGVyPE9wdGlvbmFsPFQ+
PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IE9wdGlv
bmFsPFQ+JiBvcHRpb25hbCkKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgT3B0aW9uYWw8VD4mIG9w
dGlvbmFsKQogICAgIHsKICAgICAgICAgaWYgKCFvcHRpb25hbCkgewogICAgICAgICAgICAgZW5j
b2RlciA8PCBmYWxzZTsKQEAgLTE0Niw3ICsxNDcsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQXJndW1lbnRDb2RlCiAgICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFsdWUoKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKICAgICB7CiAgICAgICAgIGJvb2wgaXNF
bmdhZ2VkOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRW5nYWdlZCkpCkBAIC0xNjUs
NyArMTY2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIE9wdGlvbmFsPE9wdGlv
bmFsPFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8T3B0aW9uYWw8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgIHsKICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNFbmdhZ2VkOwogICAgICAgICBk
ZWNvZGVyID4+IGlzRW5nYWdlZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEx
NCw3NyArMzExNCw2IEBAIE9wdGlvbmFsPFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6TWUK
IH0KICNlbmRpZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPgotdm9pZCBBcmd1bWVudENvZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+JiBp
bWFnZURhdGEpCi17Ci0gICAgZW5jb2RlciA8PCBpbWFnZURhdGEtPnNpemUoKTsKLQotICAgIGF1
dG8mIHJhd0RhdGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihyYXdEYXRhLmJ5dGVMZW5ndGgoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEocmF3RGF0YS5kYXRhKCksIHJhd0RhdGEuYnl0ZUxlbmd0aCgpLCAxKTsK
LX0KLQotdGVtcGxhdGUKLXZvaWQgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRh
Pj46OmVuY29kZTxFbmNvZGVyPihFbmNvZGVyJiwgY29uc3QgUmVmPFdlYkNvcmU6OkltYWdlRGF0
YT4mKTsKLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0
YT4+OjplbmNvZGU8U3RyZWFtQ29ubmVjdGlvbkVuY29kZXI+KFN0cmVhbUNvbm5lY3Rpb25FbmNv
ZGVyJiwgY29uc3QgUmVmPFdlYkNvcmU6OkltYWdlRGF0YT4mKTsKLQotT3B0aW9uYWw8UmVmPFdl
YkNvcmU6OkltYWdlRGF0YT4+IEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxJbnRTaXplPiBpbWFn
ZURhdGFTaXplOwotICAgIGRlY29kZXIgPj4gaW1hZ2VEYXRhU2l6ZTsKLSAgICBpZiAoIWltYWdl
RGF0YVNpemUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDx1
aW50NjRfdD4gZGF0YUxlbmd0aDsKLSAgICBkZWNvZGVyID4+IGRhdGFMZW5ndGg7Ci0gICAgaWYg
KCFkYXRhTGVuZ3RoKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byBy
YXdEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoKmRhdGFMZW5n
dGgpOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmF3RGF0YS0+ZGF0
YSgpLCByYXdEYXRhLT5sZW5ndGgoKSwgMSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKCppbWFnZURhdGFTaXpl
LCBXVEZNb3ZlKHJhd0RhdGEpKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7IGltYWdlRGF0YS5yZWxlYXNlTm9uTnVsbCgp
IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci12b2lkIEFyZ3VtZW50Q29kZXI8
UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4mIGltYWdlRGF0YSkKLXsKLSAgICBpZiAoIWlt
YWdlRGF0YSkgewotICAgICAgICBlbmNvZGVyIDw8IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZW5jb2RlciA8PCB0cnVlOwotICAgIEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNv
cmU6OkltYWdlRGF0YT4+OjplbmNvZGUoZW5jb2RlciwgaW1hZ2VEYXRhLmNvcHlSZWYoKS5yZWxl
YXNlTm9uTnVsbCgpKTsKLX0KLQotdGVtcGxhdGUKLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZShFbmNvZGVyJiwgY29uc3QgUmVmUHRyPFdlYkNv
cmU6OkltYWdlRGF0YT4mKTsKLQotdGVtcGxhdGUKLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmVuY29kZShTdHJlYW1Db25uZWN0aW9uRW5jb2RlciYsIGNv
bnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci0KLU9wdGlvbmFsPFJlZlB0cjxXZWJD
b3JlOjpJbWFnZURhdGE+PiBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgYm9vbCBpc0VuZ2FnZWQ7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpc0VuZ2FnZWQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgaWYgKCFpc0VuZ2FnZWQpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsK
LQotICAgIGF1dG8gcmVzdWx0ID0gQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRh
Pj46OmRlY29kZShkZWNvZGVyKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICByZXR1cm4geyBXVEZNb3ZlKCpyZXN1bHQpIH07Ci19Ci0KICNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShXRUJHTCkKIHZvaWQgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXM+OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzKQogewpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvSW1hZ2VEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbmRleGVkREIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0lucHV0TW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVk
aWFTZWxlY3Rpb25PcHRpb24uaD4KQEAgLTgwNCwxOCArODAzLDYgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogfTsKICNlbmRpZgogCi10ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+PiB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4KLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+PiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImLCBjb25zdCBSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotICAgIHN0YXRpYyBPcHRpb25h
bDxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KICNpZiBI
QVZFKFBBU1NLSVRfSU5TVEFMTE1FTlRTKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uPiB7CiAgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpQYXltZW50SW5zdGFsbG1lbnRD
b25maWd1cmF0aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRy
ZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9S
ZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoQ0dfRElTUExBWV9MSVNUX0JB
Q0tFRF9JTUFHRV9CVUZGRVIpCiAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaXhl
bEJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9DR0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXJBZGRpdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBA
IC0xMDUsMTMgKzEwNSwxMyBAQCBWZWN0b3I8dWludDhfdD4gQ0dEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gQ0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
cmNSZWN0KSBjb25zdAorT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IENHRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdAogewogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIENHRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmIGltYWdl
RGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9y
bWF0KQordm9pZCBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZl
cihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1
ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dE
aXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5k
LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9DR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDggKzUwLDggQEAgcHVibGljOgogICAgIC8vIE5PVEU6IFRoZXNlIGFsbCBBU1NFUlRfTk9U
X1JFQUNIRUQoKS4KICAgICBSZWZQdHI8V2ViQ29yZTo6TmF0aXZlSW1hZ2U+IGNvcHlOYXRpdmVJ
bWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9y
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEo
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJ
bWFnZURhdGEmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpIG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0
UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBp
eGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFdlYkNvcmU6OldlYkNvcmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0gdHJ1ZTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VEYXRh
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaXhlbEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0xNjMs
MTQgKzE2MywxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtCiAg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2JpdG1hcC0+ZGF0YSgp
KTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsK
LSAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0
LCBzcmNSZWN0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fYml0bWFwLT5kYXRh
KCkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCit2b2lk
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVm
ZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKKyAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW1hZ2VEYXRhOwotfQotCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgU2hhcmVhYmxlQml0bWFwOwpAQCAtNjMsOCArNTksOCBAQCBwdWJsaWM6
CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0
b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVz
b2x1dGlvbiA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6
UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIGJ5dGVzUGVy
Um93KCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0xQcm94eS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHk6OnBhaW50CiAKICAgICAvLyBGSVhNRTogV2UgY2Fubm90IHN5bmNocm9uaXplIHNvIHRo
YXQgd2Ugd291bGQga25vdyBubyBwZW5kaW5nIG9wZXJhdGlvbnMgYXJlIHVzaW5nIHRoZSBgYnVm
ZmVyYC4KIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6
Z2V0SW1hZ2VEYXRhIGV0IGFsIGRvIG5vdCB3YWl0IGZvciB0aGUgZmx1c2hlcyBvZiB0aGUgaW1h
Z2VzCisgICAgLy8gRklYTUU6IEN1cnJlbnRseSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpnZXRQ
aXhlbEJ1ZmZlciBldCBhbCBkbyBub3Qgd2FpdCBmb3IgdGhlIGZsdXNoZXMgb2YgdGhlIGltYWdl
cwogICAgIC8vIGluc2lkZSB0aGUgZGlzcGxheSBsaXN0cy4gUmF0aGVyLCBpdCBhc3N1bWVzIHRo
YXQgcHJvY2Vzc2luZyBpdHMgc2VxdWVuY2UgKGUuZy4gdGhlIGRpc3BsYXkgbGlzdCkgd2lsbCBl
cXVhbCB0byByZWFkIGZsdXNoIGJlaW5nCiAgICAgLy8gZnVsZmlsbGVkLiBGb3IgYmVsb3csIHdl
IGNhbm5vdCBjcmVhdGUgYSBuZXcgZmx1c2ggaWQgc2luY2Ugd2UgZ28gdGhyb3VnaCBkaWZmZXJl
bnQgc2VxdWVuY2UgKFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMIHNlcXVlbmNlKQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaAkocmV2aXNpb24gMjc3MjU1KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBtdWx0aURyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHQ0dMZW51bSBtb2RlLCBH
Q0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBmaXJzdHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4g
Y291bnRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNlQ291bnRzLCBHQ0dMc2l6
ZWkgZHJhd2NvdW50KSBmaW5hbDsKICAgICB2b2lkIG11bHRpRHJhd0VsZW1lbnRzQU5HTEUoR0NH
TGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5
cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdDR0xzaXplaSBkcmF3Y291bnQp
IGZpbmFsOwogICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQ0dMZW51
bSBtb2RlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwg
R0NHTFNwYW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVp
PiBpbnN0YW5jZUNvdW50cywgR0NHTHNpemVpIGRyYXdjb3VudCkgZmluYWw7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9QaXhlbEJ1ZmZlcigpIGZpbmFsOwogICAgIC8vIEVuZCBvZiBsaXN0IHVzZWQgYnkg
Z2VuZXJhdGUtZ3B1cC13ZWJnbCBzY3JpcHQuCiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94
eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25z
R2VuZXJhdGVkLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5RnVuY3Rpb25zR2Vu
ZXJhdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2NiwxMSArMjM2NiwxMSBAQCB2b2lkIFJl
bW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6Om11bHRpCiAgICAgfQogfQogCi1SZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4g
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhl
bEJ1ZmZlcigpCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gcmV0dXJuVmFsdWUg
PSB7IH07CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IHJldHVyblZhbHVlID0g
eyB9OwogICAgIGlmICghaXNDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIGF1dG8gc2VuZFJlc3Vs
dCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKSwgTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMOjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YTo6UmVwbHkocmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgYXV0byBzZW5kUmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpQYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCksIE1l
c3NhZ2VzOjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6UGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9Q
aXhlbEJ1ZmZlcjo6UmVwbHkocmV0dXJuVmFsdWUpKTsKICAgICAgICAgaWYgKCFzZW5kUmVzdWx0
KQogICAgICAgICAgICAgbWFya0NvbnRleHRMb3N0KCk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTQsMzggKzE5NCwzOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBiaXRt
YXAtPmNyZWF0ZUltYWdlKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAg
IE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGF1dG8gaW1h
Z2VEYXRhID0gV2ViQ29yZTo6SW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdC5zaXplKCkpOwotICAg
ICAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBzaXplX3QgZGF0YVNpemUgPSBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCk7CisgICAg
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKFdl
YkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQ6
OlJHQkE4LCBzcmNSZWN0LnNpemUoKSk7CisgICAgICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSBw
aXhlbEJ1ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKTsKIAogICAgICAgICBJUEM6OlRpbWVvdXQg
dGltZW91dCA9IDVfczsKLSAgICAgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnkgPSBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhKGRh
dGFTaXplLCB0aW1lb3V0KTsKKyAgICAgICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnkgPSBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZm
ZXIoZGF0YVNpemUsIHRpbWVvdXQpOwogICAgICAgICBpZiAoIXNoYXJlZE1lbW9yeSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgICAgICBhdXRvJiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSY+KCp0aGlzKTsKLSAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5y
ZWNvcmRlcigpLmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgICAgICBt
dXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkuZ2V0UGl4ZWxCdWZmZXIob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEcmF3aW5nQ29u
dGV4dEFzeW5jKCk7CiAKLSAgICAgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LT53YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZSh0aW1lb3V0KSkKLSAgICAgICAgICAgIG1l
bWNweShpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBkYXRh
U2l6ZSk7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2FpdEZv
ckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZSh0aW1lb3V0KSkKKyAgICAgICAgICAgIG1lbWNweShw
aXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSwgc2hhcmVkTWVtb3J5LT5kYXRhKCksIGRhdGFTaXpl
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtc2V0KGltYWdlRGF0YS0+ZGF0YSgpLmRh
dGEoKSwgMCwgZGF0YVNpemUpOwotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgICAgICAg
ICAgbWVtc2V0KHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpLCAwLCBkYXRhU2l6ZSk7CisgICAg
ICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdlRGF0YShX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVyKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6
OlBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIC8vIFRoZSBt
YXRoIGluc2lkZSBJbWFnZURhdGE6OmNyZWF0ZSgpIGRvZXNuJ3QgYWdyZWUgd2l0aCB0aGUgbWF0
aCBpbnNpZGUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoKSBhYm91dCBob3cgbV9y
ZXNvbHV0aW9uU2NhbGUgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgaW4gdGhlIEltYWdlQnVmZmVy
LgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgcHV0SW1hZ2VEYXRhKCkgaXMgb25seSBjYWxs
ZWQgd2hlbiByZXNvbHV0aW9uU2NhbGUoKSA9PSAxLgorICAgICAgICAvLyBUaGUgbWF0aCBpbnNp
ZGUgUGl4ZWxCdWZmZXI6OmNyZWF0ZSgpIGRvZXNuJ3QgYWdyZWUgd2l0aCB0aGUgbWF0aCBpbnNp
ZGUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcigpIGFib3V0IGhvdyBtX3Jlc29s
dXRpb25TY2FsZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGF0YSBpbiB0aGUgSW1hZ2VCdWZmZXIuCisg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBwdXRQaXhlbEJ1ZmZlcigpIGlzIG9ubHkgY2FsbGVk
IHdoZW4gcmVzb2x1dGlvblNjYWxlKCkgPT0gMS4KICAgICAgICAgQVNTRVJUKHJlc29sdXRpb25T
Y2FsZSgpID09IDEpOwotICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkucHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZv
cm1hdCk7CisgICAgICAgIG1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5wdXRQaXhlbEJ1ZmZl
cihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1h
dCk7CiAgICAgfQogCiAgICAgYm9vbCBwcmVmZXJzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNTAgKzE1MCw1MCBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVNoYXJlZE1lbW9yeSogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoc2l6
ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQgdGltZW91dCkKK1NoYXJlZE1lbW9yeSogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpzaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihzaXpl
X3QgZGF0YVNpemUsIElQQzo6VGltZW91dCB0aW1lb3V0KQogewogICAgIHNlbmREZWZlcnJlZFdh
a2V1cE1lc3NhZ2VJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBuZWVkc1NoYXJlZE1lbW9yeSA9ICFt
X2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSB8fCBkYXRhU2l6ZSA+IG1fZ2V0SW1hZ2VEYXRhU2hh
cmVkTWVtb3J5TGVuZ3RoOwotICAgIGJvb2wgbmVlZHNTZW1hcGhvcmUgPSAhbV9nZXRJbWFnZURh
dGFTZW1hcGhvcmU7CisgICAgYm9vbCBuZWVkc1NoYXJlZE1lbW9yeSA9ICFtX2dldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5IHx8IGRhdGFTaXplID4gbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9y
eUxlbmd0aDsKKyAgICBib29sIG5lZWRzU2VtYXBob3JlID0gIW1fZ2V0UGl4ZWxCdWZmZXJTZW1h
cGhvcmU7CiAKICAgICBpZiAobmVlZHNTaGFyZWRNZW1vcnkpCi0gICAgICAgIG1fZ2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5ID0gbnVsbHB0cjsKKyAgICAgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeSA9IG51bGxwdHI7CiAKICAgICBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGU7
CiAgICAgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlOwogCiAgICAgaWYgKG5lZWRzU2hhcmVkTWVt
b3J5ICYmIG5lZWRzU2VtYXBob3JlKQotICAgICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1h
Z2VEYXRhKGRhdGFTaXplKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0
ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YTo6UmVwbHkoaGFuZGxlLCBz
ZW1hcGhvcmUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6OlNl
bmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOworICAgICAg
ICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVk
TWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9y
R2V0UGl4ZWxCdWZmZXI6OlJlcGx5KGhhbmRsZSwgc2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRl
cmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKICAgICBlbHNlIGlmIChuZWVkc1NoYXJlZE1lbW9yeSkK
LSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0
ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YShkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGE6OlJlcGx5
KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2Vu
ZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CisgICAgICAg
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRN
ZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcihkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoaGFu
ZGxlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBDOjpTZW5kU3lu
Y09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKICAgICBlbHNlIGlm
IChuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldEltYWdlRGF0YSgpLCBNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6U2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhOjpSZXBseShzZW1hcGhv
cmUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0KTsKKyAgICAgICAgc2Vu
ZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldFBp
eGVsQnVmZmVyKCksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVG
b3JHZXRQaXhlbEJ1ZmZlcjo6UmVwbHkoc2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIoKSwgdGltZW91dCk7CiAKICAgICBpZiAoIWhhbmRsZS5oYW5kbGUuaXNOdWxsKCkpIHsK
LSAgICAgICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcCho
YW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICAg
ICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlMZW5ndGggPSBoYW5kbGUuZGF0YVNpemU7Cisg
ICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcCho
YW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICAg
ICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeUxlbmd0aCA9IGhhbmRsZS5kYXRhU2l6ZTsK
ICAgICB9CiAgICAgaWYgKG5lZWRzU2VtYXBob3JlKQotICAgICAgICBtX2dldEltYWdlRGF0YVNl
bWFwaG9yZSA9IFdURk1vdmUoc2VtYXBob3JlKTsKKyAgICAgICAgbV9nZXRQaXhlbEJ1ZmZlclNl
bWFwaG9yZSA9IFdURk1vdmUoc2VtYXBob3JlKTsKIAotICAgIGlmIChtX2Rlc3Ryb3lHZXRJbWFn
ZURhdGFTaGFyZWRNZW1vcnlUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2Rlc3Ryb3lHZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lci5zdG9wKCk7Ci0gICAgbV9kZXN0cm95R2V0SW1hZ2VE
YXRhU2hhcmVkTWVtb3J5VGltZXIuc3RhcnRPbmVTaG90KDVfcyk7CisgICAgaWYgKG1fZGVzdHJv
eUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9k
ZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5zdG9wKCk7CisgICAgbV9kZXN0
cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlUaW1lci5zdGFydE9uZVNob3QoNV9zKTsKIAot
ICAgIHJldHVybiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS5nZXQoKTsKKyAgICByZXR1cm4g
bV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeS5nZXQoKTsKIH0KIAotYm9vbCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JHZXRJbWFnZURhdGFUb0NvbXBsZXRlKElQQzo6VGlt
ZW91dCB0aW1lb3V0KQorYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JH
ZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0IHRpbWVvdXQpCiB7Ci0gICAgQVNT
RVJUKG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlKTsKLSAgICByZXR1cm4gbV9nZXRJbWFnZURhdGFT
ZW1hcGhvcmUtPndhaXRGb3IodGltZW91dCk7CisgICAgQVNTRVJUKG1fZ2V0UGl4ZWxCdWZmZXJT
ZW1hcGhvcmUpOworICAgIHJldHVybiBtX2dldFBpeGVsQnVmZmVyU2VtYXBob3JlLT53YWl0Rm9y
KHRpbWVvdXQpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJv
eUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCkKIHsKLSAgICBtX2dldElt
YWdlRGF0YVNoYXJlZE1lbW9yeSA9IG51bGxwdHI7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6RGVzdHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJl
ZE1lbW9yeSA9IG51bGxwdHI7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6RGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCksIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5X
YWl0aW5nRm9yU3luY1JlcGx5KTsKIH0KIAogU3RyaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbiwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBjbGFzcyBEaXNwbGF5TGlzdDsKIGNsYXNzIEl0ZW07CiB9CiBjbGFzcyBGbG9hdFNpemU7Ci1j
bGFzcyBJbWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIGVudW0gY2xhc3MgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiBib29sOwpAQCAtNzgsOSAr
NzgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2VuZERlZmVycmVkV2FrZXVwTWVzc2Fn
ZUlmTmVlZGVkKCk7CiAKLSAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9yeUZvckdldEltYWdl
RGF0YShzaXplX3QgZGF0YVNpemUsIElQQzo6VGltZW91dCk7Ci0gICAgYm9vbCB3YWl0Rm9yR2V0
SW1hZ2VEYXRhVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQpOwotICAgIHZvaWQgZGVzdHJveUdldElt
YWdlRGF0YVNoYXJlZE1lbW9yeSgpOworICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5Rm9y
R2V0UGl4ZWxCdWZmZXIoc2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQpOworICAgIGJvb2wg
d2FpdEZvckdldFBpeGVsQnVmZmVyVG9Db21wbGV0ZShJUEM6OlRpbWVvdXQpOworICAgIHZvaWQg
ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCk7CiAKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwpAQCAtMTM2LDEwICsxMzYsMTAgQEAgcHJpdmF0ZToKICAgICBPcHRp
b25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3VycmVudERlc3Rp
bmF0aW9uSW1hZ2VCdWZmZXJJZGVudGlmaWVyOwogICAgIE9wdGlvbmFsPEdQVVByb2Nlc3NXYWtl
dXBNZXNzYWdlQXJndW1lbnRzPiBtX2RlZmVycmVkV2FrZXVwTWVzc2FnZUFyZ3VtZW50czsKICAg
ICB1bnNpZ25lZCBtX3JlbWFpbmluZ0l0ZW1zVG9BcHBlbmRCZWZvcmVTZW5kaW5nV2FrZXVwIHsg
MCB9OwotICAgIE9wdGlvbmFsPElQQzo6U2VtYXBob3JlPiBtX2dldEltYWdlRGF0YVNlbWFwaG9y
ZTsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeTsK
LSAgICB1aW50NjRfdCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeUxlbmd0aCB7IDAgfTsKLSAg
ICBXZWJDb3JlOjpUaW1lciBtX2Rlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlUaW1lciB7
ICp0aGlzLCAmUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0SW1hZ2VEYXRh
U2hhcmVkTWVtb3J5IH07CisgICAgT3B0aW9uYWw8SVBDOjpTZW1hcGhvcmU+IG1fZ2V0UGl4ZWxC
dWZmZXJTZW1hcGhvcmU7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQaXhlbEJ1ZmZl
clNoYXJlZE1lbW9yeTsKKyAgICB1aW50NjRfdCBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5
TGVuZ3RoIHsgMCB9OworICAgIFdlYkNvcmU6OlRpbWVyIG1fZGVzdHJveUdldFBpeGVsQnVmZmVy
U2hhcmVkTWVtb3J5VGltZXIgeyAqdGhpcywgJlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5IH07CiAgICAgV2Vha1B0cjxHUFVQcm9j
ZXNzQ29ubmVjdGlvbj4gbV9ncHVQcm9jZXNzQ29ubmVjdGlvbjsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEzICsxMjAsMTMgQEAgVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdQogICAgIHJldHVybiB7IH07CiB9CiAKLVJlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdAorT3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0CiB7
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRQb2ludCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pCit2b2lkIEltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UG9pbnQmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAg
cHVibGljOgogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkg
b3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNPcmlnaW5BdFVwcGVyTGVm
dENvcm5lciA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGNhbk1hcEJhY2tpbmdT
dG9yZSA9IGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428221</attachid>
            <date>2021-05-10 16:58:10 -0700</date>
            <delta_ts>2021-05-10 18:34:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225584-20210510165809.patch</filename>
            <type>text/plain</type>
            <size>230412</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBAQAorMjAyMS0wNS0wOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhl
ciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29kZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1
ODQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBSZXBsYWNl
IHVzZSBvZiB0aGUgRE9NIGxheWVyICYgcmVmLWNvdW50ZWQgSW1hZ2VEYXRhIGNsYXNzIHdpdGgg
dGhlIG5ldyAKKyAgICAgICAgcGxhdGZvcm0gbGF5ZXIgUGl4ZWxCdWZmZXIgY2xhc3MsIHdoaWNo
IEltYWdlRGF0YSBub3cgdXNlcyBpbnRlcm5hbGx5LgorCisgICAgICAgIFNpbmNlIFBpeGVsQnVm
ZmVyIGlzIG5vdC1yZWZlcmVuY2UgY291bnRlZCBvciBoZWFwLWFsbG9jYXRlZCBpbiBtb3N0IGNh
c2VzLAorICAgICAgICBtYW55IHVzZXMgb2YgUmVmUHRyPEltYWdlRGF0YT4gdG8gaW5kaWNhdGUg
YSBwb3RlbnRpYWxseSBudWxsIEltYWdlRGF0YSBoYXZlCisgICAgICAgIGJlZW4gcmVwbGFjZWQg
d2l0aCBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4uIEdlbmVyYWxseSwgdGhpcyBhbGxvd3MgdXMgdG8g
cmVtb3ZlCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24gdGhhdCB3YXMgb25seSBu
ZWVkZWQgZm9yIHRoZSBET00gb2JqZWN0LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgdG8gbWFu
eSBmdW5jdGlvbnMgd2l0aCBJbWFnZURhdGEgaW4gdGhlaXIgbmFtZSBub3cgaGF2ZQorICAgICAg
ICBQaXhlbEJ1ZmZlciBpbiB0aGVpciBuYW1lIGluc3RlYWQsIGUuZy4gSW1hZ2VCdWZmZXI6Omdl
dEltYWdlRGF0YSBpcyBub3cKKyAgICAgICAgSW1hZ2VCdWZmZXI6OmdldFBpeGVsQnVmZmVyICh0
aG91Z2ggSSB0aGluayBjaGFuZ2luZyB0aGlzIGluIHRoZSBmdXR1cmUgdG8gCisgICAgICAgIElt
YWdlQnVmZmVyOjpjb3B5UGl4ZWxCdWZmZXIgaXMgYSBnb29kIGlkZWEpLgorCisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
b25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRv
RGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9CbG9iKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgorICAg
ICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRt
YXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0ltYWdlRGF0
YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEYXRhOjpwaXhlbEJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0UGl4ZWxCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0
aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBs
aWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlw
bGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBs
aWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VE
YXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1
ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQnVmZmVyU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpQaXhlbEJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpn
ZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldElt
YWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4
ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5k
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6
OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpkZXN0
cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZlQ29w
eSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNpemVP
Zkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJ
bWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
R2V0UGl4ZWxCdWZmZXI6OkdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRQaXhlbEJ1ZmZlcjo6cGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YTo6R2V0SW1hZ2VEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE6Om91dHB1
dEZvcm1hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
R2V0SW1hZ2VEYXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmlucHV0Rm9ybWF0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VE
YXRhOjpzcmNSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQdXRJbWFnZURhdGE6OmRlc3RQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZXN0Rm9ybWF0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmxvY2Fs
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQ
dXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZm
ZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVy
VG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydElt
YWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0
YVRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlDb252ZXJ0ZWRJbWFnZURhdGFUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVy
c2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0c0Zv
clBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZWFkQ29tcG9zaXRlZFJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xF
Uy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZG5Q
aXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQ
aXhlbHNGb3JQYWludFJlc3VsdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnB1dEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6CisgICAgICAgICogcmVuZGVyaW5nL0NT
U0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMS0wNS0wOSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgcHJvdGVjdGlvbiBvZiB0
aGUgcGl4ZWwgYnVmZmVyIGluIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSByZW1vdmVk
IGluIHIyNzcyMzcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA3NiwxMyArMTA3NiwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAg
Y29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAg
ICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9
KTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgYXV0byBwaXhlbEJ1ZmZlciA9
IGJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgaWYgKCFw
aXhlbEJ1ZmZlcikgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2Rl
OjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCkucG9zc2libHlTaGFyZWRC
dWZmZXIoKTsKKyAgICAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHBpeGVsQnVmZmVyLT5kYXRhKCku
cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgewogICAg
ICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTUwLDYgKzMxNTAsNyBAQCBwcml2YXRlOgogICAg
ICAgICBJbnRTaXplIGltYWdlRGF0YVNpemUgPSBsb2dpY2FsU2l6ZTsKICAgICAgICAgaW1hZ2VE
YXRhU2l6ZS5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBDcmVh
dGluZyB0aGlzIEltYWdlRGF0YSBpcyBub3QgbmVjZXNzYXJ5LiBXZSBzaG91bGQgc2tpcCByaWdo
dCB0byBjcmVhdGluZyBhIFBpeGVsQnVmZmVyIGRpcmVjdGx5LgogICAgICAgICBhdXRvIGltYWdl
RGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVNpemUsIGFycmF5LnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgZmFpbCgpOwpA
QCAtMzE2Miw3ICszMTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJv
KCksIGxvZ2ljYWxTaXplIH0pOworICAgICAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIo
KSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAogICAgICAgICBhdXRvIGJp
dG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUoYnVm
ZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXphdGlv
blN0YXRlKSkpOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NDMsNyArNzQzLDcgQEAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IEhUTUxD
YW52YXNFbAogI2lmIFVTRShDRykKICAgICAvLyBUcnkgdG8gZ2V0IEltYWdlRGF0YSBmaXJzdCwg
YXMgdGhhdCBtYXkgYXZvaWQgbG9zc3kgY29udmVyc2lvbnMuCiAgICAgaWYgKGF1dG8gaW1hZ2VE
YXRhID0gZ2V0SW1hZ2VEYXRhKCkpCi0gICAgICAgIHJldHVybiBVbmNhY2hlZFN0cmluZyB7IGRh
dGFVUkwoKmltYWdlRGF0YSwgZW5jb2RpbmdNSU1FVHlwZSwgcXVhbGl0eSkgfTsKKyAgICAgICAg
cmV0dXJuIFVuY2FjaGVkU3RyaW5nIHsgZGF0YVVSTChpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCks
IGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkpIH07CiAjZW5kaWYKIAogICAgIG1ha2VSZW5kZXJp
bmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC03NzQsNyArNzc0LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIFVTRShDRykKICAgICBpZiAoYXV0byBpbWFn
ZURhdGEgPSBnZXRJbWFnZURhdGEoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYjsKLSAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0gZGF0YSgqaW1hZ2VEYXRhLCBlbmNvZGlu
Z01JTUVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JEYXRhID0g
ZGF0YShpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIGVuY29kaW5nTUlNRVR5cGUsIHF1YWxpdHkp
OwogICAgICAgICBpZiAoIWJsb2JEYXRhLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJsb2IgPSBC
bG9iOjpjcmVhdGUoJmRvY3VtZW50KCksIFdURk1vdmUoYmxvYkRhdGEpLCBlbmNvZGluZ01JTUVU
eXBlKTsKICAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgV1RGTW92
ZShibG9iKSk7CkBAIC04MTIsNyArODEyLDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENhbnZh
c0VsZW1lbnQ6OmdldAogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2Nv
bnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgpKTsKLSAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2NvbnRl
eHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVybiBJ
bWFnZURhdGE6OmNyZWF0ZShkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigqbV9j
b250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkpOwogICAgIH0KICNl
bmRpZgogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUJpdG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1h
cC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDYsMTAgKzgwNiw5IEBAIHZvaWQgSW1hZ2VCaXRt
YXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAvLyBJZiBubyBjcm9wcGluZywgcmVzaXpp
bmcsIGZsaXBwaW5nLCBldGMuIGFyZSBuZWVkZWQsIHRoZW4gc2ltcGx5IHVzZSB0aGUKICAgICAv
LyByZXN1bHRpbmcgSW1hZ2VCdWZmZXIgZGlyZWN0bHkuCiAgICAgYXV0byBhbHBoYVByZW11bHRp
cGxpY2F0aW9uID0gYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0
aW9ucy5wcmVtdWx0aXBseUFscGhhKTsKLSAgICBpZiAoc291cmNlUmVjdGFuZ2xlLnJldHVyblZh
bHVlKCkubG9jYXRpb24oKS5pc1plcm8oKSAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJuVmFsdWUo
KS5zaXplKCkgPT0gaW1hZ2VEYXRhLT5zaXplKCkKLSAgICAgICAgJiYgc291cmNlUmVjdGFuZ2xl
LnJldHVyblZhbHVlKCkuc2l6ZSgpID09IG91dHB1dFNpemUKLSAgICAgICAgJiYgb3B0aW9ucy5p
bWFnZU9yaWVudGF0aW9uID09IEltYWdlQml0bWFwT3B0aW9uczo6T3JpZW50YXRpb246Ok5vbmUp
IHsKLSAgICAgICAgYml0bWFwRGF0YS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc291cmNlUmVjdGFuZ2xlLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIGlmIChzb3Vy
Y2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5sb2NhdGlvbigpLmlzWmVybygpICYmIHNvdXJjZVJl
Y3RhbmdsZS5yZXR1cm5WYWx1ZSgpLnNpemUoKSA9PSBpbWFnZURhdGEtPnNpemUoKSAmJiBzb3Vy
Y2VSZWN0YW5nbGUucmV0dXJuVmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZSAmJiBvcHRpb25z
LmltYWdlT3JpZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6Tm9u
ZSkgeworICAgICAgICBiaXRtYXBEYXRhLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YS0+cGl4ZWxCdWZmZXIoKSwgc291cmNl
UmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IH0sIGFscGhhUHJlbXVsdGlwbGljYXRp
b24pOworICAgICAgICAKICAgICAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFnZUJp
dG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSkpOwogICAgICAgICAvLyBUaGUgcmVzdWx0
IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRpb24g
aGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgICAgICBwcm9taXNlLnJlc29sdmUoV1RGTW92
ZShpbWFnZUJpdG1hcCkpOwpAQCAtODIzLDcgKzgyMiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVmZmVy
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRydWUsIFdURk1vdmUocHJvbWlzZSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIHRlbXBCaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRSZWN0KDAs
IDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSksIHsgfSwgYWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbik7CisgICAgdGVtcEJpdG1hcERhdGEtPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhLT5waXhlbEJ1
ZmZlcigpLCBJbnRSZWN0KDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWln
aHQoKSksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgRmxvYXRSZWN0IGRlc3RS
ZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcigqdGVtcEJpdG1hcERhdGEsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5n
bGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVR
dWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRh
dGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZURhdGEuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIxICs0MywxNiBAQCBDaGVja2VkPHVu
c2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gSW1hZ2VECiAgICAgcmV0dXJuIGNoZWNrZWREYXRhU2l6
ZTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKHVu
c2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRl
KFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIpCiB7Ci0gICAgaWYgKCFzdyB8fCAhc2gpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIEludFNpemUgc2l6
ZShzdywgc2gpOwotICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNpemUp
OwotICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoaXMgc2l6
ZSJfcyB9OwotICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOwotICAgIGlmICghYnl0ZUFycmF5
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhICJyZWFsIiBvdXQg
b2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxsZWQgb24gaXQ/Ci0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9mIG1lbW9yeSJfcyB9
OwotICAgIH0KLSAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0pKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURhdGEoV1RGTW92ZShwaXhlbEJ1ZmZlcikpKTsKK30KKwor
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
JiYgcGl4ZWxCdWZmZXIpCit7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKFdURk1vdmUoKnBpeGVsQnVm
ZmVyKSk7CiB9CiAKIFJlZlB0cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0IElu
dFNpemUmIHNpemUpCkBAIC04MCw2ICs3NSwyMyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURh
dGE6OmNyZWF0ZShjb25zCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIFdURk1v
dmUoYnl0ZUFycmF5KSB9KSk7CiB9CiAKK0V4Y2VwdGlvbk9yPFJlZjxJbWFnZURhdGE+PiBJbWFn
ZURhdGE6OmNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gpCit7CisgICAgaWYgKCFzdyB8
fCAhc2gpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OworICAg
IEludFNpemUgc2l6ZShzdywgc2gpOworICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRh
dGFTaXplKHNpemUpOworICAgIGlmIChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiQ2Fubm90IGFsbG9jYXRlIGEgYnVmZmVy
IG9mIHRoaXMgc2l6ZSJfcyB9OworICAgIGF1dG8gYnl0ZUFycmF5ID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YVNpemUudW5zYWZlR2V0KCkpOworICAgIGlm
ICghYnl0ZUFycmF5KSB7CisgICAgICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCB0byBiZSBh
ICJyZWFsIiBvdXQgb2YgbWVtb3J5IGVycm9yIHdpdGggc2V0T3V0T2ZNZW1vcnlFcnJvciBjYWxs
ZWQgb24gaXQ/CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCAiT3V0IG9m
IG1lbW9yeSJfcyB9OworICAgIH0KKyAgICBieXRlQXJyYXktPnplcm9GaWxsKCk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNpemUsIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0p
KTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKFJl
ZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25hbDx1
bnNpZ25lZD4gc2gpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnl0ZUFycmF5LT5sZW5ndGgo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURhdGEgOiBwdWJsaWMgUmVm
Q291bnRlZDxJbWFnZURhdGE+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQg
c2gpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SW1hZ2VEYXRhPiBjcmVhdGUoUGl4
ZWxCdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+
IGNyZWF0ZShPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwg
UmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhj
ZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZSh1bnNpZ25lZCBzdywgdW5zaWduZWQgc2gp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRhPj4g
Y3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFsPHVu
c2lnbmVkPiBzaCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlRGF0YSgpOwogCkBAIC01Miw2
ICs1NCw4IEBAIHB1YmxpYzoKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxCdWZmZXIuY29sb3JTcGFjZSgpOyB9CiAgICAgUGl4ZWxG
b3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbEJ1ZmZlci5mb3JtYXQoKTsgfQog
CisgICAgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9w
aXhlbEJ1ZmZlcjsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEltYWdlRGF0YShQaXhlbEJ1
ZmZlciYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTk5LDE0ICsyMTk5LDE0IEBAIEV4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAg
IGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKLSAgICBpZiAoIWltYWdlRGF0
YSkgeworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBidWZmZXItPmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAg
aWYgKCFwaXhlbEJ1ZmZlcikgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFibGUgdG8gZ2V0
IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBpbWFnZURhdGFS
ZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJldHVy
biBpbWFnZURhdGE7CisgICAgcmV0dXJuIHsgeyBJbWFnZURhdGE6OmNyZWF0ZShXVEZNb3ZlKCpw
aXhlbEJ1ZmZlcikpIH0gfTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBpbnQgZHgsIGludCBkeSkKQEAgLTIyNDYs
NyArMjI0Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW0KICAg
ICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRh
LmhlaWdodCgpIH0pOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
YnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludCB7IGRlc3RPZmZzZXQgfSk7CisgICAgICAg
IGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBkYXRhLnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVzdE9m
ZnNldCB9KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsgLy8g
aWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzYsMTIgKzEyMzYs
MTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbgogICAgIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKmJhc2UuYnVmZmVyKCkpOwogfQog
Ci1SZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgY2xlYXJJZkNvbXBvc2l0ZWQo
Q2xlYXJDYWxsZXJPdGhlcik7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVu
c2lvbkZsYWcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4dHVyZUV4dGVuc2lvbkZsYWdz
KCkgY29uc3QKQEAgLTQ3ODQsNyArNDc4NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICAgICAvLyBUaGUgVU5TSUdORURfSU5UXzEwRl8x
MUZfMTFGX1JFViB0eXBlIHBhY2svdW5wYWNrIGlzbid0IGltcGxlbWVudGVkLgogICAgICAgICAg
ICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgYWRqdXN0ZWRTb3VyY2VJbWFn
ZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBpZiAo
IW1fY29udGV4dC0+ZXh0cmFjdFBpeGVsQnVmZmVyKHBpeGVscy0+cGl4ZWxCdWZmZXIoKSwgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBhZGp1c3RlZFNvdXJjZUltYWdlUmVj
dCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFks
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdl
MkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwcmVwYXJlRm9y
RGlzcGxheVdpdGhQYWludCgpIGZpbmFsOwogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSgpOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlbW92ZVNoYXJlZE9iamVj
dChXZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChXZWJH
TENvbnRleHRPYmplY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQg
UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICAgICAgICAgICAgICAgICBhdXRv
IHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhl
bEZvcm1hdDo6QkdSQTgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVj
dChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZm
ZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZl
ci0+cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBpbWFnZURhdGEtPnBpeGVsQnVmZmVyKCksIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAgICAg
ICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6
Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25j
cmV0ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMCwyMCArMjMwLDIwIEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CiAgICAgICAgICAgICBj
b25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3Jj
UmVjdCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0UGl4ZWxCdWZmZXIob3V0cHV0
Rm9ybWF0LCBzcmNSZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGlt
YWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKKyAgICB2b2lkIHB1dFBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVy
JiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAgICAg
ICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5w
dXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZl
ciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKICAgICAgICAgfQogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzY0LDEyICs3NjQsMTAgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTDo6cGFja0ltYWdlRGF0YShJbQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhLCBE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3Vi
UmVjdGFuZ2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RQaXhl
bEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERhdGFGb3JtYXQgc291cmNl
RGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBk
ZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKQogewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFnZURh
dGEtPmhlaWdodCgpOworICAgIGludCB3aWR0aCA9IHBpeGVsQnVmZmVyLnNpemUoKS53aWR0aCgp
OworICAgIGludCBoZWlnaHQgPSBwaXhlbEJ1ZmZlci5zaXplKCkuaGVpZ2h0KCk7CiAKICAgICB1
bnNpZ25lZCBwYWNrZWRTaXplOwogICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2Vk
IChhbGlnbm1lbnQgPT0gMSkuCkBAIC03NzksNyArNzc3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTDo6ZXh0cmFjdEltYWdlRGF0YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGF0YS5y
ZXNpemUocGFja2VkU2l6ZSk7CiAKLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRh
KCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1
YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBy
ZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3Ro
aW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgIGlmICghcGFja1BpeGVscyhwaXhlbEJ1ZmZl
ci5kYXRhKCkuZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJ
bWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6
RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFeHRl
bnNpb25zR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJ
bWFnZURhdGE7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNF
KEFWRk9VTkRBVElPTikKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1Y7CkBAIC0xMjkyLDcgKzEy
OTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gZGlzcGxheSBidWZmZXIgYWJzdHJhY3Rpb25zIHRoYXQg
dGhlIGNhbGxlciBzaG91bGQgaG9sZCBzZXBhcmF0ZSB0bwogICAgIC8vIHRoZSBjb250ZXh0Lgog
ICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZl
ciYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciYpID0gMDsKIAog
ICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBUaGUgbGF5ZXIgc2hvdWxkIGJl
IG1hcmtlZCBjb21wb3NpdGVkIGJ5CkBAIC0xMzQzLDExICsxMzQzLDExIEBAIHB1YmxpYzoKICAg
ICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgogICAgIHN0YXRp
YyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRl
cHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0ZXMs
IHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7CiAK
LSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBpbnRv
IHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUg
Z2l2ZW4gUGl4ZWxCdWZmZXIgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKICAgICAvLyBwYWNraW5n
IHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAog
ICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4g
UmV0dXJucyB0cnVlCiAgICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4dHJh
Y3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNl
SW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0UGl4
ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXImLCBEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCiAgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKICAgICAvLyBkYXRh
LCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5j
cHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsOCAr
MTI2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxv
cHQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBv
ZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCiAg
ICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJ
R05FRF9CWVRFIHR5cGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Miwy
MjcgKzYyLDIyNyBAQCBSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0luCiAg
ICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0
aW9uKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7CisgICAgZHJhdyhkZXN0aW5hdGlvbkNvbnRleHQsIGRlc3RpbmF0aW9uUmVjdCwgc291cmNl
UmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwotICAg
IGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwor
ICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHNyY1Bp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVu
Z3RoID0gc3JjUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxB
cnJheS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxP
ZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVp
bnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAgICB1
aW50OF90IGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKICAgICAgICAgaWYg
KCFhKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVs
QXJyYXkuaXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgdWludDhfdCByID0gcGl4ZWxBcnJh
eS5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHBpeGVsQXJyYXkuaXRlbShw
aXhlbE9mZnNldCArIDIpOwogCiAgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBn
ICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBz
cmNQaXhlbEFycmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAgIH0KIAotICAgIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGxv
Z2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpOworICAgIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQnVmZmVyLCBsb2dpY2FsUmVjdCgpLCBJbnRQb2ludDo6
emVybygpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIH0KIAogVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBj
b25zdAogewogICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIGxvZ2ljYWxTaXplKCkuYXJl
YSgpLnVuc2FmZUdldCgpKTsKLSAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbG9naWNhbFNp
emUoKS53aWR0aCgpICogNDsKLSAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOworICAgIHNpemVfdCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93ID0gbG9naWNhbFNpemUoKS53
aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc291cmNlQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygp
OwogCi0gICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRh
dGEpOworICAgIHVpbnQ4X3QqIHNvdXJjZVJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihkYXRhKTsKIAogICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4ZWxGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2lj
YWxTaXplKCkpOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBwaXhlbEZvcm1hdCgpLCBzb3VyY2VCeXRlc1BlclJvdywgc291cmNlUm93cywKKyAgICAgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6QkdS
QTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIGxvZ2ljYWxTaXplKCkp
OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzcmNQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVsRm9ybWF0LCB1aW50OF90
KiBkZXN0UGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBk
ZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAg
ICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAgaWYgKCFhbHBoYSkgewotICAg
ICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IDA7CisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IDA7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4ZWxGb3JtYXQgPT0gZGVz
dFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVsw
XTsKKyAgICBpZiAoc291cmNlUGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkg
eworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhlbClb
MF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlUGl4ZWwpWzBdOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JB
IDwtPiBSR0JBLgotICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOwotICAgIGRlc3RQaXhl
bFsxXSA9IHNyY1BpeGVsWzFdOwotICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOwotICAg
IGRlc3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSBz
b3VyY2VQaXhlbFsyXTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gc291cmNlUGl4ZWxbMV07
CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IHNvdXJjZVBpeGVsWzBdOworICAgIGRlc3RpbmF0
aW9uUGl4ZWxbM10gPSBzb3VyY2VQaXhlbFszXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNv
cHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3Jt
YXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQs
IHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGll
ZFRvVW5wcmVtdWx0aXBsaWVkKFBpeGVsRm9ybWF0IHNvdXJjZVBpeGVsRm9ybWF0LCBjb25zdCB1
aW50OF90KiBzb3VyY2VQaXhlbCwgUGl4ZWxGb3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwg
dWludDhfdCogZGVzdGluYXRpb25QaXhlbCkKIHsKLSAgICB1aW50OF90IGFscGhhID0gc3JjUGl4
ZWxbM107CisgICAgdWludDhfdCBhbHBoYSA9IHNvdXJjZVBpeGVsWzNdOwogICAgIGlmICghYWxw
aGEgfHwgYWxwaGEgPT0gMjU1KSB7Ci0gICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkKHNyY1BpeGVsRm9ybWF0LCBzcmNQaXhlbCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0UGl4
ZWwpOworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzb3VyY2VQaXhl
bEZvcm1hdCwgc291cmNlUGl4ZWwsIGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9u
UGl4ZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNyY1BpeGVsRm9ybWF0
ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxb
MF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAq
IDI1NSkgLyBhbHBoYTsKLSAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1
KSAvIGFscGhhOwotICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICBpZiAoc291cmNl
UGl4ZWxGb3JtYXQgPT0gZGVzdGluYXRpb25QaXhlbEZvcm1hdCkgeworICAgICAgICBkZXN0aW5h
dGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAg
ICAgICBkZXN0aW5hdGlvblBpeGVsWzJdID0gKHNvdXJjZVBpeGVsWzJdICogMjU1KSAvIGFscGhh
OworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxwaGE7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAg
ZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwotICAgIGRlc3RQaXhl
bFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cisg
ICAgZGVzdGluYXRpb25QaXhlbFswXSA9IChzb3VyY2VQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsK
KyAgICBkZXN0aW5hdGlvblBpeGVsWzFdID0gKHNvdXJjZVBpeGVsWzFdICogMjU1KSAvIGFscGhh
OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSAoc291cmNlUGl4ZWxbMF0gKiAyNTUpIC8gYWxw
aGE7CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IGFscGhhOwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChQaXhlbEZvcm1hdCBzcmNQ
aXhlbEZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIFBpeGVsRm9ybWF0IGRlc3RQaXhl
bEZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQs
IGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQaXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVs
Rm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsKQogewotICAgIHVpbnQ4X3QgYWxwaGEg
PSBzcmNQaXhlbFszXTsKKyAgICB1aW50OF90IGFscGhhID0gc291cmNlUGl4ZWxbM107CiAgICAg
aWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKLSAgICAgICAgY29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQoc3JjUGl4ZWxGb3JtYXQsIHNyY1BpeGVsLCBkZXN0UGl4ZWxGb3JtYXQs
IGRlc3RQaXhlbCk7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNv
dXJjZVBpeGVsRm9ybWF0LCBzb3VyY2VQaXhlbCwgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgZGVz
dGluYXRpb25QaXhlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3JjUGl4
ZWxGb3JtYXQgPT0gZGVzdFBpeGVsRm9ybWF0KSB7Ci0gICAgICAgIGRlc3RQaXhlbFswXSA9IChz
cmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgZGVzdFBpeGVsWzFdID0g
KHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgIGRlc3RQaXhlbFsz
XSA9IGFscGhhOworICAgIGlmIChzb3VyY2VQaXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVs
Rm9ybWF0KSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSAoc291cmNlUGl4ZWxbMF0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291
cmNlUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4
ZWxbMl0gPSAoc291cmNlUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWxbM10gPSBhbHBoYTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KLSAgICBkZXN0UGl4ZWxbMF0g
PSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgZGVzdFBpeGVsWzFdID0g
KHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgIGRlc3RQaXhlbFsyXSA9IChz
cmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICBkZXN0UGl4ZWxbM10gPSBhbHBo
YTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gKHNvdXJjZVBpeGVsWzJdICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSAoc291cmNlUGl4ZWxbMV0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IChzb3VyY2VQaXhl
bFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gYWxw
aGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11
bHRpcGxpZWQoUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1Bp
eGVsLCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoUGl4
ZWxGb3JtYXQgc291cmNlUGl4ZWxGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsLCBQ
aXhlbEZvcm1hdCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCB1aW50OF90KiBkZXN0aW5hdGlvblBp
eGVsKQogewotICAgIGlmIChzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQpIHsKLSAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgIGlmIChzb3VyY2VQ
aXhlbEZvcm1hdCA9PSBkZXN0aW5hdGlvblBpeGVsRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2VQaXhlbClbMF07CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCi0gICAgZGVz
dFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Ci0gICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07
Ci0gICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07Ci0gICAgZGVzdFBpeGVsWzNdID0gc3Jj
UGl4ZWxbM107CisgICAgZGVzdGluYXRpb25QaXhlbFswXSA9IHNvdXJjZVBpeGVsWzJdOworICAg
IGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBzb3VyY2VQaXhlbFsxXTsKKyAgICBkZXN0aW5hdGlvblBp
eGVsWzJdID0gc291cmNlUGl4ZWxbMF07CisgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IHNvdXJj
ZVBpeGVsWzNdOwogfQogCiB0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKFBpeGVsRm9ybWF0
LCBjb25zdCB1aW50OF90KiwgUGl4ZWxGb3JtYXQsIHVpbnQ4X3QqKT4KIHN0YXRpYyBpbmxpbmUg
dm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAotICAgIFBpeGVsRm9ybWF0IHNyY1Bp
eGVsRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKLSAg
ICBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgUGl4ZWxGb3JtYXQg
c291cmNlUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBz
b3VyY2VSb3dzLAorICAgIFBpeGVsRm9ybWF0IGRlc3RpbmF0aW9uUGl4ZWxGb3JtYXQsIHVuc2ln
bmVkIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUm93cywgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRo
KCkgKiA0OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7CiAg
ICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKLSAgICAg
ICAgICAgIGNvcHlGdW5jdG9yKHNyY1BpeGVsRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdFBpeGVs
Rm9ybWF0LCAmZGVzdFJvd3NbeF0pOwotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93
OwotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgICAgICBjb3B5
RnVuY3Rvcihzb3VyY2VQaXhlbEZvcm1hdCwgJnNvdXJjZVJvd3NbeF0sIGRlc3RpbmF0aW9uUGl4
ZWxGb3JtYXQsICZkZXN0aW5hdGlvblJvd3NbeF0pOworICAgICAgICBzb3VyY2VSb3dzICs9IHNv
dXJjZUJ5dGVzUGVyUm93OworICAgICAgICBkZXN0aW5hdGlvblJvd3MgKz0gZGVzdGluYXRpb25C
eXRlc1BlclJvdzsKICAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1h
Z2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90
KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBQ
aXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWlu
dDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CisgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzb3VyY2VBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc291cmNlUGl4ZWxG
b3JtYXQsIHVuc2lnbmVkIHNvdXJjZUJ5dGVzUGVyUm93LCB1aW50OF90KiBzb3VyY2VSb3dzLAor
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBoYUZvcm1hdCwgUGl4ZWxG
b3JtYXQgZGVzdGluYXRpb25QaXhlbEZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1Bl
clJvdywgdWludDhfdCogZGVzdGluYXRpb25Sb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25z
dAogewogICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldHRpbmcgb3IgcHV0dGlu
ZyBwaXhlbCBkYXRhIHdpdGggZGVlcCBjb2xvciBidWZmZXJzLgotICAgIEFTU0VSVChzcmNQaXhl
bEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgc3JjUGl4ZWxGb3JtYXQgPT0gUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKLSAgICBBU1NFUlQoZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0
OjpSR0JBOCB8fCBkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBB
U1NFUlQoc291cmNlUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNvdXJjZVBp
eGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgQVNTRVJUKGRlc3RpbmF0aW9u
UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGRlc3RpbmF0aW9uUGl4ZWxGb3Jt
YXQgPT0gUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKIAotICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBk
ZXN0QWxwaGFGb3JtYXQpIHsKLSAgICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQaXhl
bEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0ID09
IGRlc3RpbmF0aW9uQWxwaGFGb3JtYXQpIHsKKyAgICAgICAgaWYgKHNvdXJjZUFscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAgICBj
b3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkPihzb3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRl
c3RpbmF0aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9u
Um93cywgc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvcHlJbWFnZVBpeGVsc1Vu
YWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNQaXhl
bEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgICAgICBjb3B5SW1hZ2VQaXhlbHNV
bmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc291cmNl
UGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLCBkZXN0aW5hdGlvblBp
eGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIHNpemUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVk
PihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1h
dCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKGRlc3RpbmF0aW9u
QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7
CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRU
b1VucHJlbXVsdGlwbGllZD4oc291cmNlUGl4ZWxGb3JtYXQsIHNvdXJjZUJ5dGVzUGVyUm93LCBz
b3VyY2VSb3dzLCBkZXN0aW5hdGlvblBpeGVsRm9ybWF0LCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93
LCBkZXN0aW5hdGlvblJvd3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Y29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RQaXhl
bEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgY29weUltYWdl
UGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihz
b3VyY2VQaXhlbEZvcm1hdCwgc291cmNlQnl0ZXNQZXJSb3csIHNvdXJjZVJvd3MsIGRlc3RpbmF0
aW9uUGl4ZWxGb3JtYXQsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3csIGRlc3RpbmF0aW9uUm93cywg
c2l6ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEltYWdl
QnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
aW5hdGlvbkFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCB2b2lkKiBkYXRh
KSBjb25zdAogewotICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5h
dGVzKHNyY1JlY3QpOworICAgIGF1dG8gc291cmNlUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKHNvdXJjZVJlY3QpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNy
ZWF0ZShzcmNSZWN0U2NhbGVkLnNpemUoKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5
Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBz
b3VyY2VSZWN0U2NhbGVkLnNpemUoKSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBpbnRl
cnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVjdCBkZXN0
UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07CisgICAg
SW50UmVjdCBzb3VyY2VSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBz
b3VyY2VSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IHsgSW50UG9p
bnQ6Onplcm8oKSwgc291cmNlUmVjdENsaXBwZWQuc2l6ZSgpIH07CiAKLSAgICBpZiAoc3JjUmVj
dFNjYWxlZC54KCkgPCAwKQotICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVkLngo
KSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdGluYXRp
b25SZWN0LnNldFgoLXNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2Nh
bGVkLnkoKSA8IDApCi0gICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RTY2FsZWQueSgpKTsK
KyAgICBpZiAoc291cmNlUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0aW5hdGlvblJl
Y3Quc2V0WSgtc291cmNlUmVjdFNjYWxlZC55KCkpOwogCi0gICAgaWYgKGRlc3RSZWN0LnNpemUo
KSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKLSAgICAgICAgaW1hZ2VEYXRhLT5kYXRhKCkuemVy
b0ZpbGwoKTsKKyAgICBpZiAoZGVzdGluYXRpb25SZWN0LnNpemUoKSAhPSBzb3VyY2VSZWN0U2Nh
bGVkLnNpemUoKSkKKyAgICAgICAgcGl4ZWxCdWZmZXItPmRhdGEoKS56ZXJvRmlsbCgpOwogCi0g
ICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsK
LSAgICB1aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSArIGRlc3RS
ZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgdW5zaWdu
ZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VSZWN0U2NhbGVkLndpZHRoKCk7
CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRh
KCkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJvdyArIGRlc3Rp
bmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdygpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVj
dENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisgICAgdWludDhfdCogc291cmNlUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KGRhdGEpICsgc291cmNlUmVjdENsaXBwZWQueSgpICogc291cmNlQnl0ZXNQZXJSb3cg
KyBzb3VyY2VSZWN0Q2xpcHBlZC54KCkgKiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAotICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1hdCgp
LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhlbEZv
cm1hdDo6UkdCQTgsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVsRm9y
bWF0KCksIHNvdXJjZUJ5dGVzUGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5hdGlv
bkFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3cs
IGRlc3RpbmF0aW9uUm93cywgZGVzdGluYXRpb25SZWN0LnNpemUoKSk7CiAKLSAgICByZXR1cm4g
aW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0
LCB2b2lkKiBkYXRhKQordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlQWxwaGFGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVy
JiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RpbmF0aW9uUG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdGluYXRpb25BbHBo
YUZvcm1hdCwgdm9pZCogZGF0YSkKIHsKLSAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0b0Jh
Y2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKLSAgICBJbnRQb2ludCBkZXN0UG9pbnRTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOworICAgIGF1dG8gc291cmNlUmVjdFNj
YWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNvdXJjZVJlY3QpOworICAgIGF1dG8gZGVzdGlu
YXRpb25Qb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RpbmF0aW9uUG9pbnQp
OwogCi0gICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IEludFBvaW50
Ojp6ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7Ci0gICAgSW50UmVj
dCBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOwotICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9p
bnRTY2FsZWQpOworICAgIEludFJlY3Qgc291cmNlUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24o
eyBJbnRQb2ludDo6emVybygpLCBwaXhlbEJ1ZmZlci5zaXplKCkgfSwgc291cmNlUmVjdFNjYWxl
ZCk7CisgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBzb3VyY2VSZWN0Q2xpcHBlZDsKKyAg
ICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KGRlc3RpbmF0aW9uUG9pbnRTY2FsZWQpOwogCi0gICAg
aWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKLSAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0UmVj
dC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisgICAgaWYgKHNvdXJjZVJlY3RTY2FsZWQueCgp
IDwgMCkKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNldFgoZGVzdGluYXRpb25SZWN0LngoKSAt
IHNvdXJjZVJlY3RTY2FsZWQueCgpKTsKIAotICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8IDAp
Ci0gICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxlZC55KCkp
OworICAgIGlmIChzb3VyY2VSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5zZXRZKGRlc3RpbmF0aW9uUmVjdC55KCkgLSBzb3VyY2VSZWN0U2NhbGVkLnkoKSk7CiAK
LSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7Ci0gICAgc3JjUmVjdENsaXBw
ZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNl
Y3QoYmFja2VuZFJlY3QoKSk7CisgICAgc291cmNlUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0aW5h
dGlvblJlY3Quc2l6ZSgpKTsKIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0Lngo
KSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25CeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93
KCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Sb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oZGF0YSkgKyBkZXN0aW5hdGlvblJlY3QueSgpICogZGVzdGluYXRpb25CeXRlc1BlclJv
dyArIGRlc3RpbmF0aW9uUmVjdC54KCkgKiA0OwogCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwotICAgIHVpbnQ4X3QqIHNyY1Jvd3Mg
PSBpbWFnZURhdGEuZGF0YSgpLmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVz
UGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKyAgICB1bnNpZ25lZCBzb3VyY2VCeXRl
c1BlclJvdyA9IDQgKiBwaXhlbEJ1ZmZlci5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50OF90KiBz
b3VyY2VSb3dzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmRhdGEoKSArIHNvdXJjZVJlY3RDbGlwcGVk
LnkoKSAqIHNvdXJjZUJ5dGVzUGVyUm93ICsgc291cmNlUmVjdENsaXBwZWQueCgpICogNDsKIAog
ICAgIGNvcHlJbWFnZVBpeGVscygKLSAgICAgICAgaW5wdXRGb3JtYXQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCi0gICAgICAgIGRlc3RGb3JtYXQsIHBpeGVs
Rm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cisg
ICAgICAgIHNvdXJjZUFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNvdXJjZUJ5dGVz
UGVyUm93LCBzb3VyY2VSb3dzLAorICAgICAgICBkZXN0aW5hdGlvbkFscGhhRm9ybWF0LCBwaXhl
bEZvcm1hdCgpLCBkZXN0aW5hdGlvbkJ5dGVzUGVyUm93LCBkZXN0aW5hdGlvblJvd3MsIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDgg
QEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0w7CiBjbGFz
cyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBOYXRp
dmVJbWFnZTsKK2NsYXNzIFBpeGVsQnVmZmVyOwogCiBlbnVtIEJhY2tpbmdTdG9yZUNvcHkgewog
ICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0
IGFmZmVjdCB0aGUgY29weS4KQEAgLTEwOSw4ICsxMDksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZlciYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZp
cnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0wmLCBHQ0dM
ZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CkBAIC0xNTQsOCArMTU0LDggQEAgcHJvdGVjdGVkOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZv
aWQqIGRhdGEpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCwgdm9pZCogZGF0YSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCB2b2lkKiBkYXRhKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0LCB2b2lkKiBkYXRhKTsKIAogICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJz
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhl
bEJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BpeGVsQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsNDUg
QEAKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IFBpeGVsQnVmZmVyOjpjb21wdXRlQnVmZmVyU2l6ZShQaXhlbEZvcm1hdCBmb3JtYXQsIGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgLy8gTk9URTogT25seSA4LWJpdCBmb3JtYXRzIGFyZSBj
dXJyZW50bHkgc3VwcG9ydGVkLgorICAgIEFTU0VSVF9VTlVTRUQoZm9ybWF0LCBmb3JtYXQgPT0g
UGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6QkdSQTgpOworCisg
ICAgY29uc3RleHByIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworCisgICAgcmV0dXJuIHNp
emUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIGJ5dGVzUGVyUGl4ZWw7Cit9CisKK09wdGlvbmFs
PFBpeGVsQnVmZmVyPiBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcoRGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgdW5zaWduZWQgZGF0YUJ5dGVMZW5ndGgpCit7CisgICAgQVNTRVJUKGZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7Cisg
ICAgQVNTRVJUKGNvbXB1dGVCdWZmZXJTaXplKGZvcm1hdCwgc2l6ZSkudW5zYWZlR2V0KCkgPT0g
ZGF0YUJ5dGVMZW5ndGgpOworCisgICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoZGF0YUJ5dGVMZW5ndGgpOworICAgIGlmICghcGl4
ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IGNv
bG9yU3BhY2UsIGZvcm1hdCwgc2l6ZSwgcGl4ZWxBcnJheS5yZWxlYXNlTm9uTnVsbCgpIH0gfTsK
K30KKworT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBOT1RFOiBPbmx5IDgtYml0IGZvcm1hdHMgYXJlIGN1cnJl
bnRseSBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6UkdCQTgg
fHwgZm9ybWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CisKKyAgICBhdXRvIGJ1ZmZlclNpemUg
PSBjb21wdXRlQnVmZmVyU2l6ZShmb3JtYXQsIHNpemUpOworICAgIGlmIChidWZmZXJTaXplLmhh
c092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHBp
eGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChidWZm
ZXJTaXplLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBjb2xvclNwYWNlLCBmb3JtYXQsIHNpemUs
IHBpeGVsQXJyYXkucmVsZWFzZU5vbk51bGwoKSB9IH07Cit9CisKIFBpeGVsQnVmZmVyOjpQaXhl
bEJ1ZmZlcihEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgZm9y
bWF0LCBjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJiBk
YXRhKQogICAgIDogbV9jb2xvclNwYWNlIHsgY29sb3JTcGFjZSB9CiAgICAgLCBtX2Zvcm1hdCB7
IGZvcm1hdCB9CkBAIC00Niw0ICs4Miw5IEBAIFBpeGVsQnVmZmVyIFBpeGVsQnVmZmVyOjpkZWVw
Q2xvbmUoKSBjb24KICAgICByZXR1cm4geyBtX2NvbG9yU3BhY2UsIG1fZm9ybWF0LCBtX3NpemUs
IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+bGVuZ3Ro
KCkpIH07CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikKK3sKKyAgICByZXR1cm4gdHMgPDwgJnBpeGVsQnVm
ZmVyLmRhdGEoKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MyArMzAsMTkgQEAKICNpbmNsdWRlICJQaXhlbEZvcm1hdC5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVGV4
dFN0cmVhbTsKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQaXhlbEJ1ZmZlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGl4ZWxCdWZmZXIpOwogcHVibGljOgorICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gdHJ5Q3JlYXRlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNpemUmKTsKKwogICAgIFBp
eGVsQnVmZmVyKERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNp
emUmLCBSZWY8SlNDOjpVaW50OENsYW1wZWRBcnJheT4mJik7Ci0gICAgflBpeGVsQnVmZmVyKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgflBpeGVsQnVmZmVyKCk7CiAKICAgICBQaXhlbEJ1ZmZlcihQ
aXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CiAgICAgUGl4ZWxCdWZmZXImIG9wZXJhdG9yPShQaXhl
bEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CkBAIC00OCwxMSArNTQsNjYgQEAgcHVibGljOgogCiAgICAg
UGl4ZWxCdWZmZXIgZGVlcENsb25lKCkgY29uc3Q7CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOworCiBw
cml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
dHJ5Q3JlYXRlRm9yRGVjb2RpbmcoRGVzdGluYXRpb25Db2xvclNwYWNlLCBQaXhlbEZvcm1hdCwg
Y29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGRhdGFCeXRlTGVuZ3RoKTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gY29tcHV0ZUJ1
ZmZlclNpemUoUGl4ZWxGb3JtYXQsIGNvbnN0IEludFNpemUmKTsKKwogICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CiAgICAgUGl4ZWxGb3JtYXQgbV9mb3JtYXQ7CiAgICAg
SW50U2l6ZSBtX3NpemU7CiAgICAgUmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IG1fZGF0YTsK
IH07CiAKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBQaXhlbEJ1ZmZlciYpOworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9kYXRhLT5ieXRlTGVuZ3RoKCkgPT0gKG1fc2l6ZS5hcmVhKCkudW5zYWZlR2V0
KCkgKiA0KSk7CisKKyAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsKKyAgICBlbmNvZGVyIDw8
IG1fZm9ybWF0OworICAgIGVuY29kZXIgPDwgbV9zaXplOworICAgIGVuY29kZXIuZW5jb2RlRml4
ZWRMZW5ndGhEYXRhKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSk7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBQaXhlbEJ1
ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFBpeGVsRm9ybWF0IGZvcm1hdDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGZvcm1hdCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBub24tOCBiaXQgZm9ybWF0cy4KKyAgICBpZiAo
IShmb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IGZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6
QkdSQTgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgSW50U2l6ZSBzaXpl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvIGNvbXB1dGVkQnVmZmVyU2l6ZSA9IFBpeGVsQnVmZmVyOjpjb21w
dXRlQnVmZmVyU2l6ZShmb3JtYXQsIHNpemUpOworICAgIGlmIChjb21wdXRlZEJ1ZmZlclNpemUu
aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0
byBidWZmZXJTaXplID0gY29tcHV0ZWRCdWZmZXJTaXplLnVuc2FmZUdldCgpOworICAgIGlmICgh
ZGVjb2Rlci50ZW1wbGF0ZSBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPHVpbnQ4X3Q+KGJ1
ZmZlclNpemUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byByZXN1
bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlRm9yRGVjb2RpbmcoY29sb3JTcGFjZSwgZm9ybWF0
LCBzaXplLCBidWZmZXJTaXplKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVz
dWx0LT5tX2RhdGEtPmRhdGEoKSwgcmVzdWx0LT5tX2RhdGEtPmJ5dGVMZW5ndGgoKSwgMSkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC05MDQsMTIgKzkwNCwxMiBAQCB2b2lkIFNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCCiAgICAgICAgIHJldHVybjsKIAogICAgIElu
dFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAgICBhdXRvIGxheWVy
RGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFn
ZS5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ymx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCkuZGF0YSgpLCBibHVyUmVjdC5zaXplKCks
IGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0
KTsKKyAgICBsYXllckltYWdlLnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRv
d0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwg
Y29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
ICJUZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1
bGFyRXhwcmVzc2lvbi5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTc3LDExICs3NywxMSBA
QCBzdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpCiB9CiAjZW5kaWYKIAot
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQ
YWludFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwotICAgIGlm
ICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBpeGVsQnVm
ZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Is
IFBpeGVsRm9ybWF0OjpSR0JBOCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7CisgICAg
aWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBTY29w
ZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tBbGlnbm1lbnQoR0xfUEFDS19BTElHTk1FTlQpOwogICAg
IGlmIChwYWNrQWxpZ25tZW50ID4gNCkKICAgICAgICAgcGFja0FsaWdubWVudC5waXhlbFN0b3Jl
KDQpOwpAQCAtOTAsMTYgKzkwLDE2IEBAIFJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkcKICAgICBTY29wZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tTa2lwUGl4ZWxzKEdMX1BB
Q0tfU0tJUF9QSVhFTFMsIDAsIG1faXNGb3JXZWJHTDIpOwogICAgIFNjb3BlZEJ1ZmZlckJpbmRp
bmcgc2NvcGVkUGl4ZWxQYWNrQnVmZmVyUmVzZXQoR0xfUElYRUxfUEFDS19CVUZGRVIsIDAsIG1f
aXNGb3JXZWJHTDIpOwogCi0gICAgZ2w6OlJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoMCwgMCwgaW1h
Z2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCksIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKSk7CisgICAgZ2w6OlJlYWRuUGl4ZWxz
Um9idXN0QU5HTEUoMCwgMCwgcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpLCBwaXhlbEJ1ZmZl
ci0+c2l6ZSgpLmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbEJ1ZmZl
ci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgcGl4ZWxC
dWZmZXItPmRhdGEoKS5kYXRhKCkpOwogICAgIC8vIEZJWE1FOiBSZW5kZXJpbmcgdG8gR0xfUkdC
IHRleHR1cmVzIHdpdGggYSBJT1N1cmZhY2UgYm91bmQgdG8gdGhlIHRleHR1cmUgaW1hZ2UgbGVh
dmVzCiAgICAgLy8gdGhlIGFscGhhIGluIHRoZSBJT1N1cmZhY2UgaW4gaW5jb3JyZWN0IHN0YXRl
LiBBbHNvIEFOR0xFIGdsOjpSZWFkUGl4ZWxzIHdpbGwgaW4gc29tZQogICAgIC8vIGNhc2VzIGV4
cG9zZSB0aGUgbm9uLTI1NSB2YWx1ZXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNTgwNAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpCi0gICAgICAgIHdp
cGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5o
ZWlnaHQoKSwgaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpKTsKKyAgICAgICAgd2lwZUFscGhhQ2hh
bm5lbEZyb21QaXhlbHMocGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpLCBwaXhlbEJ1ZmZlci0+
c2l6ZSgpLmhlaWdodCgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSk7CiAjZW5kaWYKLSAg
ICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKQEAgLTUwOCw3ICs1
MDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4CiAjZW5kaWYK
IH0KIAotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5k
ZXJpbmdSZXN1bHRzKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMoKQogewogICAgIFNjb3BlZFJlc3RvcmVSZWFkRnJh
bWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0ZvcldlYkdMMiwgbV9zdGF0ZS5ib3VuZFJl
YWRGQk8pOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiQ2Fpcm9V
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJ
bWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgPGNh
aXJvLmg+CkBAIC0xMDYsMTUgKzEwNiwxNSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VF
eHRyYWN0b3I6OmV4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
JiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNv
bnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzJiBzb3VyY2VDb250ZXh0QXR0cmlidXRlcywgUGl4ZWxCdWZmZXImJiBw
aXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogewotICAgIEFTU0VSVCghaW1hZ2VEYXRhLT5zaXplKCkuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoIXBpeGVsQnVmZmVyLnNpemUoKS5pc0VtcHR5KCkpOwogICAgIGlmIChjYW52YXNT
aXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29udmVydCBSR0JBIHRv
IEJHUkEuIEJHUkEgaXMgQ0FJUk9fRk9STUFUX0FSR0IzMiBvbiBsaXR0bGUtZW5kaWFuIGFyY2hp
dGVjdHVyZXMuCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBpbWFnZURhdGEtPmRhdGEoKS5ieXRl
TGVuZ3RoKCk7Ci0gICAgdWludDhfdCogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgp
OworICAgIHNpemVfdCB0b3RhbEJ5dGVzID0gcGl4ZWxCdWZmZXIuZGF0YSgpLmJ5dGVMZW5ndGgo
KTsKKyAgICB1aW50OF90KiBwaXhlbHMgPSBwaXhlbEJ1ZmZlci5kYXRhKCkuZGF0YSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQogICAgICAgICBzdGQ6
OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKIApAQCAtMTI2LDEwICsxMjYsMTAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbgogICAgICAgICB9CiAgICAg
fQogCi0gICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKKyAgICBhdXRvIGlt
YWdlU2l6ZSA9IHBpeGVsQnVmZmVyLnNpemUoKTsKIAogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IGltYWdlU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKAotICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS5kYXRhKCksIENBSVJPX0ZPUk1BVF9B
UkdCMzIsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VEYXRhLT5oZWlnaHQoKSwgaW1hZ2VEYXRh
LT53aWR0aCgpICogNCkpOworICAgICAgICBwaXhlbEJ1ZmZlci5kYXRhKCkuZGF0YSgpLCBDQUlS
T19GT1JNQVRfQVJHQjMyLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCBp
bWFnZVNpemUud2lkdGgoKSAqIDQpKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2VTdXJmYWNlKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAK
ICNpZiBVU0UoQ0FJUk8pCkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCCiAgICAgcmV0dXJuIGltYWdlRGF0YTsKIH0KIAotUmVmUHRy
PEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0CitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIHJldHVybiBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6
OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQog
ewotICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFn
ZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1
dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQo
KSkpOwogCiAgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMo
c3JjUmVjdCk7CiAgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRp
bmF0ZXMoZGVzdFBvaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPE5hdGl2ZUltYWdl
PiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0
cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBQaXhlbEJ1ZmZl
ciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoK
ICAgICBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYsIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAJKHJl
dmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dEdMQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5T
SUNTKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMTkVPTi5oIgpAQCAtNTA2LDkgKzUwNiw5
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXgKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhj
b25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNvbnRleHRBdHRyaWJ1dGVz
LCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGFpbnRUb0NhbnZhcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIHNvdXJjZUNv
bnRleHRBdHRyaWJ1dGVzLCBQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRTaXpl
JiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKCFp
bWFnZURhdGEtPnNpemUoKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghcGl4ZWxCdWZmZXIuc2l6
ZSgpLmlzRW1wdHkoKSk7CiAgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgLy8gSW5wdXQgaXMgR0xfUkdCQSA9PSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJp
ZyB8IGtDR0ltYWdlQWxwaGEqTGFzdC4KQEAgLTUyMSwxNiArNTIxLDE4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW4KICAgICBlbHNlCiAgICAgICAgIGJpdG1hcElu
Zm8gfD0ga0NHSW1hZ2VBbHBoYUxhc3Q7CiAKLSAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlRGF0
YS0+c2l6ZSgpOwotICAgIGludCByb3dCeXRlcyA9IGltYWdlU2l6ZS53aWR0aCgpICogNDsKLSAg
ICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKLSAgICB1
aW50OF90KiBpbWFnZVBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLmRhdGEoKTsKLSAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSk7Ci0gICAgYXV0
byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoJmlt
YWdlRGF0YS5sZWFrUmVmKCksIGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSwgW10gKHZvaWQqIGNvbnRl
eHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxJbWFn
ZURhdGEqPihjb250ZXh0KS0+ZGVyZWYoKTsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSBtYWtlUmVm
KHBpeGVsQnVmZmVyLmRhdGEoKSk7CisgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJyYXktPmJ5
dGVMZW5ndGgoKTsKKyAgICBhdXRvIGRhdGEgPSBwaXhlbEFycmF5LT5kYXRhKCk7CisKKyAgICB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIGRhdGFTaXplKTsKKworICAgIGF1dG8g
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhl
bEFycmF5LmxlYWtSZWYoKSwgZGF0YSwgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBjb25z
dCB2b2lkKiwgc2l6ZV90KSB7CisgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVk
QXJyYXkqPihjb250ZXh0KS0+ZGVyZWYoKTsKICAgICB9KSk7CiAKLSAgICBhdXRvIGltYWdlID0g
TmF0aXZlSW1hZ2U6OmNyZWF0ZShhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHJvd0J5dGVzLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBiaXRtYXBJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSkpOworICAgIGF1dG8gaW1hZ2VTaXplID0gcGl4ZWxCdWZmZXIuc2l6
ZSgpOworICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCAzMiwgNCAq
IGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9yU3BhY2UocGl4ZWxCdWZmZXIuY29sb3JT
cGFjZSgpKSwgYml0bWFwSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpKTsKIAogICAgIC8vIENTUyBzdHlsaW5nIG1heSBjYXVzZSB0
aGUgY2FudmFzJ3MgY29udGVudCB0byBiZSByZXNpemVkIG9uCiAgICAgLy8gdGhlIHBhZ2UuIEdv
IGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKIAogI2lmIFVTRShBQ0NFTEVSQVRFKQpAQCAt
MTg3LDI0ICsxODcsMjUgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tl
bgogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CiAgICAgICAgIC8v
IEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxs
eSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dpY2Fs
UmVjdCgpKTsKLSAgICAgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEt
PmRhdGEoKTsKLSAgICAgICAgYXV0byBkYXRhU2l6ZSA9IHBpeGVsQXJyYXkuYnl0ZUxlbmd0aCgp
OwotICAgICAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7
CisgICAgICAgIGF1dG8gcGl4ZWxBcnJheSA9IG1ha2VSZWYocGl4ZWxCdWZmZXItPmRhdGEoKSk7
CisgICAgICAgIGF1dG8gZGF0YVNpemUgPSBwaXhlbEFycmF5LT5ieXRlTGVuZ3RoKCk7CisgICAg
ICAgIGF1dG8gZGF0YSA9IHBpeGVsQXJyYXktPmRhdGEoKTsKIAotICAgICAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKHBpeGVsQXJyYXkuZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAg
IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgZGF0YVNpemUpOwogCi0gICAgICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KGltYWdlRGF0YS5sZWFrUmVmKCksIHBpeGVsQXJyYXkuZGF0YSgpLCBkYXRhU2l6ZSwgW10gKHZv
aWQqIGNvbnRleHQsIGNvbnN0IHZvaWQqLCBzaXplX3QpIHsKLSAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8SW1hZ2VEYXRhKj4oY29udGV4dCktPmRlcmVmKCk7CisgICAgICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKCZwaXhlbEFy
cmF5LmxlYWtSZWYoKSwgZGF0YSwgZGF0YVNpemUsIFtdICh2b2lkKiBjb250ZXh0LCBjb25zdCB2
b2lkKiwgc2l6ZV90KSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0M6OlVpbnQ4Q2xhbXBl
ZEFycmF5Kj4oY29udGV4dCktPmRlcmVmKCk7CiAgICAgICAgIH0pKTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghZGF0YVByb3ZpZGVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUocGl4ZWxBcnJheURpbWVuc2lvbnMu
d2lkdGgoKSwgcGl4ZWxBcnJheURpbWVuc2lvbnMuaGVpZ2h0KCksIDgsIDMyLCA0ICogcGl4ZWxB
cnJheURpbWVuc2lvbnMud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0
ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5n
ZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICAgICAgYXV0
byBpbWFnZVNpemUgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOworICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4
LCAzMiwgNCAqIGltYWdlU2l6ZS53aWR0aCgpLCBjYWNoZWRDR0NvbG9yU3BhY2UocGl4ZWxCdWZm
ZXItPmNvbG9yU3BhY2UoKSksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7CiAgICAgfSBlbHNlIGlmIChyZXNvbHV0aW9uU2NhbGUoKSA9PSAx
IHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewogICAg
ICAgICBhdXRvIG5hdGl2ZUltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoIW5hdGl2ZUltYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTU5LDE0ICsxNTksMTQgQEAgVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnRvQkdSQURhdGEobV9kYXRhKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBpeGVs
QnVmZmVyPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1
dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7CiB9CiAKLXZv
aWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7
Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdl
RGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBtX2RhdGEpOworICAgIEltYWdl
QnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBz
cmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQsIG1fZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBw
dWJsaWM6CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc09yaWdpbkF0VXBwZXJMZWZ0Q29ybmVyID0g
dHJ1ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5
IEBACiAjaWYgSEFWRShJT1NVUkZBQ0UpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgpAQCAtMTY4LDExICsxNjgsMTEgQEAgdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmRyYXdDbwogCiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QK
IHsKLSAgICBpZiAobV9yZXF1aXJlc0RyYXdBZnRlclB1dEltYWdlRGF0YSkgeworICAgIGlmICht
X3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIpIHsKICAgICAgICAgLy8gRm9yY2UgcmVj
cmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4KICAgICAgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcg
d2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgogICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRS
ZWN0KDEsIDEsIDAsIDApKTsKLSAgICAgICAgbV9yZXF1aXJlc0RyYXdBZnRlclB1dEltYWdlRGF0
YSA9IGZhbHNlOworICAgICAgICBtX3JlcXVpcmVzRHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgPSBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSht
aW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KQEAgLTE4MywxNyArMTgz
LDE3IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2sKICAgICByZXR1
cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIElPU3Vy
ZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFz
ZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0UGl4ZWxCdWZm
ZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9y
bWF0KQogewogICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNl
OjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKLSAgICBtX3JlcXVpcmVz
RHJhd0FmdGVyUHV0SW1hZ2VEYXRhID0gdHJ1ZTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1
dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKyAgICBtX3JlcXVpcmVz
RHJhd0FmdGVyUHV0UGl4ZWxCdWZmZXIgPSB0cnVlOwogfQogCiBJT1N1cmZhY2UqIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6c3VyZmFjZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogCiAgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kKGNvbnN0IFBhcmFtZXRlcnMmLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsK
IAorICAgIElPU3VyZmFjZSogc3VyZmFjZSgpOworCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsK
IApAQCAtNjEsOSArNjMsOCBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9D
RkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpIG92ZXJyaWRlOwotICAgIElPU3VyZmFjZSogc3VyZmFjZSgpOworICAgIE9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
cHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
UGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOwogCiAg
ICAgYm9vbCBpc0luVXNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCByZWxlYXNlR3JhcGhp
Y3NDb250ZXh0KCkgb3ZlcnJpZGU7CkBAIC03OCw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICB1
bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIG11dGFibGUgYm9vbCBtX3JlcXVpcmVzRHJh
d0FmdGVyUHV0SW1hZ2VEYXRhIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXF1aXJl
c0RyYXdBZnRlclB1dFBpeGVsQnVmZmVyIHsgZmFsc2UgfTsKIAogICAgIG11dGFibGUgYm9vbCBt
X25lZWRzU2V0dXBDb250ZXh0IHsgZmFsc2UgfTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDggKzI5LDggQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5o
PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgpAQCAtMTE4LDcgKzExOCw3IEBAIGJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJl
ZiBpbWFnZSwgQ0ZTdHIKICAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVz
dGluYXRpb24uZ2V0KCkpOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRh
KGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNv
bnN0IFBpeGVsQnVmZmVyJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKIApAQCAtMTI2LDE4ICsx
MjYsMjAgQEAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdAogICAgIEFT
U0VSVCh1dGkpOwogCiAgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1h
Z2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCkuZGF0
YSgpOworICAgIAorICAgIGF1dG8gZGF0YSA9IHNvdXJjZS5kYXRhKCkuZGF0YSgpOworICAgIGF1
dG8gZGF0YVNpemUgPSBzb3VyY2UuZGF0YSgpLmJ5dGVMZW5ndGgoKTsKKwogICAgIFZlY3Rvcjx1
aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKIAogICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwg
anBlZ1VUSSgpKSkgewogICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAg
ICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7
Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUp
KQorICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShkYXRh
U2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBwcmVtdWx0aXBs
aWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KGRhdGFT
aXplKTsKICAgICAgICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEu
ZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFTaXplOyBpICs9IDQpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CiAgICAgICAgICAgICBpZiAoYWxw
aGEgIT0gMjU1KSB7CiAgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBd
ICogYWxwaGEgLyAyNTU7CkBAIC0xNTQsMTIgKzE1NiwxNCBAQCBzdGF0aWMgUmV0YWluUHRyPENG
RGF0YVJlZj4gY2ZEYXRhKGNvbnN0CiAgICAgICAgIGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5k
YXRhKCk7CiAgICAgfQogCi0gICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0
ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwotICAgIGF1dG8gZGF0YVByb3Zp
ZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBz
b3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAgIHZlcmlmeUltYWdlQnVm
ZmVySXNCaWdFbm91Z2goZGF0YSwgZGF0YVNpemUpOworCisgICAgYXV0byBkYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgZGF0YSwgZGF0
YVNpemUsIG51bGxwdHIpKTsKICAgICBpZiAoIWRhdGFQcm92aWRlcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJj
ZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJ
bmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7CisgICAgYXV0byBpbWFnZVNpemUgPSBzb3VyY2Uuc2l6ZSgpOworICAgIGF1dG8gaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBpbWFnZVNpemUud2lkdGgoKSwgY2FjaGVkQ0dDb2xvclNwYWNl
KHNvdXJjZS5jb2xvclNwYWNlKCkpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFs
cGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50
RGVmYXVsdCkpOwogCiAgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwogICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2Uu
Z2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKQEAgLTE3Niw3ICsxODAs
NyBAQCBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyCiAgICAgcmV0dXJu
ICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwogfQogCi1TdHJp
bmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxC
dWZmZXImIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KQogewogICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwg
cXVhbGl0eSkpCiAgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsK
QEAgLTE5MCw3ICsxOTQsNyBAQCBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYg
Y2ZECiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IElt
YWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBQaXhlbEJ1ZmZlciYgc291cmNl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCiB7CiAg
ICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKICAg
ICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbWFnZURhdGE7Citj
bGFzcyBQaXhlbEJ1ZmZlcjsKIAogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1
ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwog
CkBAIC00NSwxMCArNDUsMTAgQEAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VC
dWZmZQogYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CiAKIFN0cmluZyBkYXRhVVJM
KENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci1TdHJpbmcgZGF0YVVSTChjb25z
dCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpOworU3RyaW5nIGRhdGFVUkwoY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwogCiBWZWN0b3I8dWludDhfdD4g
ZGF0YVZlY3RvcihDRkRhdGFSZWYpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VE
YXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsK
K1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0J
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2
MSwxMyArNjYxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVGb3IK
ICAgICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMo
KQogewogICAgIGF1dG8mIGRpc3BsYXlCdWZmZXIgPSBtX3N3YXBDaGFpbi0+ZGlzcGxheUJ1ZmZl
cigpOwogICAgIGlmICghZGlzcGxheUJ1ZmZlci5zdXJmYWNlIHx8ICFkaXNwbGF5QnVmZmVyLmhh
bmRsZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgaWYgKGRpc3BsYXlCdWZmZXIuc3VyZmFjZS0+c2l6ZSgpICE9IGdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIC8vIE5vdGU6IFdlIGFyZSB1c2luZyBHTCB0byByZWFkIHRo
ZSBJT1N1cmZhY2UuIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIHRoZXJlIGFyZSBubyBjb252aW5p
ZW50CiAgICAgLy8gZnVuY3Rpb25zIHRvIGNvbnZlcnQgdGhlIElPU3VyZmFjZSBwaXhlbCBkYXRh
IHRvIEltYWdlRGF0YS4gVGhlIGltYWdlIGRhdGEgZW5kcyB1cCBiZWluZwogICAgIC8vIGRyYXdu
IHRvIGEgSW1hZ2VCdWZmZXIsIGJ1dCBhdCB0aGUgdGltZSB0aGVyZSdzIG5vIGZ1bmN0aW9ucyB0
byBjb25zdHJ1Y3QgYSBOYXRpdmVJbWFnZQpAQCAtNjc4LDcgKzY3OCw3IEBAIFJlZlB0cjxJbWFn
ZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkcKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJp
bmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeSgpLCB0
ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlVGFyZ2V0ICE9IFRFWFRVUkVfUkVDVEFOR0xFX0FSQik7CiAg
ICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwogICAgIGlmICghRUdM
X0JpbmRUZXhJbWFnZShtX2Rpc3BsYXlPYmosIGRpc3BsYXlCdWZmZXIuaGFuZGxlLCBFR0xfQkFD
S19CVUZGRVIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CiAgICAgU2NvcGVkRnJhbWVidWZmZXIgZmJvOwogICAg
IFNjb3BlZFJlc3RvcmVSZWFkRnJhbWVidWZmZXJCaW5kaW5nIGZib0JpbmRpbmcobV9pc0Zvcldl
YkdMMiwgbV9zdGF0ZS5ib3VuZFJlYWRGQk8sIGZibyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVC
bGVuZE5FT04uaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAKICNpbmNsdWRl
ICJGRUJsZW5kLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKICNpbmNsdWRlIDxhcm1fbmVvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0x
MTIsMzMgKzExMiwzNCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCog
aW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSBpbWFn
ZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghZHN0UGl4
ZWxBcnJheSkKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGF1dG8gc3JjUGl4ZWxBcnJheUEgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJh
d2luZ1JlY3QpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZm
ZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Cisg
ICAgYXV0byBzb3VyY2VQaXhlbEFycmF5QSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVj
dEFEcmF3aW5nUmVjdCk7CiAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4
ZWxBcnJheUEtPmxlbmd0aCgpOwotICAgIEFTU0VSVChwaXhlbEFycmF5TGVuZ3RoID09IHNyY1Bp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7CisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5wcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7
Ci0gICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNyY1BpeGVsQXJyYXlBLT5kYXRhKCksIHNyY1Bp
eGVsQXJyYXlCLT5kYXRhKCksIGRzdFBpeGVsQXJyYXktPmRhdGEoKSwgcGl4ZWxBcnJheUxlbmd0
aCk7CisgICAgdW5zaWduZWQgc291cmNlUGl4ZWxBcnJheUxlbmd0aCA9IHNvdXJjZVBpeGVsQXJy
YXlBLT5sZW5ndGgoKTsKKyAgICBBU1NFUlQocGl4ZWxBcnJheUxlbmd0aCA9PSBzb3VyY2VQaXhl
bEFycmF5Qi0+bGVuZ3RoKCkpOworCisgICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPj0g
OCkgeworICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgp
LCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgp
LCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAv
LyBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgotICAgIEFT
U0VSVChwaXhlbEFycmF5TGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKHNvdXJjZVBpeGVsQXJyYXlM
ZW5ndGggPiAwKTsKICAgICB1aW50MzJfdCBzb3VyY2VBWzJdID0gezAsIDB9OwogICAgIHVpbnQz
Ml90IHNvdXJjZUJBbmREZXN0WzJdID0gezAsIDB9OwogCi0gICAgc291cmNlQVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNQaXhlbEFycmF5QS0+ZGF0YSgpKVswXTsKLSAgICBz
b3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNQaXhlbEFy
cmF5Qi0+ZGF0YSgpKVswXTsKKyAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCkpWzBdOworICAgIHNvdXJjZUJBbmREZXN0
WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRh
KCkpWzBdOwogICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KHNvdXJjZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7Ci0gICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGRzdFBpeGVsQXJyYXktPmRhdGEoKSlbMF0gPSBzb3VyY2VC
QW5kRGVzdFswXTsKKyAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25Q
aXhlbEFycmF5LmRhdGEoKSlbMF0gPSBzb3VyY2VCQW5kRGVzdFswXTsKIH0KIAogdm9pZCBGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5z
aWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXks
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OCwxMCArMjk4LDEwIEBAIHZvaWQgRGlzcGxheUxpc3Q6
OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0KICAgICAgICAgcmV0dXJuIGFwcGVuZDxNZXRhQ29tbWFu
ZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdl
RGVzdGluYXRpb25JbWFnZUJ1ZmZlcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6TWV0YUNvbW1h
bmRDaGFuZ2VJdGVtQnVmZmVyOgogICAgICAgICByZXR1cm4gYXBwZW5kPE1ldGFDb21tYW5kQ2hh
bmdlSXRlbUJ1ZmZlcj4oaXRlbS5nZXQ8TWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyPigpKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8
R2V0SW1hZ2VEYXRhPihpdGVtLmdldDxHZXRJbWFnZURhdGE+KCkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxQdXRJbWFnZURhdGE+KGl0
ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZm
ZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8R2V0UGl4ZWxCdWZmZXI+KGl0ZW0uZ2V0PEdldFBp
eGVsQnVmZmVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxQdXRQaXhlbEJ1ZmZlcj4oaXRlbS5nZXQ8UHV0UGl4ZWxCdWZmZXI+
KCkpOwogI2lmIEVOQUJMRShWSURFTykKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9y
TWVkaWE6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtLmdl
dDxQYWludEZyYW1lRm9yTWVkaWE+KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODgsOCArMTg4LDggQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIAogICAgIGNhc2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdl
RGVzdGluYXRpb25JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENo
YW5nZUl0ZW1CdWZmZXI6CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJ
bWFnZURhdGE6Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgIGNhc2UgSXRl
bVR5cGU6OkdldFBpeGVsQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6OlB1dFBpeGVsQnVmZmVy
OgogICAgICAgICAvLyBTaG91bGQgYWxyZWFkeSBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4K
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4MCwx
MSArMjgwLDExIEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLn5GaWxs
Um91bmRlZFJlY3QoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldElt
YWdlRGF0YToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8R2V0SW1hZ2VEYXRhPjo6dmFsdWUpOworICAgIGNhc2UgSXRlbVR5cGU6OkdldFBpeGVs
QnVmZmVyOgorICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxHZXRQaXhlbEJ1ZmZlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgZ2V0PFB1dEltYWdlRGF0YT4oKS5+UHV0
SW1hZ2VEYXRhKCk7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CisgICAgICAg
IGdldDxQdXRQaXhlbEJ1ZmZlcj4oKS5+UHV0UGl4ZWxCdWZmZXIoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgICAgICBnZXQ8U2V0TGluZURh
c2g+KCkuflNldExpbmVEYXNoKCk7CkBAIC01MDQsMTAgKzUwNCwxMCBAQCBib29sIEl0ZW1IYW5k
bGU6OnNhZmVDb3B5KEl0ZW1IYW5kbGUgZGVzCiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSb3VuZGVk
UmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkdldEltYWdlRGF0
YToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEdldEltYWdlRGF0YT4oaXRlbU9mZnNldCwgKnRo
aXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFB1dEltYWdlRGF0YT4oaXRlbU9mZnNldCwgKnRoaXMpOworICAgIGNhc2UgSXRlbVR5
cGU6OkdldFBpeGVsQnVmZmVyOgorICAgICAgICByZXR1cm4gY29weUludG88R2V0UGl4ZWxCdWZm
ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZl
cjoKKyAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFB1dFBpeGVsQnVmZmVyPihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CiAgICAgICAgIHJldHVybiBj
b3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldFN0YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
LmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzIsMTAgKzEzMiwxMCBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1U
eXBlCiAgICAgICAgIHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VEZXN0aW5hdGlvbklt
YWdlQnVmZmVyKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZm
ZXI6CiAgICAgICAgIHJldHVybiBzaXplb2YoTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
R2V0SW1hZ2VEYXRhKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoUHV0SW1hZ2VEYXRhKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhl
bEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHZXRQaXhlbEJ1ZmZlcik7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoUHV0UGl4
ZWxCdWZmZXIpOwogI2lmIEVOQUJMRShWSURFTykKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZy
YW1lRm9yTWVkaWE6CiAgICAgICAgIHJldHVybiBzaXplb2YoUGFpbnRGcmFtZUZvck1lZGlhKTsK
QEAgLTIwOSw3ICsyMDksNyBAQCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VU
aGlja25lc3M6CiAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgIGNhc2UgSXRlbVR5
cGU6OkdldEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgpAQCAtMjQwLDcgKzI0MCw3IEBA
IGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogI2lmIEVOQUJMRShWSURFTykKICAg
ICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAjZW5kaWYKLSAgICBjYXNlIEl0
ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgpAQCAtMjk0LDcg
KzI5NCw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAg
IGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRQaXhl
bEJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpAQCAtMzUxLDcg
KzM1MSw3IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgogICAgIGNh
c2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE6
CisgICAgY2FzZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzksOCArNzksOCBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWlu
dDhfdCB7CiAgICAgRmx1c2hDb250ZXh0LAogICAgIE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRp
b25JbWFnZUJ1ZmZlciwKICAgICBNZXRhQ29tbWFuZENoYW5nZUl0ZW1CdWZmZXIsCi0gICAgR2V0
SW1hZ2VEYXRhLAotICAgIFB1dEltYWdlRGF0YSwKKyAgICBHZXRQaXhlbEJ1ZmZlciwKKyAgICBQ
dXRQaXhlbEJ1ZmZlciwKICNpZiBFTkFCTEUoVklERU8pCiAgICAgUGFpbnRGcmFtZUZvck1lZGlh
LAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCShyZXZp
c2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYg
QEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNzY5LDM1ICs3NjgsNjAgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgIHJldHVybiB0czsKIH0KIAot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdldElt
YWdlRGF0YSYgaXRlbSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBHZXRQaXhlbEJ1ZmZlciYgaXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHko
Im91dHB1dEZvcm1hdCIsIGl0ZW0ub3V0cHV0Rm9ybWF0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3JjUmVjdCIsIGl0ZW0uc3JjUmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVB1dElt
YWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
CitQdXRQaXhlbEJ1ZmZlcjo6UHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpCiAgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBv
aW50KGRlc3RQb2ludCkKLSAgICAsIG1faW1hZ2VEYXRhKGltYWdlRGF0YS5kZWVwQ2xvbmUoKSkg
Ly8gVGhpcyBjb3B5IGlzIGFjdHVhbGx5IHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBzZW1hbnRp
Y3Mgb2YgcHV0SW1hZ2VEYXRhKCkuCisgICAgLCBtX3BpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmRl
ZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8gcHJlc2VydmUg
dGhlIHNlbWFudGljcyBvZiBwdXRQaXhlbEJ1ZmZlcigpLgogICAgICwgbV9pbnB1dEZvcm1hdChp
bnB1dEZvcm1hdCkKICAgICAsIG1fZGVzdEZvcm1hdChkZXN0Rm9ybWF0KQogewogfQogCi1QdXRJ
bWFnZURhdGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBSZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0
KQorUHV0UGl4ZWxCdWZmZXI6OlB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQo
ZGVzdFBvaW50KQotICAgICwgbV9pbWFnZURhdGEoV1RGTW92ZShpbWFnZURhdGEpKQorICAgICwg
bV9waXhlbEJ1ZmZlcihXVEZNb3ZlKHBpeGVsQnVmZmVyKSkKICAgICAsIG1faW5wdXRGb3JtYXQo
aW5wdXRGb3JtYXQpCiAgICAgLCBtX2Rlc3RGb3JtYXQoZGVzdEZvcm1hdCkKIHsKIH0KIAotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFB1dEltYWdl
RGF0YSYgaXRlbSkKK1B1dFBpeGVsQnVmZmVyOjpQdXRQaXhlbEJ1ZmZlcihjb25zdCBQdXRQaXhl
bEJ1ZmZlciYgb3RoZXIpCisgICAgOiBtX3NyY1JlY3Qob3RoZXIubV9zcmNSZWN0KQorICAgICwg
bV9kZXN0UG9pbnQob3RoZXIubV9kZXN0UG9pbnQpCisgICAgLCBtX3BpeGVsQnVmZmVyKG90aGVy
Lm1fcGl4ZWxCdWZmZXIuZGVlcENsb25lKCkpCisgICAgLCBtX2lucHV0Rm9ybWF0KG90aGVyLm1f
aW5wdXRGb3JtYXQpCisgICAgLCBtX2Rlc3RGb3JtYXQob3RoZXIubV9kZXN0Rm9ybWF0KQorewor
fQorCitQdXRQaXhlbEJ1ZmZlciYgUHV0UGl4ZWxCdWZmZXI6Om9wZXJhdG9yPShjb25zdCBQdXRQ
aXhlbEJ1ZmZlciYgb3RoZXIpCit7CisgICAgUHV0UGl4ZWxCdWZmZXIgY29weSB7IG90aGVyIH07
CisgICAgc3dhcChjb3B5KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgUHV0UGl4ZWxC
dWZmZXI6OnN3YXAoUHV0UGl4ZWxCdWZmZXImIG90aGVyKQoreworICAgIHN0ZDo6c3dhcChtX3Ny
Y1JlY3QsIG90aGVyLm1fc3JjUmVjdCk7CisgICAgc3RkOjpzd2FwKG1fZGVzdFBvaW50LCBvdGhl
ci5tX2Rlc3RQb2ludCk7CisgICAgc3RkOjpzd2FwKG1fcGl4ZWxCdWZmZXIsIG90aGVyLm1fcGl4
ZWxCdWZmZXIpOworICAgIHN0ZDo6c3dhcChtX2lucHV0Rm9ybWF0LCBvdGhlci5tX2lucHV0Rm9y
bWF0KTsKKyAgICBzdGQ6OnN3YXAobV9kZXN0Rm9ybWF0LCBvdGhlci5tX2Rlc3RGb3JtYXQpOwor
fQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UHV0UGl4ZWxCdWZmZXImIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbnB1dEZvcm1h
dCIsIGl0ZW0uaW5wdXRGb3JtYXQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZURhdGFT
aXplIiwgaXRlbS5pbWFnZURhdGEoKS5zaXplKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicGl4
ZWxCdWZmZXJTaXplIiwgaXRlbS5waXhlbEJ1ZmZlcigpLnNpemUoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZGVzdFBvaW50IiwgaXRlbS5kZXN0UG9pbnQoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0
Rm9ybWF0IiwgaXRlbS5kZXN0Rm9ybWF0KCkpOwpAQCAtMTA2NCw4ICsxMDg4LDggQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgIGNhc2UgSXRlbVR5cGU6OkZs
dXNoQ29udGV4dDogdHMgPDwgImZsdXNoLWNvbnRleHQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpNZXRhQ29tbWFuZENoYW5nZURlc3RpbmF0aW9uSW1hZ2VCdWZmZXI6IHRzIDw8ICJtZXRh
LWNvbW1hbmQtY2hhbmdlLWRlc3RpbmF0aW9uLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlcjogdHMgPDwgIm1ldGEtY29t
bWFuZC1jaGFuZ2UtaXRlbS1idWZmZXIiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpHZXRJ
bWFnZURhdGE6IHRzIDw8ICJnZXQtaW1hZ2UtZGF0YSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlB1dEltYWdlRGF0YTogdHMgPDwgInB1dC1pbWFnZS1kYXRhIjsgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6R2V0UGl4ZWxCdWZmZXI6IHRzIDw8ICJnZXQtcGl4ZWwtYnVmZmVyIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0UGl4ZWxCdWZmZXI6IHRzIDw8ICJwdXQtcGl4ZWwt
YnVmZmVyIjsgYnJlYWs7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGNhc2UgSXRlbVR5cGU6OlBh
aW50RnJhbWVGb3JNZWRpYTogdHMgPDwgInBhaW50LWZyYW1lLWZvci1tZWRpYSI7IGJyZWFrOwog
I2VuZGlmCkBAIC0xMjMxLDExICsxMjU1LDExIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIEkKICAgICBjYXNlIEl0ZW1UeXBlOjpNZXRhQ29tbWFuZENoYW5nZUl0ZW1C
dWZmZXI6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PE1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZl
cj4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6R2V0SW1hZ2VEYXRhOgot
ICAgICAgICB0cyA8PCBpdGVtLmdldDxHZXRJbWFnZURhdGE+KCk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6R2V0UGl4ZWxCdWZmZXI6CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEdldFBpeGVsQnVmZmVy
PigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0UGl4ZWxCdWZmZXI+
KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShWSURFTykKICAgICBjYXNlIEl0ZW1UeXBl
OjpQYWludEZyYW1lRm9yTWVkaWE6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkg
KzM1LDkgQEAKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5o
PgpAQCAtNDksNyArNDksNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIE1lZGlhUGxheWVyOwogc3RydWN0IEltYWdl
UGFpbnRpbmdPcHRpb25zOwogCkBAIC0xOTAwLDEzICsxODk5LDEzIEBAIHByaXZhdGU6CiAgICAg
RmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLWNsYXNzIEdldEltYWdlRGF0YSB7CitjbGFzcyBHZXRQ
aXhlbEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpHZXRJbWFnZURhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpHZXRQaXhlbEJ1ZmZlcjsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgR2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzcmNSZWN0KQorICAgIEdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0KQogICAg
ICAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICAgICAsIG1fb3V0cHV0Rm9ybWF0KG91dHB1
dEZvcm1hdCkKICAgICB7CkBAIC0xOTIwLDE3ICsxOTE5LDI0IEBAIHByaXZhdGU6CiAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBtX291dHB1dEZvcm1hdDsKIH07CiAKLWNsYXNzIFB1dEltYWdl
RGF0YSB7CitjbGFzcyBQdXRQaXhlbEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRQaXhlbEJ1ZmZl
cjsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgUHV0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgUGl4ZWxCdWZmZXImLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
OworICAgIFdFQkNPUkVfRVhQT1JUIFB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCk7CisKKyAgICBQdXRQaXhlbEJ1ZmZlcihjb25zdCBQdXRQaXhlbEJ1ZmZlciYpOworICAgIFB1
dFBpeGVsQnVmZmVyKFB1dFBpeGVsQnVmZmVyJiYpID0gZGVmYXVsdDsKKyAgICBQdXRQaXhlbEJ1
ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFB1dFBpeGVsQnVmZmVyJik7CisgICAgUHV0UGl4ZWxCdWZm
ZXImIG9wZXJhdG9yPShQdXRQaXhlbEJ1ZmZlciYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHN3
YXAoUHV0UGl4ZWxCdWZmZXImKTsKIAogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0OyB9Ci0gICAgSW1hZ2VEYXRhJiBp
bWFnZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFnZURhdGE7IH0KKyAgICBjb25zdCBQaXhl
bEJ1ZmZlciYgcGl4ZWxCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsQnVmZmVyOyB9CiAg
ICAgSW50UmVjdCBzcmNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CiAgICAgSW50
UG9pbnQgZGVzdFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UG9pbnQ7IH0KICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RGb3Jt
YXQ7IH0KQEAgLTE5MzksMzEgKzE5NDUsMzEgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4ge3sgbV9kZXN0UG9pbnQsIG1fc3Jj
UmVjdC5zaXplKCkgfX07IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdXRQaXhlbEJ1ZmZlcj4gZGVjb2RlKERlY29k
ZXImKTsKIAogcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fc3JjUmVjdDsKICAgICBJbnRQb2ludCBt
X2Rlc3RQb2ludDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKKyAgICBQaXhl
bEJ1ZmZlciBtX3BpeGVsQnVmZmVyOwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gbV9pbnB1
dEZvcm1hdDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZvcm1hdDsKIH07CiAK
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFB1dEltYWdlRGF0YTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit2b2lkIFB1dFBpeGVsQnVmZmVyOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1faW5wdXRGb3JtYXQ7Ci0gICAgZW5j
b2RlciA8PCBtYWtlUmVmKCptX2ltYWdlRGF0YSk7CisgICAgZW5jb2RlciA8PCBtX3BpeGVsQnVm
ZmVyOwogICAgIGVuY29kZXIgPDwgbV9zcmNSZWN0OwogICAgIGVuY29kZXIgPDwgbV9kZXN0UG9p
bnQ7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RGb3JtYXQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxQdXRJbWFnZURhdGE+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitPcHRpb25hbDxQdXRQaXhlbEJ1ZmZlcj4gUHV0UGl4ZWxCdWZmZXI6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEFscGhhUHJlbXVsdGlwbGlj
YXRpb24+IGlucHV0Rm9ybWF0OwotICAgIE9wdGlvbmFsPFJlZjxJbWFnZURhdGE+PiBpbWFnZURh
dGE7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHBpeGVsQnVmZmVyOwogICAgIE9wdGlvbmFs
PEludFJlY3Q+IHNyY1JlY3Q7CiAgICAgT3B0aW9uYWw8SW50UG9pbnQ+IGRlc3RQb2ludDsKICAg
ICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxpY2F0aW9uPiBkZXN0Rm9ybWF0OwpAQCAtMTk3Miw4
ICsxOTc4LDggQEAgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlYwogICAg
IGlmICghaW5wdXRGb3JtYXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBk
ZWNvZGVyID4+IGltYWdlRGF0YTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBkZWNvZGVyID4+
IHBpeGVsQnVmZmVyOworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICBkZWNvZGVyID4+IHNyY1JlY3Q7CkBAIC0xOTg4LDcgKzE5OTQsNyBA
QCBPcHRpb25hbDxQdXRJbWFnZURhdGE+IFB1dEltYWdlRGF0YTo6ZGVjCiAgICAgaWYgKCFkZXN0
Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHt7ICpp
bnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpk
ZXN0Rm9ybWF0IH19OworICAgIHJldHVybiB7eyAqaW5wdXRGb3JtYXQsIFdURk1vdmUoKnBpeGVs
QnVmZmVyKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19OwogfQogCiAjaWYg
RU5BQkxFKFZJREVPKQpAQCAtMjMxNywxMCArMjMyMywxMCBAQCB1c2luZyBEaXNwbGF5TGlzdEl0
ZW0gPSBWYXJpYW50CiAgICAgLCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZQogICAgICwgRmlsbFJv
dW5kZWRSZWN0CiAgICAgLCBGbHVzaENvbnRleHQKLSAgICAsIEdldEltYWdlRGF0YQorICAgICwg
R2V0UGl4ZWxCdWZmZXIKICAgICAsIE1ldGFDb21tYW5kQ2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1
ZmZlcgogICAgICwgTWV0YUNvbW1hbmRDaGFuZ2VJdGVtQnVmZmVyCi0gICAgLCBQdXRJbWFnZURh
dGEKKyAgICAsIFB1dFBpeGVsQnVmZmVyCiAgICAgLCBSZXN0b3JlCiAgICAgLCBSb3RhdGUKICAg
ICAsIFNhdmUKQEAgLTI0MTksOCArMjQyNSw4IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6RGkKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZsdXNo
Q29udGV4dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6Ok1ldGFDb21tYW5k
Q2hhbmdlRGVzdGluYXRpb25JbWFnZUJ1ZmZlciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6Ok1ldGFDb21tYW5kQ2hhbmdlSXRlbUJ1ZmZlciwKLSAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkdldEltYWdlRGF0YSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSwKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkdldFBpeGVsQnVmZmVyLAorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6UHV0UGl4ZWxCdWZmZXIsCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhLAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSwxNCBAQCBSZWNvcmRl
cjo6flJlY29yZGVyKCkKICAgICBMT0coRGlzcGxheUxpc3RzLCAiUmVjb3JkZWQgZGlzcGxheSBs
aXN0OlxuJXMiLCBtX2Rpc3BsYXlMaXN0LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQordm9pZCBSZWNvcmRlcjo6Z2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QpCiB7Ci0gICAgYXBwZW5kPEdldEltYWdlRGF0YT4ob3V0cHV0Rm9ybWF0LCBz
b3VyY2VSZWN0KTsKKyAgICBhcHBlbmQ8R2V0UGl4ZWxCdWZmZXI+KG91dHB1dEZvcm1hdCwgc291
cmNlUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KQordm9pZCBSZWNvcmRlcjo6cHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZmZXIm
IHBpeGVsQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpCiB7Ci0gICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQsIGlt
YWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKKyAgICBhcHBlbmQ8UHV0
UGl4ZWxCdWZmZXI+KGlucHV0Rm9ybWF0LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDE0IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3Q7CisK
IGNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHbHlwaEJ1ZmZlcjsK
IGNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGb250OworY2xhc3Mg
R2x5cGhCdWZmZXI7CiBjbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIFBpeGVs
QnVmZmVyOwogCiBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBzdHJ1Y3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnM7CkBAIC01Nyw4ICs1OCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNv
bnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJl
Y29yZGVyKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXN0Rm9ybWF0KTsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eUxpc3QuaXNFbXB0eSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gOiB1aW50OF90OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwotY2xhc3MgSW1hZ2VEYXRhOwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qgewog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTI4NiwxMiArMjg2LDEyIEBAIHZvaWQgRkVDb2xv
ck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQ
b2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEg
PSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIHBp
eGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5k
YXRhKCk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6
ZSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1
dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwogCiAgICAgVmVj
dG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKICAgICAKQEAg
LTMxMyw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBpbWFn
ZVJlY3QpOworICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKIH0KIAog
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9y
TWF0cml4VHlwZSYgdHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAko
cmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0xMDgsMTEgKzEwOCwxMSBAQCB2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VSZXN1bHQpCisgICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvJiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1bHQtPmRhdGEoKTsKKyAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAK
ICAgICBMb29rdXBUYWJsZSByZWRUYWJsZTsKICAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwpA
QCAtMTIwLDExICsxMjAsMTEgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5UwogICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7CiAgICAgY29tcHV0ZUxvb2t1cFRhYmxl
cyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAotICAgIElu
dFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChwaXhl
bEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICB1bnNpZ25l
ZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKLSAgICB1aW50OF90KiBk
YXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9
IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewor
ICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkUmVz
dWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGlu
YXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlv
blBpeGVsQXJyYXkuZGF0YSgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBw
aXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgewogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZz
ZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3Bp
eGVsT2Zmc2V0ICsgMV1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFi
bGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCShyZXZpc2lv
biAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMjI5LDIxICsyMjksMjEgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKAogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVU
SUMpIHsKLSAgICAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwor
ICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAotICAgICAgICBhdXRvJiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmRh
dGEoKTsKKyAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYg
KCFzcmNQaXhlbEFycmF5KQorICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
CisgICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgaWYg
KCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KGRzdFBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKKyAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAg
ICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVm
ZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIAotICAgICAgICBwbGF0
Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc3JjUGl4ZWxBcnJheSwgZHN0UGl4ZWxBcnJheSwgbV9r
MSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1f
azMsIG1fazQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKICNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzcxLDMzICszNzEs
MjggQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdAogewogICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIEltYWdlRGF0YSogcmVzdWx0
SW1hZ2U7Ci0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgcmVzdWx0SW1hZ2UgPSBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0
SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQotICAgIGlmICghcmVz
dWx0SW1hZ2UpCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVB
bHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0
YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJ
bnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gc3JjUGl4ZWxBcnJheTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJj
ZVBpeGVsQXJyYXk7CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc3JjUGl4ZWxB
cnJheSA9IGluLT51bm11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBs
aWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAg
IGVsc2UKLSAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVm
ZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc3JjUGl4
ZWxBcnJheSkKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICgh
c291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50U2l6ZSBwYWludFNp
emUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKICAgICBwYWludFNpemUuc2NhbGUoZmls
dGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0g
ewotICAgICAgICAqc3JjUGl4ZWxBcnJheSwKLSAgICAgICAgZHN0UGl4ZWxBcnJheSwKKyAgICAg
ICAgKnNvdXJjZVBpeGVsQXJyYXksCisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKICAg
ICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKICAg
ICAgICAgbV9iaWFzICogMjU1LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHJl
dmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTksMTYg
Kzk5LDE2IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAgICBB
U1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAgICAgQVNTRVJU
KG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogCi0gICAgYXV0byogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFn
ZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIGF1dG8gaW5wdXRJbWFn
ZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKLSAgICBJ
bnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVl
cyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNv
bG9yIHZhbHVlcy4KICAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKICAgICAKQEAgLTEzNiwxOCArMTM2LDE4IEBA
IHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2YKICAgICAgICAgaW50IGxp
bmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsKIAogICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkc3RJbmRleCA9
IGxpbmVTdGFydE9mZnNldCArIHggKiA0OworICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5k
ZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNl
bWVudEltYWdlLT5pdGVtKGRzdEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVk
T2Zmc2V0WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNj
YWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZHN0SW5kZXggKyBkaXNwbGFj
ZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBzcmNYID0g
eCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+
aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zm
c2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxl
Rm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRp
c3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwogCi0gICAgICAgICAgICB1bnNp
Z25lZCogZHN0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxB
cnJheS5kYXRhKCkgKyBkc3RJbmRleCk7CisgICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRp
b25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVs
QXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7CiAgICAgICAgICAgICBpZiAoc3JjWCA8
IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBh
aW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkc3RQaXhlbFB0ciA9IDA7Cisg
ICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAwOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAqZHN0UGl4ZWxQdHIgPSAq
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZz
ZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CisgICAgICAgICAgICAqZGVzdGluYXRp
b25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJbWFnZS0+ZGF0
YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKICAgICAgICAg
fQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5C
bHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNs
dWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC05OSwxNiArOTksMTUgQEAgdm9pZCBGRURyb3BT
aGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZQogCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKLSAgICAvLyBUT0RPOiBE
aXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhl
IEltYWdlRGF0YS4KICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dB
cmVhKTsKLSAgICBpZiAoIWltYWdlRGF0YSkKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0
SW1hZ2UtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIHNoYWRvd0FyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8mIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKLSAgICBjb250
ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXkuZGF0YSgpLCBpbWFnZURhdGEt
PnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOworICAgIGF1dG8mIHNvdXJj
ZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCks
IDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwogICAgIAotICAgIHJlc3VsdEltYWdl
LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmlt
YWdlRGF0YSwgc2hhZG93QXJlYSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpwaXhlbEJ1ZmZlciwgc2hhZG93
QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0Nv
bG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5C
bHVyTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCkBA
IC01MjMsMTYgKzUyMywxNiBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29m
dHdhCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0
byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSByZXN1
bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNB
bHBoYUltYWdlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGlu
LT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAo
IW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0NSw3ICs1NDUsNyBA
QCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhCiAgICAgaWYgKCF0bXBJ
bWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQXBwbHkoZHN0UGl4ZWxB
cnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdo
dCgpLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5
LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCks
IHBhaW50U2l6ZSk7CiB9CiAKIEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1
ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00NzUsMjMgKzQ3NSwyMyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwogCi0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHJl
c3VsdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIHNl
dElzQWxwaGFJbWFnZShmYWxzZSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0g
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KHJlc3VsdFBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEs
MSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCiAgICAgLy8gc3RhbmRhcmQgaGFzIG5v
IHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhh
cyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBh
bmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAvLyBBbnl3YXksIGZlQ29u
dm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgogCiAgICAgSW50
U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAg
IGRyYXdMaWdodGluZyhyZXN1bHRQaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgp
LCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNp
emUuaGVpZ2h0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkZpbHRl
ci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yNDMsMjMgKzI0MywyMyBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5kYXRhKCk7
CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAK
LSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0
U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwogICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5l
cmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lk
dGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmlsdGVyJiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0g
aW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAK
ICAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0
aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQg
RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkgPSBzcmNQaXhlbEFycmF5LmdldCgpOworICAgIHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKICAgICBwYWludGluZ0RhdGEuZHN0UGl4
ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdEYXRhLndpZHRo
ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKICAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVp
Z2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCShy
ZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNp
bmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzk2LDE3ICszOTYsMTcgQEAgdm9pZCBGRVR1cmJ1bGVu
Y2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbAogCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKIHsKLSAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8mIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIElu
dFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAgcmVzdWx0
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChyZXN1bHRTaXpl
LmlzRW1wdHkoKSkgewotICAgICAgICBwaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkg
ewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyKGkpOwogICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlz
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5Owog
ICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAg
ICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAgICAgICAgICAg
ICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgRkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKICAgICB9CiAKICAgICAvLyBGYWxsYmFj
ayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0
aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZpbGxSZWdpb24ocGl4
ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIGZpbGxS
ZWdpb24oZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAs
IGhlaWdodCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5l
cy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNzcsNyArNzcsNyBAQCBGbG9hdFBvaW50
IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlCiAgICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7
CiB9CiAKLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0CitJbnRSZWN0IEZpbHRlckVmZmVj
dDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmIGVmZmVj
dFJlY3QpIGNvbnN0CiB7CiAgICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFpbnRS
ZWN0LmxvY2F0aW9uKCk7CiAgICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0aW9u
KCkpOwpAQCAtMjQ3LDggKzI0Nyw4IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJl
TXVsdGlwbGkKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiB7CiAgICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IG51bGxwdHI7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBudWxscHRyOworICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CisgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0
OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRmlsdGVy
RWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBWYWx1ZU9yTnVsbChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSkgPDwgIiBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgVmFsdWVPck51bGwobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC5nZXQoKSkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwg
IkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdl
QnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJS
ZXN1bHQgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KTsKIAogICAgIGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmUKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0
aW5hdGlvblJlY3QpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
UmVzdWx0LmdldCgpOwogfQogCkBAIC0yOTAsMTEgKzI5MCwxNCBAQCBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6
ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRT
aXplKSk7CiAgICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKChzY2FsZWRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIWltYWdl
RGF0YSkKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJm
bG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCppbWFnZURhdGEs
IHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgYXV0byBwaXhl
bEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tl
ZEFyZWEudW5zYWZlR2V0KCkpOworICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwg
Y29sb3JTcGFjZSk7CisgICAgcmV0dXJuIHBpeGVsQXJyYXk7CiB9CiAKIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJl
Y3QmIHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKQEAg
LTMwMiwxMSArMzA1LDE0IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0
OjoKICAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKICAgICBzY2FsZWRTaXpl
LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gaW1hZ2VEYXRhID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHNjYWxlZFNpemUuYXJlYSgp
ICogNCkudW5zYWZlR2V0KCkpOwotICAgIGlmICghaW1hZ2VEYXRhKQorICAgIGF1dG8gY2hlY2tl
ZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChj
aGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGNoZWNrZWRBcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCppbWFnZURh
dGEsIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBpbWFnZURhdGE7CisgICAgY29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOworICAgIHJl
dHVybiBwaXhlbEFycmF5OwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdApAQCAtNDMzLDc4ICs0MzksODAgQEAg
c3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjbwogI2VuZGlmCiB9CiAKLVJl
ZlB0cjxJbWFnZURhdGE+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VEYXRhJiBpbnB1
dERhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQorT3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQogewotICAgIEludFJl
Y3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIGlucHV0RGF0YS5zaXplKCkpOworICAgIC8v
IEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBj
b252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCisKKyAgICBJ
bnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOwog
ICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9y
ZSBpbmNvbWluZyBJbWFnZURhdGEKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3Rv
cmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmls
dGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwog
ICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBidWZmZXItPnB1
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIGlucHV0RGF0YSwgZGVzdGluYXRpb25SZWN0KTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKG91
dHB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIGNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBk
ZXN0aW5hdGlvblJlY3QsIG91dHB1dEZvcm1hdCk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEZp
bHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0
IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0KQorT3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSB0YXJnZXRDb2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0KQogewogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CiAgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVm
ZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxl
IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KICAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKICAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lv
biBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0
byBhbm90aGVyCiAgICAgY29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KGlucHV0QnVmZmVyLCByZWN0KTsKLSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0KTsKKyAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5n
ZXRQaXhlbEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7
CiAgICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQs
IGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBj
b252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJS
ZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0
Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZEltYWdlRGF0YSkKKyAgICBhdXRvIGNvbnZlcnRl
ZFBpeGVsQnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2Us
ICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZEltYWdlRGF0YS0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZl
cnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7CiB9CiAKLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VEYXRhVG9EZXN0aW5hdGlvbihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlD
b252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCiAgICAg
Ly8gd2hpY2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0
byBjb252ZXJ0ZWRJbWFnZURhdGEgPSBjb252ZXJ0SW1hZ2VEYXRhVG9Db2xvclNwYWNlKGNvbG9y
U3BhY2UsIGltYWdlRGF0YSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZlcnRlZEltYWdl
RGF0YSkKKyAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVy
VG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsIHBpeGVsQnVmZmVyLCBvdXRwdXRGb3JtYXQpOworICAg
IGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1h
Z2VCeXRlcyhjb252ZXJ0ZWRJbWFnZURhdGEtPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0
KTsKKyAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0
aW5hdGlvbiwgZGVzdFJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIE9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKIHsKICAg
ICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhp
cyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIg
PDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSA8
PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1ZU9yTnVsbChtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0LmdldCgpKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7CiAKICAgICBpZiAoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lv
biBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0
KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNlQ29udmVyc2lv
bihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewogICAgICAgICAgICAgICAgIGNvcHlDb252
ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpIH0pOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJ
bnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAg
ICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAg
ICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1
dFNpemUpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVm
ZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY29weVVucHJlbXVs
dGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgaWYgKHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFj
ZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oZGVzdGlu
YXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKKyAgICBpZiAocmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGNv
cHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjb3B5
SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9u
LCByZWN0KTsKQEAgLTUxNCwzMSArNTIyLDMxIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJl
bXVsdGlwbGllZFJlc3UKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3Rp
bmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IFZhbHVlT3JOdWxsKG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LmdldCgpKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBWYWx1
ZU9yTnVsbChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKSk7CisgICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3Rpbmcg
aW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OwogCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBX
ZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc0ltYWdlRGF0
YUNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICBpZiAocmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CiAgICAg
ICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5h
dGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHJlY3QpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9p
bnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAgICAgICAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFn
ZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAocmVxdWlyZXNJbWFnZURhdGFDb2xvclNwYWNl
Q29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VEYXRh
VG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAq
Y29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7
CisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNw
YWNlKSkgeworICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CkBAIC01NTgsNzEgKzU2Niw3MyBAQCBJbWFnZUJ1
ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXJSZXN1bHQuZ2V0KCk7CiB9CiAKLUltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVj
dDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0ZXJzLCAi
RmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVy
TmFtZSgpLCB0aGlzKTsKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQu
CiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0KTsKKwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0OwogCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRT
aXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6
ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CisgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTgsIHJlc3VsdFNpemUpOworICAg
IHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwogfQogCi1JbWFnZURhdGEqIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKK09wdGlvbmFsPFBpeGVs
QnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQog
ewogICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAKICAgICAvLyBPbmx5IG9uZSBy
ZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAgIEFT
U0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOworCiAgICAgaWYgKG1fYWJzb2x1dGVQ
YWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50U2l6ZSByZXN1bHRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IElt
YWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKTsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVs
QnVmZmVyOjp0cnlDcmVhdGUoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1h
dDo6QkdSQTgsIHJlc3VsdFNpemUpOworICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKIH0KIAotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFj
ZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBkc3RDb2xvclNwYWNl
KQorYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihPcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSkKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRo
ZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCiAg
ICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBz
cGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CiAgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIg
aXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZHN0Q29sb3JTcGFjZSAmJiBy
ZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRzdENvbG9yU3BhY2U7CisgICAgcmV0dXJuIGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNwYWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JT
cGFjZTsKICNlbHNlCiAgICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlz
IG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5VU0VEX1BBUkFNKGRzdENvbG9yU3BhY2UpOwor
ICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3ZvaWQgRmlsdGVyRWZm
ZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBkZXN0
aW5hdGlvbkNvbG9yU3BhY2UpCiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENHIGhhbmRsZXMgY29s
b3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZHN0Q29s
b3JTcGFjZSk7CisgICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAjZWxz
ZQotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZHN0Q29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpCisgICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0g
bV9yZXN1bHRDb2xvclNwYWNlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ug
Y2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVy
c2lvbiBieSBhZGRpbmcKICAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3Ig
dGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+
dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9yU3BhY2UpOwor
ICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1bHRDb2xv
clNwYWNlLCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogCi0gICAgbV9yZXN1bHRDb2xvclNwYWNl
ID0gZHN0Q29sb3JTcGFjZTsKKyAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNv
bG9yU3BhY2U7CiAKLSAgICBpZiAobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG51
bGxwdHI7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFdURjo6bnVsbG9wdDsKKyAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFdURjo6bnVsbG9wdDsKICNlbmRpZgogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRoZXdzIDxwb3Nz
ZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI2LDggKzI3LDEwIEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CkBAIC00MSw3ICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xh
c3MgSW1hZ2VEYXRhOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmls
dGVyRWZmZWN0VmVjdG9yOwogCkBAIC0xMDAsNyArMTAyLDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBj
b25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAKICAgICAvLyBSZWN1cnNlcyBvbiBp
bnB1dHMuCiAgICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwpAQCAtMTg1LDggKzE4Nyw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9w
ZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEg
aW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTIw
MiwxOCArMjA0LDE4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZvaWQgY29weUNvbnZlcnRlZEltYWdlQnVm
ZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY29w
eUNvbnZlcnRlZEltYWdlRGF0YVRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBJbWFn
ZURhdGEmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNv
bnN0IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzSW1hZ2VEYXRhQ29sb3JTcGFjZUNvbnZl
cnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7Ci0gICAgUmVmUHRyPEltYWdl
RGF0YT4gY29udmVydEltYWdlRGF0YVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2Us
IEltYWdlRGF0YSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2Us
IEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwor
ICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1w
ZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oT3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7
CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7CisgICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyJiwgY29uc3QgSW50UmVj
dCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIAogCiAgICAgRmlsdGVyJiBtX2ZpbHRl
cjsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4g
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAJKHJldmlzaW9uIDI3
NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKIAog
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KIAogI2lm
IFVTRShBVkZPVU5EQVRJT04pCkBAIC0yMDksMTAgKzIwOSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludFJlbmRlCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBh
dXRvIGltYWdlRGF0YSA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0gICAgaWYgKCFpbWFnZURh
dGEpCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CisgICAg
aWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIHBhaW50VG9DYW52YXMoY29u
dGV4dEF0dHJpYnV0ZXMoKSwgaW1hZ2VEYXRhLnJlbGVhc2VOb25OdWxsKCksIGltYWdlQnVmZmVy
LmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CisgICAgcGFpbnRUb0NhbnZh
cyhjb250ZXh0QXR0cmlidXRlcygpLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdlQnVmZmVy
LmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLmNvbnRleHQoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciYgaW1hZ2VCdWZmZXIpCkBAIC0yMjEsNDAgKzIyMSw0MCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwYWludENvbXBvCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZ2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBh
dXRvIGltYWdlRGF0YSA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpOwotICAgIGlmICghaW1hZ2VE
YXRhKQorICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRUb0NhbnZhcyhj
b250ZXh0QXR0cmlidXRlcygpLCBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZm
ZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKKyAgICBwYWludFRvQ2Fu
dmFzKGNvbnRleHRBdHRyaWJ1dGVzKCksIFdURk1vdmUoKnBpeGVsQnVmZmVyKSwgaW1hZ2VCdWZm
ZXIuYmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXIuY29udGV4dCgpKTsKIH0KIAotUmVmUHRyPElt
YWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKCkKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpCiB7CiAgICAgLy8gUmVhZGlu
ZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hp
Y2ggaXMgbG9zc3kuCiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFs
cGhhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICByZXR1cm4gcmVhZFJlbmRlcmluZ1Jlc3VsdHNGb3JQYWludGluZygpOwogfQogCi1S
ZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHNGb3JQYWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKQogewogICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGlmIChnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgcmV0dXJuIHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7CiB9CiAKLVJlZlB0
cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3Vs
dHNGb3JQYWludGluZygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCkKIHsKICAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIHJldHVybiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKIH0KIAogI2lmICFQ
TEFURk9STShDT0NPQSkKLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQogewogICAgIHJldHVybiBy
ZWFkUmVuZGVyaW5nUmVzdWx0cygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw4ICs4Nyw4IEBAIGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTDsKICNlbmRpZgogY2xhc3Mg
SG9zdFdpbmRvdzsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3Mg
TWVkaWFQbGF5ZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CiBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKQEAgLTQ2Mywx
MSArNDYzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3Rp
ZmljYXRpb24oKTsKIAogICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1h
Z2VCdWZmZXImKSBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YSgpIGZpbmFsOworICAgIE9wdGlvbmFsPFBpeGVsQnVmZmVyPiBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENv
bXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXImKSBmaW5hbDsKIAotICAgIFJlZlB0
cjxJbWFnZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzRm9yUGFpbnRpbmcoKTsKLSAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiByZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpOworICAgIE9w
dGlvbmFsPFBpeGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCk7Cisg
ICAgT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IHJlYWRDb21wb3NpdGVkUmVzdWx0c0ZvclBhaW50aW5n
KCk7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBjb3B5VGV4dHVyZUZyb21NZWRpYShN
ZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGZpbmFsOwpA
QCAtNTI2LDcgKzUyNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1h
dEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVu
dW0mIGZvcm1hdCwgR0NHTGVudW0mIHR5cGUpOwogI2VuZGlmIC8vICFVU0UoQU5HTEUpCiAKLSAg
ICBzdGF0aWMgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYsIFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBo
aWNzQ29udGV4dCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzJiwgUGl4ZWxCdWZmZXImJiwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09D
T0EpCkBAIC01NTMsOSArNTUzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrR1BVU3RhdHVz
KCk7CiAKIAotICAgIFJlZlB0cjxJbWFnZURhdGE+IHJlYWRSZW5kZXJpbmdSZXN1bHRzKCk7Ci0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gcmVhZENvbXBvc2l0ZWRSZXN1bHRzKCk7Ci0gICAgUmVmUHRy
PEltYWdlRGF0YT4gcmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBp
eGVsQnVmZmVyPiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworICAgIE9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiByZWFkQ29tcG9zaXRlZFJlc3VsdHMoKTsKKyAgICBPcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
cmVhZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpOwogCiAgICAgYm9vbCByZXNoYXBlRkJPcyhjb25z
dCBJbnRTaXplJik7CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCShyZXZpc2lvbiAyNzcyNTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAj
aWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoT1BFTkdMKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dM
T3BlbkdMLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRlbXBv
cmFyeU9wZW5HTFNldHRpbmcuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0
cmluZz4KQEAgLTYxLDEyICs2MSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotUmVm
UHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWlu
dFJlc3VsdHMoKQorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkUGl4ZWxzRm9yUGFpbnRSZXN1bHRzKCkKIHsKLSAgICBhdXRvIGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkpOwotICAgIGlmICgh
aW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSk7CisgICAgaWYg
KCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEdMaW50
IHBhY2tBbGlnbm1lbnQgPSA0OwogICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0g
ZmFsc2U7CkBAIC03NiwxMiArNzUsMTIgQEAgUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuRwogICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAg
IH0KIAotICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIGltYWdlRGF0YS0+d2lkdGgoKSwgaW1hZ2VE
YXRhLT5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2VEYXRhLT5kYXRh
KCkuZGF0YSgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBwaXhlbEJ1ZmZlci0+c2l6ZSgp
LndpZHRoKCksIHBpeGVsQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIHBpeGVsQnVmZmVyLT5kYXRhKCkuZGF0YSgpKTsKIAogICAgIGlmIChtdXN0UmVz
dG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdO
TUVOVCwgcGFja0FsaWdubWVudCk7CiAKLSAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIHJldHVy
biBwaXhlbEJ1ZmZlcjsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29tbW9uLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEwIEBACiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlk
Z2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgogI2luY2x1ZGUgIldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1
bGFyRXhwcmVzc2lvbi5oPgpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnByZXBhcmVUZXgKICAgICA6OmdsRmx1c2goKTsKIH0KIAotUmVmUHRyPEltYWdl
RGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKCkKK09w
dGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHMoKQogewogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAo
Y29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAjaWYgRU5BQkxFKFdFQkdMKSAm
JiBVU0UoT1BFTkdMX0VTKQogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKIAogI2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcuaD4KIApAQCAtNDYsNyArNDYsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0KICAgICBhdXRvIGF0dHJpYnV0
ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdv
IGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKQEAgLTY1
LDExICs2NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkblBpeGVsCiAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZFBpeGVsc0ZvclBhaW50UmVzdWx0cygpCitPcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogewotICAgIGF1dG8g
aW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1
dG8gcGl4ZWxCdWZmZXIgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CiAgICAgYm9vbCBtdXN0UmVzdG9yZVBh
Y2tBbGlnbm1lbnQgPSBmYWxzZTsKQEAgLTc5LDEyICs3OCwxMiBAQCBSZWZQdHI8SW1hZ2VEYXRh
PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVu
dCA9IHRydWU7CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgaW1hZ2VEYXRhLT53
aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBp
bWFnZURhdGEtPmRhdGEoKS5kYXRhKCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIHBpeGVs
QnVmZmVyLT5zaXplKCkud2lkdGgoKSwgcGl4ZWxCdWZmZXItPnNpemUoKS5oZWlnaHQoKSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCkpOwogCiAg
ICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKICAgICAgICAgOjpnbFBpeGVsU3RvcmVp
KEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKIAotICAgIHJldHVybiBpbWFnZURh
dGE7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJDT01QdHIu
aCIKICNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlRGVjb2RlckRp
cmVjdDJELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQx
XzEuaD4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0zMTIsMTYgKzMxMiwxNiBAQCBWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKK09wdGlvbmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBudWxscHRyKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhl
bEJ1ZmZlcihvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOwogfQogCi12b2lkIEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dFBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5w
dXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxs
cHRyKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKGlucHV0Rm9ybWF0
LCBwaXhlbEJ1ZmZlciwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0LCBudWxscHRyKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBQaXhlbEJ1ZmZlciYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAK
IHByb3RlY3RlZDoKICAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNyw3ICs0MjcsNyBAQCBJbnRSZWN0
IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CiAgICAgYXV0byYgbGFzdEVmZmVjdCA9IG1f
ZWZmZWN0cy5sYXN0KCkuZ2V0KCk7CiAgICAgCiAgICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0
KCkgfHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkp
KQotICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VE
YXRhKEludFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKKyAgICAgICAgcmV0dXJuIGxhc3RFZmZl
Y3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBtX2ZpbHRlclJl
Z2lvbiB9KTsKICAgICAKICAgICByZXR1cm4geyB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4
ICszNSw4IEBACiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKICNpbmNs
dWRlICJSZWN0YW5nbGVTaGFwZS5oIgpAQCAtMTk3LDE0ICsxOTcsMTQgQEAgc3RkOjp1bmlxdWVf
cHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlUmFzdAogICAgIGlmIChpbWFnZSkKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VS
ZWN0LnNpemUoKSkpOwogCi0gICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2lu
dCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1
ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCB7IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CiAgICAgCi0gICAgLy8gV2Ug
Y291bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgaW1hZ2VEYXRhIGNvdWxkIGJlIG51bGxwdHIuIEEg
Y2FzZSB3aGVyZSBJbWFnZVJlY3Quc2l6ZSgpIGlzIGh1Z2UsIGltYWdlRGF0YTo6Y3JlYXRlCi0g
ICAgLy8gY2FuIHJldHVybiBhIG51bGxwdHIgYmVjYXVzZSBkYXRhIHNpemUgaGFzIG92ZXJmbG93
ZWQuIFJlZmVyIHJkYXI6Ly9wcm9ibGVtLzYxNzkzODg0Ci0gICAgaWYgKCFpbWFnZURhdGEpCisg
ICAgLy8gV2UgY291bGQgZ2V0IHRvIGEgdmFsdWUgd2hlcmUgUGl4ZWxCdWZmZXIgY291bGQgYmUg
bnVsbG9wdC4gQSBjYXNlIHdoZXJlIEltYWdlUmVjdC5zaXplKCkgaXMgaHVnZSwgUGl4ZWxCdWZm
ZXI6OnRyeUNyZWF0ZQorICAgIC8vIGNhbiByZXR1cm4gYSBudWxsb3B0IGJlY2F1c2UgZGF0YSBz
aXplIGhhcyBvdmVyZmxvd2VkLiBSZWZlciByZGFyOi8vcHJvYmxlbS82MTc5Mzg4NAorICAgIGlm
ICghcGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVTaGFwZSgpOwogCi0gICAgYXV0
byYgcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGF1dG8mIHBpeGVsQXJyYXkg
PSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBw
aXhlbEFycmF5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAv
LyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgdWludDhfdCBhbHBoYVBpeGVs
VGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZsb2F0Pih0
aHJlc2hvbGQsIDAsIDEpICogMjU1LjBmKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MjY0
KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4
OCBAQAorMjAyMS0wNS0wOSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgVXNlIFBpeGVsQnVmZmVyIHJhdGhlciB0aGFuIEltYWdlRGF0YSBpbiBwbGF0Zm9ybS8gY29k
ZSB0byBmaXggbGF5ZXJpbmcgdmlvbGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIHRoZSBET00gbGF5ZXIgb2JqZWN0
IFdlYkNvcmU6OkltYWdlRGF0YSB3aXRoIHRoZSBuZXcgcGxhdGZvcm0KKyAgICAgICAgbGF5ZXIg
V2ViQ29yZTo6UGl4ZWxCdWZmZXIsIHdoaWNoIGZpeGVzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIFdl
YkNvcmUgYW5kIGF2b2lkcworICAgICAgICB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyAvIHJlZmVy
ZW5jZSBjb3VudGluZy4KKworICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5o
OgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPE9wdGlvbmFsPFQ+Pjo6ZW5jb2RlKToKKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxPcHRpb25hbDxUPj46OmRlY29kZSk6CisgICAgICAg
IEFkZCB0ZW1wbGF0aXplZCBFbmNvZGVyL0RlY29kZXIgdG8gd29yayB3aXRoIHN0cmVhbWluZyBl
bmNvZGVyLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdy
YXBoaWNzQ29udGV4dEdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFpbnRQaXhlbEJ1ZmZlclRvSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6cGFp
bnRJbWFnZURhdGFUb0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmg6CisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2Vu
ZXJhdGVkLmg6CisgICAgICAgIChwYWludFJlbmRlcmluZ1Jlc3VsdHNUb1BpeGVsQnVmZmVyKToK
KyAgICAgICAgKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmg6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9y
R2V0UGl4ZWxCdWZmZXJIZWxwZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjp1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVy
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVk
TWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkZXN0cm95R2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldFBp
eGVsQnVmZmVyU2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6ZGVjb2RlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YUhlbHBlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1l
bW9yeUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnNlbWFwaG9yZUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFu
ZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0
ZUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkNHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6Q0dEaXNwbGF5TGlzdEltYWdl
QnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpDR0Rpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNw
bGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZjxXZWJDb3Jl
OjpJbWFnZURhdGE+Pjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZURhdGE+Pjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0UGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR3Jh
cGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnB1dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cHV0SW1hZ2VEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpkZXN0cm95R2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckdldEltYWdlRGF0
YVRvQ29tcGxldGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1
dFBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6
IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6CisKIDIwMjEtMDUtMTAgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgV0tC
dW5kbGVQYWdlR3JvdXBSZWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmNwcAkocmV2aXNp
b24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdy
YXBoaWNzQ29udGV4dEdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDE2ICsxOTgsMTYgQEAg
dm9pZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTDo6bm90aWZ5TWFyawogdm9pZCBSZW1vdGVHcmFw
aGljc0NvbnRleHRHTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3Ry
ZWFtVGhyZWFkKTsKLSAgICBwYWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIobV9jb250ZXh0LT5y
ZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9j
b250ZXh0LT5yZWFkUmVuZGVyaW5nUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250
ZXh0R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQobV9zdHJlYW1UaHJl
YWQpOwotICAgIHBhaW50SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcihtX2NvbnRleHQtPnJlYWRDb21w
b3NpdGVkUmVzdWx0c0ZvclBhaW50aW5nKCksIGltYWdlQnVmZmVyLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgcGFpbnRQaXhlbEJ1ZmZlclRvSW1hZ2VCdWZmZXIobV9jb250ZXh0
LT5yZWFkQ29tcG9zaXRlZFJlc3VsdHNGb3JQYWludGluZygpLCBpbWFnZUJ1ZmZlciwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
OjpwYWludEltYWdlRGF0YVRvSW1hZ2VCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4m
JiBpbWFnZURhdGEsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciB0YXJnZXQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50UGl4ZWxCdWZmZXJUb0ltYWdlQnVmZmVyKE9wdGlv
bmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmIHBpeGVsQnVmZmVyLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgdGFyZ2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgYXNzZXJ0SXNDdXJyZW50KG1fc3RyZWFtVGhyZWFk
KTsKICAgICAvLyBGSVhNRTogV2UgZG8gbm90IGhhdmUgZnVuY3Rpb25pbmcgcmVhZC93cml0ZSBm
ZW5jZXMgaW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC4gVGh1cyB0aGlzIGlzIHN5bmNocm9ub3Vz
LApAQCAtMjE5LDggKzIxOSw4IEBAIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OnBhaW50
SW1hZ2UKICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbmRlcmluZ0JhY2tlbmQt
PnJlbW90ZVJlc291cmNlQ2FjaGUoKS5jYWNoZWRJbWFnZUJ1ZmZlcih0YXJnZXQpKSB7CiAgICAg
ICAgICAgICAvLyBIZXJlIHdlIGRvIG5vdCB0cnkgdG8gcGxheSBiYWNrIHBlbmRpbmcgY29tbWFu
ZHMgZm9yIGltYWdlQnVmZmVyLiBDdXJyZW50bHkgdGhpcyBjYWxsIGlzIG9ubHkgbWFkZSBmb3Ig
ZW1wdHkKICAgICAgICAgICAgIC8vIGltYWdlIGJ1ZmZlcnMgYW5kIHRoZXJlJ3Mgbm8gZ29vZCB3
YXkgdG8gYWRkIGRpc3BsYXkgbGlzdHMuCi0gICAgICAgICAgICBpZiAoaW1hZ2VEYXRhKQotICAg
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnRl
eHRBdHRyaWJ1dGVzLCBpbWFnZURhdGEucmVsZWFzZU5vbk51bGwoKSwgaW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgICAgICAgICAgaWYgKHBp
eGVsQnVmZmVyKQorICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWlu
dFRvQ2FudmFzKGNvbnRleHRBdHRyaWJ1dGVzLCBXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIGltYWdl
QnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmNsZWFyUmVj
dCh7IEludFBvaW50KCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpIH0pOwogICAgICAgICAg
ICAgLy8gVW5mb3J0dW5hdGVseSAiZmx1c2giIGltcGxlbWVudGF0aW9uIGluIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgb3ZlcmxvYWRzIG9yZGVyaW5nIGFuZCBlZmZlY3RzLgpJbmRleDogU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBo
aWNzQ29udGV4dEdMLmgJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDcgQEAgcHJvdGVjdGVkOgogCiAjaW5jbHVkZSAiUmVtb3RlR3JhcGhpY3ND
b250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaCIgLy8gTk9MSU5UCiAKLSAgICB2b2lkIHBhaW50
SW1hZ2VEYXRhVG9JbWFnZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYmLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgdm9pZCBwYWludFBpeGVsQnVmZmVyVG9JbWFnZUJ1ZmZlcihPcHRpb25hbDxX
ZWJDb3JlOjpQaXhlbEJ1ZmZlcj4mJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgV2Vha1B0cjxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVm
UHRyPElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjxSZW1vdGVHcmFwaGljc0NvbnRleHRHTD4+
IG1fc3RyZWFtQ29ubmVjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wu
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZUdyYXBoaWNzQ29udGV4
dEdMIE5vdFIKICAgICB2b2lkIE11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKHVpbnQzMl90
IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gZmlyc3RzLCBJUEM6OkFycmF5UmVm
ZXJlbmNlPGludDMyX3Q+IGNvdW50cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBpbnN0
YW5jZUNvdW50cywgaW50MzJfdCBkcmF3Y291bnQpCiAgICAgdm9pZCBNdWx0aURyYXdFbGVtZW50
c0FOR0xFKHVpbnQzMl90IG1vZGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8aW50MzJfdD4gY291bnRz
LCB1aW50MzJfdCB0eXBlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IG9mZnNldHMsIGlu
dDMyX3QgZHJhd2NvdW50KQogICAgIHZvaWQgTXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdM
RSh1aW50MzJfdCBtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMyX3Q+IGNvdW50cywgdWlu
dDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBvZmZzZXRzLCBJUEM6OkFy
cmF5UmVmZXJlbmNlPGludDMyX3Q+IGluc3RhbmNlQ291bnRzLCBpbnQzMl90IGRyYXdjb3VudCkK
LSAgICB2b2lkIFBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgLT4gKFJlZlB0cjxX
ZWJDb3JlOjpJbWFnZURhdGE+IHJldHVyblZhbHVlKSBTeW5jaHJvbm91cworICAgIHZvaWQgUGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpIC0+IChPcHRpb25hbDxXZWJDb3JlOjpQ
aXhlbEJ1ZmZlcj4gcmV0dXJuVmFsdWUpIFN5bmNocm9ub3VzCiB9CiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
RnVuY3Rpb25zR2VuZXJhdGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMRnVuY3Rpb25zR2VuZXJhdGVkLmgJ
KHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzc5LDExICsxMzc5LDExIEBACiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0cmVh
bVRocmVhZCk7CiAgICAgICAgIG1fY29udGV4dC0+bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5jZWRB
TkdMRShtb2RlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkq
Pihjb3VudHMuZGF0YSgpKSwgY291bnRzLnNpemUoKSksIHR5cGUsIG1ha2VHQ0dMU3BhbihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPihvZmZzZXRzLmRhdGEoKSksIG9mZnNldHMuc2l6
ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0NHTHNpemVpKj4oaW5z
dGFuY2VDb3VudHMuZGF0YSgpKSwgaW5zdGFuY2VDb3VudHMuc2l6ZSgpKSwgZHJhd2NvdW50KTsK
ICAgICB9Ci0gICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQorICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZURhdGE+IHJldHVyblZhbHVlID0geyB9OworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhl
bEJ1ZmZlcj4gcmV0dXJuVmFsdWUgPSB7IH07CiAgICAgICAgIGFzc2VydElzQ3VycmVudChtX3N0
cmVhbVRocmVhZCk7Ci0gICAgICAgIHJldHVyblZhbHVlID0gbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgICAgICByZXR1cm5WYWx1ZSA9IG1fY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIu
aAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xh
c3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29yZQogICAgIHVzaW5nIEJhc2VDb25j
cmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT47CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAgICAgdXNp
bmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKLSAgICB1c2luZyBCYXNlQ29u
Y3JldGVJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhOworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUlt
YWdlQnVmZmVyOjpwdXRQaXhlbEJ1ZmZlcjsKIAogcHVibGljOgogICAgIHN0YXRpYyBhdXRvIGNy
ZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlBp
eGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKQpAQCAtNzYsMTYgKzc2LDE2IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVt
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAg
ICAgICBpZiAoaXRlbS5pczxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0SW1hZ2VEYXRhPigpKSB7
Ci0gICAgICAgICAgICBhdXRvJiBnZXRJbWFnZURhdGFJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkdldEltYWdlRGF0YT4oKTsKLSAgICAgICAgICAgIGF1dG8gaW1hZ2VEYXRh
ID0gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShnZXRJbWFnZURhdGFJdGVt
Lm91dHB1dEZvcm1hdCgpLCBnZXRJbWFnZURhdGFJdGVtLnNyY1JlY3QoKSk7Ci0gICAgICAgICAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRNZW1v
cnkoaW1hZ2VEYXRhLmdldCgpKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkdldFBpeGVsQnVmZmVyPigpKSB7CisgICAgICAgICAgICBhdXRvJiBnZXRQaXhlbEJ1
ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2V0UGl4ZWxCdWZmZXI+
KCk7CisgICAgICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXI6OmdldFBpeGVsQnVmZmVyKGdldFBpeGVsQnVmZmVySXRlbS5vdXRwdXRGb3JtYXQoKSwgZ2V0
UGl4ZWxCdWZmZXJJdGVtLnNyY1JlY3QoKSk7CisgICAgICAgICAgICBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQucG9wdWxhdGVHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeShXVEZNb3ZlKHBpeGVs
QnVmZmVyKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKLSAg
ICAgICAgICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigpOwotICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dElt
YWdlRGF0YUl0ZW0uaW5wdXRGb3JtYXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwg
cHV0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCks
IHB1dEltYWdlRGF0YUl0ZW0uZGVzdEZvcm1hdCgpKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlB1dFBpeGVsQnVmZmVyPigpKSB7CisgICAgICAgICAgICBhdXRv
JiBwdXRQaXhlbEJ1ZmZlckl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0
UGl4ZWxCdWZmZXI+KCk7CisgICAgICAgICAgICBwdXRQaXhlbEJ1ZmZlcihwdXRQaXhlbEJ1ZmZl
ckl0ZW0uaW5wdXRGb3JtYXQoKSwgcHV0UGl4ZWxCdWZmZXJJdGVtLnBpeGVsQnVmZmVyKCksIHB1
dFBpeGVsQnVmZmVySXRlbS5zcmNSZWN0KCksIHB1dFBpeGVsQnVmZmVySXRlbS5kZXN0UG9pbnQo
KSwgcHV0UGl4ZWxCdWZmZXJJdGVtLmRlc3RGb3JtYXQoKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCShyZXZpc2lv
biAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw2NSArMzE1LDY1IEBAIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2V0TmV4dEl0ZW0KICAgICBtX3BlbmRpbmdXYWtl
dXBJbmZvID0ge3t7IGlkZW50aWZpZXIsIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJT
aXplKCksIGRlc3RpbmF0aW9uSWRlbnRpZmllciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5z
cGVjaWZpZWQgfSwgV1RGOjpudWxsb3B0IH19OwogfQogCi1PcHRpb25hbDxTaGFyZWRNZW1vcnk6
OklQQ0hhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5Rm9y
R2V0SW1hZ2VEYXRhSGVscGVyKHNpemVfdCBieXRlQ291bnQpCitPcHRpb25hbDxTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6dXBkYXRlU2hhcmVkTWVtb3J5
Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoc2l6ZV90IGJ5dGVDb3VudCkKIHsKLSAgICBNRVNTQUdF
X0NIRUNLX1dJVEhfUkVUVVJOX1ZBTFVFKCFtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSB8fCBi
eXRlQ291bnQgPiBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpLCBXVEY6Om51bGxv
cHQsICJUaGUgZXhpc3RpbmcgU2htZW0gZm9yIGdldEltYWdlRGF0YSgpIGlzIGFscmVhZHkgYmln
IGVub3VnaCB0byBoYW5kbGUgdGhlIHJlcXVlc3QiKTsKKyAgICBNRVNTQUdFX0NIRUNLX1dJVEhf
UkVUVVJOX1ZBTFVFKCFtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5IHx8IGJ5dGVDb3VudCA+
IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSwgV1RGOjpudWxsb3B0LCAiVGhl
IGV4aXN0aW5nIFNobWVtIGZvciBnZXRQaXhlbEJ1ZmZlcigpIGlzIGFscmVhZHkgYmlnIGVub3Vn
aCB0byBoYW5kbGUgdGhlIHJlcXVlc3QiKTsKIAogICAgIGlmIChieXRlQ291bnQgPiA2NCAqIE1C
KSB7CiAgICAgICAgIC8vIEp1c3QgYSBzYW5pdHkgY2hlY2suIEEgNEsgaW1hZ2UgaXMgMzZNQi4K
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBkZXN0cm95R2V0SW1h
Z2VEYXRhU2hhcmVkTWVtb3J5KCk7Ci0gICAgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBT
aGFyZWRNZW1vcnk6OmFsbG9jYXRlKGJ5dGVDb3VudCk7CisgICAgZGVzdHJveUdldFBpeGVsQnVm
ZmVyU2hhcmVkTWVtb3J5KCk7CisgICAgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA9IFNo
YXJlZE1lbW9yeTo6YWxsb2NhdGUoYnl0ZUNvdW50KTsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSBoYW5kbGU7Ci0gICAgaWYgKG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KQotICAgICAgICBt
X2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeSA/IG1f
Z2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5LT5zaXplKCkgOiAwIH07CisgICAgaWYgKG1fZ2V0UGl4
ZWxCdWZmZXJTaGFyZWRNZW1vcnkpCisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1v
cnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOworICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxl
KSwgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSA/IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnktPnNpemUoKSA6IDAgfTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp1
cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEodWludDMyX3QgYnl0ZUNvdW50LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1
dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVD
b3VudCkpCisgICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4
ZWxCdWZmZXJIZWxwZXIoYnl0ZUNvdW50KSkKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShoYW5kbGUudmFsdWUoKSkpOwogICAgIGVsc2UKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1hcGhvcmVGb3JH
ZXRJbWFnZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNlbWFwaG9yZSYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzZW1h
cGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6
U2VtYXBob3JlJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIobV9nZXRJbWFnZURhdGFTZW1hcGhv
cmUpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUpOwog
fQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNl
bWFwaG9yZUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFw
aG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Ojp1cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJf
dCBieXRlQ291bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGUmLCBjb25zdCBJUEM6OlNlbWFwaG9yZSYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKGF1dG8gaGFuZGxl
ID0gdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhSGVscGVyKGJ5dGVDb3VudCkpCi0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlLnZhbHVlKCkpLCBtX2dldElt
YWdlRGF0YVNlbWFwaG9yZSk7CisgICAgaWYgKGF1dG8gaGFuZGxlID0gdXBkYXRlU2hhcmVkTWVt
b3J5Rm9yR2V0UGl4ZWxCdWZmZXJIZWxwZXIoYnl0ZUNvdW50KSkKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShoYW5kbGUudmFsdWUoKSksIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhv
cmUpOwogICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9LCBtX2dldEltYWdl
RGF0YVNlbWFwaG9yZSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSwgbV9nZXRQaXhl
bEJ1ZmZlclNlbWFwaG9yZSk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGVz
dHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbV9nZXRJbWFn
ZURhdGFTaGFyZWRNZW1vcnkgPSBudWxscHRyOworICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnkgPSBudWxscHRyOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnBvcHVs
YXRlR2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5KFdlYkNvcmU6OkltYWdlRGF0YSogaW1hZ2VEYXRh
KQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpwb3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hh
cmVkTWVtb3J5KE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiYmIHBpeGVsQnVmZmVyKQog
ewotICAgIE1FU1NBR0VfQ0hFQ0sobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnksICJXZSBjYW4n
dCBydW4gZ2V0SW1hZ2VEYXRhIHdpdGhvdXQgYSBidWZmZXIgdG8gd3JpdGUgaW50byIpOworICAg
IE1FU1NBR0VfQ0hFQ0sobV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSwgIldlIGNhbid0IHJ1
biBnZXRQaXhlbEJ1ZmZlciB3aXRob3V0IGEgYnVmZmVyIHRvIHdyaXRlIGludG8iKTsKIAotICAg
IGlmIChpbWFnZURhdGEpIHsKLSAgICAgICAgTUVTU0FHRV9DSEVDSyhpbWFnZURhdGEtPmRhdGEo
KS5ieXRlTGVuZ3RoKCkgPD0gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNo
bWVtIGZvciByZXR1cm4gb2YgZ2V0SW1hZ2VEYXRhIGlzIHRvbyBzbWFsbCIpOwotICAgICAgICBt
ZW1jcHkobV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnktPmRhdGEoKSwgaW1hZ2VEYXRhLT5kYXRh
KCkuZGF0YSgpLCBpbWFnZURhdGEtPmRhdGEoKS5ieXRlTGVuZ3RoKCkpOworICAgIGlmIChwaXhl
bEJ1ZmZlcikgeworICAgICAgICBNRVNTQUdFX0NIRUNLKHBpeGVsQnVmZmVyLT5kYXRhKCkuYnl0
ZUxlbmd0aCgpIDw9IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPnNpemUoKSwgIlNobWVt
IGZvciByZXR1cm4gb2YgZ2V0UGl4ZWxCdWZmZXIgaXMgdG9vIHNtYWxsIik7CisgICAgICAgIG1l
bWNweShtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5LT5kYXRhKCksIHBpeGVsQnVmZmVyLT5k
YXRhKCkuZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLmJ5dGVMZW5ndGgoKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIG1lbXNldChtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+ZGF0YSgpLCAw
LCBtX2dldEltYWdlRGF0YVNoYXJlZE1lbW9yeS0+c2l6ZSgpKTsKKyAgICAgICAgbWVtc2V0KG1f
Z2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnktPmRhdGEoKSwgMCwgbV9nZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeS0+c2l6ZSgpKTsKIAotICAgIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlLnNpZ25h
bCgpOworICAgIG1fZ2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmUuc2lnbmFsKCk7CiB9CiAKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC01MjEsOCArNTIxLDgg
QEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVQogICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CiAgICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxE
aXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9u
KTsKLSAgICBjYXNlIERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPERpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpQdXRQaXhlbEJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5
TGlzdDo6UHV0UGl4ZWxCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwogICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwg
aGFuZGxlTG9jYXRpb24pOwogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0
ZToKQEAgLTU4MSwxMCArNTgxLDkgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+
IFdBUk5fVQogICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAg
IGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VMaW5lOgogICAgIGNhc2UgRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgY2FzZSBEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkdldEltYWdlRGF0YTogeworICAgIGNhc2UgRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpHZXRQ
aXhlbEJ1ZmZlcjoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtODEs
NyArODEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5leHRJdGVtQnVmZmVyVG9SZWFkKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGRlc3RpbmF0aW9uKTsKIAotICAgIHZvaWQgcG9wdWxhdGVH
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoV2ViQ29yZTo6SW1hZ2VEYXRhKik7CisgICAgdm9pZCBw
b3B1bGF0ZUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVs
QnVmZmVyPiYmKTsKIAogICAgIGJvb2wgYWxsb3dzRXhpdFVuZGVyTWVtb3J5UHJlc3N1cmUoKSBj
b25zdDsKIApAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheVJlc3VsdCBzdWJtaXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiwgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGRlc3RpbmF0aW9uKTsKICAgICBSZWZQ
dHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG5leHREZXN0aW5hdGlvbkltYWdlQnVmZmVyQWZ0ZXJB
cHBseWluZ0Rpc3BsYXlMaXN0cyhXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW5pdGlhbERlc3RpbmF0
aW9uLCBzaXplX3QgaW5pdGlhbE9mZnNldCwgRGlzcGxheUxpc3RSZWFkZXJIYW5kbGUmLCBHUFVQ
cm9jZXNzV2FrZXVwUmVhc29uKTsKIAotICAgIE9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlPiB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGFIZWxwZXIoc2l6ZV90IGJ5dGVD
b3VudCk7CisgICAgT3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IHVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldFBpeGVsQnVmZmVySGVscGVyKHNpemVfdCBieXRlQ291bnQpOwogICAgIHZv
aWQgdXBkYXRlUmVuZGVyaW5nUmVzb3VyY2VSZXF1ZXN0KCk7CiAKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCkBAIC0xMjMsMTAgKzEyMywxMCBAQCBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2Vz
IHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIFdlYkNvcmU6
OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IHZvaWQgd2FrZVVwQW5kQXBwbHlEaXNwbGF5TGlzdChjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVz
c2FnZUFyZ3VtZW50cyYpOwotICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VE
YXRhKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKLSAgICB2b2lkIHNlbWFwaG9yZUZvckdldEltYWdl
RGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwot
ICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0SW1hZ2VEYXRhKHVp
bnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwotICAgIHZvaWQgZGVz
dHJveUdldEltYWdlRGF0YVNoYXJlZE1lbW9yeSgpOworICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVt
b3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOworICAgIHZvaWQgc2Vt
YXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6
OlNlbWFwaG9yZSYpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y
ZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3Jl
Jik+JiYpOworICAgIHZvaWQgZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5KCk7CiAg
ICAgdm9pZCBnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24sIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTdHJpbmcmJik+JiYpOwogICAgIHZvaWQgZ2V0RGF0YUZvckltYWdlQnVmZmVyKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50
OF90PiYmKT4mJik7CiAgICAgdm9pZCBnZXRCR1JBRGF0YUZvckltYWdlQnVmZmVyKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8dWludDhfdD4mJik+JiYpOwpAQCAtMTYxLDggKzE2MSw4IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxE
aXNwbGF5TGlzdFJlYWRlckhhbmRsZT4+IG1fc2hhcmVkRGlzcGxheUxpc3RIYW5kbGVzOwogICAg
IE9wdGlvbmFsPFBlbmRpbmdXYWtldXBJbmZvcm1hdGlvbj4gbV9wZW5kaW5nV2FrZXVwSW5mbzsK
ICAgICBJUEM6OlNlbWFwaG9yZSBtX3Jlc3VtZURpc3BsYXlMaXN0U2VtYXBob3JlOwotICAgIElQ
Qzo6U2VtYXBob3JlIG1fZ2V0SW1hZ2VEYXRhU2VtYXBob3JlOwotICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5OworICAgIElQQzo6U2VtYXBob3JlIG1f
Z2V0UGl4ZWxCdWZmZXJTZW1hcGhvcmU7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRQ
aXhlbEJ1ZmZlclNoYXJlZE1lbW9yeTsKICAgICBTY29wZWRSZW5kZXJpbmdSZXNvdXJjZXNSZXF1
ZXN0IG1fcmVuZGVyaW5nUmVzb3VyY2VzUmVxdWVzdDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEwIEBACiBtZXNzYWdlcyAtPiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9h
dFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQogICAgIFdha2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BV
UHJvY2Vzc1dha2V1cE1lc3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAgIFVwZGF0ZVNoYXJl
ZE1lbW9yeUZvckdldEltYWdlRGF0YSh1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25vdXMKLSAgICBTZW1hcGhvcmVG
b3JHZXRJbWFnZURhdGEoKSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91
cwotICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldEltYWdlRGF0YSh1aW50
MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRs
ZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cwotICAgIERlc3Ryb3lHZXRJ
bWFnZURhdGFTaGFyZWRNZW1vcnkoKQorICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVs
QnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENI
YW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cworICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVy
KCkgLT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMKKyAgICBVcGRhdGVT
aGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291
bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSwgSVBDOjpTZW1h
cGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cworICAgIERlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNo
YXJlZE1lbW9yeSgpCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxT
dHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDI3NzI1NSkK
KysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNSw3ICsxMzUsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlCiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxPcHRpb25hbDxUPj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBPcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IE9w
dGlvbmFsPFQ+JiBvcHRpb25hbCkKICAgICB7CiAgICAgICAgIGlmICghb3B0aW9uYWwpIHsKICAg
ICAgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7CkBAIC0xNDYsNyArMTQ3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZQogICAgICAgICBlbmNvZGVyIDw8IG9wdGlv
bmFsLnZhbHVlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBPcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBPcHRpb25hbDxUPiYgb3B0aW9uYWwpCiAgICAgewogICAg
ICAgICBib29sIGlzRW5nYWdlZDsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0VuZ2Fn
ZWQpKQpAQCAtMTY1LDcgKzE2Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1
bWVudENvZGUKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBP
cHRpb25hbDxPcHRpb25hbDxUPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5nYWdl
ZDsKICAgICAgICAgZGVjb2RlciA+PiBpc0VuZ2FnZWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysr
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxMTQsNzcgKzMxMTQsNiBAQCBPcHRpb25hbDxXZWJDb3JlOjpDRE1JbnN0YW5j
ZVNlc3Npb246Ok1lCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKIAotdGVt
cGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWY8V2ViQ29yZTo6
SW1hZ2VEYXRhPj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWY8V2ViQ29yZTo6
SW1hZ2VEYXRhPiYgaW1hZ2VEYXRhKQotewotICAgIGVuY29kZXIgPDwgaW1hZ2VEYXRhLT5zaXpl
KCk7Ci0KLSAgICBhdXRvJiByYXdEYXRhID0gaW1hZ2VEYXRhLT5kYXRhKCk7Ci0gICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmF3RGF0YS5ieXRlTGVuZ3RoKCkpOwotICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJhd0RhdGEuZGF0YSgpLCByYXdEYXRhLmJ5dGVM
ZW5ndGgoKSwgMSk7Ci19Ci0KLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNv
cmU6OkltYWdlRGF0YT4+OjplbmNvZGU8RW5jb2Rlcj4oRW5jb2RlciYsIGNvbnN0IFJlZjxXZWJD
b3JlOjpJbWFnZURhdGE+Jik7Ci10ZW1wbGF0ZQotdm9pZCBBcmd1bWVudENvZGVyPFJlZjxXZWJD
b3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlPFN0cmVhbUNvbm5lY3Rpb25FbmNvZGVyPihTdHJlYW1D
b25uZWN0aW9uRW5jb2RlciYsIGNvbnN0IFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci0KLU9w
dGlvbmFsPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+PiBBcmd1bWVudENvZGVyPFJlZjxXZWJDb3Jl
OjpJbWFnZURhdGE+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8
SW50U2l6ZT4gaW1hZ2VEYXRhU2l6ZTsKLSAgICBkZWNvZGVyID4+IGltYWdlRGF0YVNpemU7Ci0g
ICAgaWYgKCFpbWFnZURhdGFTaXplKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgT3B0aW9uYWw8dWludDY0X3Q+IGRhdGFMZW5ndGg7Ci0gICAgZGVjb2RlciA+PiBkYXRhTGVu
Z3RoOwotICAgIGlmICghZGF0YUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIGF1dG8gcmF3RGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKCpkYXRhTGVuZ3RoKTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KHJhd0RhdGEtPmRhdGEoKSwgcmF3RGF0YS0+bGVuZ3RoKCksIDEpKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZSgq
aW1hZ2VEYXRhU2l6ZSwgV1RGTW92ZShyYXdEYXRhKSk7Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4geyBpbWFnZURhdGEucmVs
ZWFzZU5vbk51bGwoKSB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotdm9pZCBB
cmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiBpbWFnZURhdGEpCi17
Ci0gICAgaWYgKCFpbWFnZURhdGEpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVuY29kZXIgPDwgdHJ1ZTsKLSAgICBBcmd1bWVudENv
ZGVyPFJlZjxXZWJDb3JlOjpJbWFnZURhdGE+Pjo6ZW5jb2RlKGVuY29kZXIsIGltYWdlRGF0YS5j
b3B5UmVmKCkucmVsZWFzZU5vbk51bGwoKSk7Ci19Ci0KLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50
Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUoRW5jb2RlciYsIGNvbnN0
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Jik7Ci0KLXRlbXBsYXRlCi12b2lkIEFyZ3VtZW50
Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4+OjplbmNvZGUoU3RyZWFtQ29ubmVjdGlv
bkVuY29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotCi1PcHRpb25h
bDxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2VEYXRhPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIGJvb2wgaXNF
bmdhZ2VkOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlmICghaXNFbmdhZ2VkKQotICAgICAgICByZXR1cm4g
eyBudWxscHRyIH07Ci0KLSAgICBhdXRvIHJlc3VsdCA9IEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNv
cmU6OkltYWdlRGF0YT4+OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHsgV1RGTW92ZSgqcmVzdWx0KSB9
OwotfQotCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoV0VCR0wpCiB2b2lkIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYgYXR0cmlidXRlcykKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVy
VHlwZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSW5kZXhlZERCLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnB1dE1vZGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL01lZGlhU2VsZWN0aW9uT3B0aW9uLmg+CkBAIC04MDQsMTggKzgwMyw2IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToKIH07CiAjZW5kaWYKIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj4g
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYpOwotICAgIHN0YXRp
YyBPcHRpb25hbDxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsK
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdl
RGF0YT4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiwgY29uc3QgUmVmPFdlYkNvcmU6OkltYWdlRGF0YT4mKTsKLSAgICBz
dGF0aWMgT3B0aW9uYWw8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+IGRlY29kZShEZWNvZGVyJik7
Ci19OwotCiAjaWYgSEFWRShQQVNTS0lUX0lOU1RBTExNRU5UUykKIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbj4g
ewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UGF5bWVu
dEluc3RhbGxtZW50Q29uZmlndXJhdGlvbiYpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
UmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9DR0Rpc3BsYXlM
aXN0SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc3MjU1KQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKENHX0RJ
U1BMQVlfTElTVF9CQUNLRURfSU1BR0VfQlVGRkVSKQogCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlRGF0YS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGl4ZWxCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvQ0dEaXNw
bGF5TGlzdEltYWdlQnVmZmVyQWRkaXRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KIApAQCAtMTA1LDEzICsxMDUsMTMgQEAgVmVjdG9yPHVpbnQ4X3Q+IENHRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcgogICAgIHJldHVybiB7IH07CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJ
bWFnZURhdGE+IENHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK09wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVy
PiBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRQaXhlbEJ1ZmZlcihXZWJDb3Jl
OjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QK
IHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
dm9pZCBDR0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1h
Z2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkKK3ZvaWQgQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgV2Vi
Q29yZTo6UGl4ZWxCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3Rl
TGF5ZXJUcmVlL0NHRGlzcGxheUxpc3RJbWFnZUJ1ZmZlckJhY2tlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdl
QnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvQ0dEaXNwbGF5TGlzdEltYWdlQnVmZmVyQmFja2VuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHB1YmxpYzoKICAgICAvLyBOT1RFOiBUaGVzZSBh
bGwgQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdGl2ZUltYWdl
PiBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNv
cHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4g
Z2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJ
bWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGl4
ZWxCdWZmZXI+IGdldFBpeGVsQnVmZmVyKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwdXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpQaXhlbEJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNPcmlnaW5BdFVwcGVyTGVmdENvcm5lciA9IHRydWU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5j
cHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ltYWdl
RGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGl4ZWxCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAt
MTYzLDE0ICsxNjMsMTQgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9iaXRtYXAtPmRh
dGEoKSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorT3B0aW9uYWw8UGl4ZWxCdWZmZXI+IElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgbV9iaXRtYXAtPmRhdGEoKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6Z2V0UGl4ZWxCdWZmZXIob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+
ZGF0YSgpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQor
dm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFBpeGVsQnVmZmVyJiBwaXhl
bEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9iaXRtYXAtPmRhdGEoKSk7CisgICAgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRQaXhlbEJ1ZmZlcihpbnB1dEZvcm1hdCwgcGl4ZWxCdWZmZXIs
IHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaD4KICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEltYWdlRGF0YTsKLX0KLQogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFNoYXJlYWJsZUJpdG1hcDsKQEAgLTYzLDggKzU5LDggQEAgcHVi
bGljOgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gY29weUltYWdlKFdlYkNvcmU6OkJhY2tp
bmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2
ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VEYXRhJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZm
ZXIoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dFBpeGVsQnVmZmVy
KFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNv
cmU6OlBpeGVsQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBieXRl
c1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHkuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBSZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5OjpwYWludAogCiAgICAgLy8gRklYTUU6IFdlIGNhbm5vdCBzeW5jaHJvbml6ZSBz
byB0aGF0IHdlIHdvdWxkIGtub3cgbm8gcGVuZGluZyBvcGVyYXRpb25zIGFyZSB1c2luZyB0aGUg
YGJ1ZmZlcmAuCiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5IFJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6OmdldEltYWdlRGF0YSBldCBhbCBkbyBub3Qgd2FpdCBmb3IgdGhlIGZsdXNoZXMgb2YgdGhl
IGltYWdlcworICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6
Z2V0UGl4ZWxCdWZmZXIgZXQgYWwgZG8gbm90IHdhaXQgZm9yIHRoZSBmbHVzaGVzIG9mIHRoZSBp
bWFnZXMKICAgICAvLyBpbnNpZGUgdGhlIGRpc3BsYXkgbGlzdHMuIFJhdGhlciwgaXQgYXNzdW1l
cyB0aGF0IHByb2Nlc3NpbmcgaXRzIHNlcXVlbmNlIChlLmcuIHRoZSBkaXNwbGF5IGxpc3QpIHdp
bGwgZXF1YWwgdG8gcmVhZCBmbHVzaCBiZWluZwogICAgIC8vIGZ1bGZpbGxlZC4gRm9yIGJlbG93
LCB3ZSBjYW5ub3QgY3JlYXRlIGEgbmV3IGZsdXNoIGlkIHNpbmNlIHdlIGdvIHRocm91Z2ggZGlm
ZmVyZW50IHNlcXVlbmNlIChSZW1vdGVHcmFwaGljc0NvbnRleHRHTCBzZXF1ZW5jZSkKIApJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0Nv
bnRleHRHTFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmgJKHJldmlzaW9uIDI3NzI1
NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgbXVsdGlEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9k
ZSwgR0NHTFNwYW48Y29uc3QgR0NHTGludD4gZmlyc3RzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6
ZWk+IGNvdW50cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBpbnN0YW5jZUNvdW50cywgR0NH
THNpemVpIGRyYXdjb3VudCkgZmluYWw7CiAgICAgdm9pZCBtdWx0aURyYXdFbGVtZW50c0FOR0xF
KEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51
bSB0eXBlLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMc2l6ZWkgZHJhd2Nv
dW50KSBmaW5hbDsKICAgICB2b2lkIG11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NH
TGVudW0gbW9kZSwgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdDR0xlbnVtIHR5
cGUsIEdDR0xTcGFuPGNvbnN0IEdDR0xpbnQ+IG9mZnNldHMsIEdDR0xTcGFuPGNvbnN0IEdDR0xz
aXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291bnQpIGZpbmFsOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCkgZmluYWw7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZmZXI+IHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvUGl4ZWxCdWZmZXIoKSBmaW5hbDsKICAgICAvLyBFbmQgb2YgbGlzdCB1c2Vk
IGJ5IGdlbmVyYXRlLWdwdXAtd2ViZ2wgc2NyaXB0LgogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdM
UHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0
aW9uc0dlbmVyYXRlZC5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9u
c0dlbmVyYXRlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNjYsMTEgKzIzNjYsMTEgQEAgdm9p
ZCBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjptdWx0aQogICAgIH0KIH0KIAotUmVmUHRy
PFdlYkNvcmU6OkltYWdlRGF0YT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorT3B0aW9uYWw8V2ViQ29yZTo6UGl4ZWxCdWZm
ZXI+IFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
UGl4ZWxCdWZmZXIoKQogewotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHJldHVyblZh
bHVlID0geyB9OworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiByZXR1cm5WYWx1
ZSA9IHsgfTsKICAgICBpZiAoIWlzQ29udGV4dExvc3QoKSkgewotICAgICAgICBhdXRvIHNlbmRS
ZXN1bHQgPSBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCksIE1lc3NhZ2VzOjpSZW1vdGVHcmFwaGljc0Nv
bnRleHRHTDo6UGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGE6OlJlcGx5KHJldHVyblZh
bHVlKSk7CisgICAgICAgIGF1dG8gc2VuZFJlc3VsdCA9IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVHcmFwaGljc0NvbnRleHRHTDo6UGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9QaXhlbEJ1ZmZlcigp
LCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3NDb250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvUGl4ZWxCdWZmZXI6OlJlcGx5KHJldHVyblZhbHVlKSk7CiAgICAgICAgIGlmICghc2VuZFJl
c3VsdCkKICAgICAgICAgICAgIG1hcmtDb250ZXh0TG9zdCgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDM4ICsxOTQsMzggQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
Yml0bWFwLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBPcHRpb25hbDxXZWJDb3JlOjpQaXhlbEJ1ZmZlcj4gZ2V0UGl4ZWxCdWZmZXIoV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAoVU5MSUtF
TFkoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBhdXRv
IGltYWdlRGF0YSA9IFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3Quc2l6ZSgpKTsK
LSAgICAgICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgc2l6ZV90IGRhdGFTaXplID0gaW1hZ2VEYXRhLT5kYXRhKCkuYnl0ZUxlbmd0aCgpOwor
ICAgICAgICBhdXRvIHBpeGVsQnVmZmVyID0gV2ViQ29yZTo6UGl4ZWxCdWZmZXI6OnRyeUNyZWF0
ZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFdlYkNvcmU6OlBpeGVsRm9y
bWF0OjpSR0JBOCwgc3JjUmVjdC5zaXplKCkpOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXpl
ID0gcGl4ZWxCdWZmZXItPmRhdGEoKS5ieXRlTGVuZ3RoKCk7CiAKICAgICAgICAgSVBDOjpUaW1l
b3V0IHRpbWVvdXQgPSA1X3M7Ci0gICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5ID0g
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNoYXJlZE1lbW9yeUZvckdldEltYWdlRGF0
YShkYXRhU2l6ZSwgdGltZW91dCk7CisgICAgICAgIFNoYXJlZE1lbW9yeSogc2hhcmVkTWVtb3J5
ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnNoYXJlZE1lbW9yeUZvckdldFBpeGVs
QnVmZmVyKGRhdGFTaXplLCB0aW1lb3V0KTsKICAgICAgICAgaWYgKCFzaGFyZWRNZW1vcnkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdl
QnVmZmVyUHJveHkmPigqdGhpcyk7Ci0gICAgICAgIG11dGFibGVUaGlzLm1fZHJhd2luZ0NvbnRl
eHQucmVjb3JkZXIoKS5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICAg
ICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLmdldFBpeGVsQnVmZmVy
KG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2lu
Z0NvbnRleHRBc3luYygpOwogCi0gICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS0+d2FpdEZvckdldEltYWdlRGF0YVRvQ29tcGxldGUodGltZW91dCkpCi0gICAgICAgICAg
ICBtZW1jcHkoaW1hZ2VEYXRhLT5kYXRhKCkuZGF0YSgpLCBzaGFyZWRNZW1vcnktPmRhdGEoKSwg
ZGF0YVNpemUpOworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPndh
aXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUodGltZW91dCkpCisgICAgICAgICAgICBtZW1j
cHkocGl4ZWxCdWZmZXItPmRhdGEoKS5kYXRhKCksIHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBkYXRh
U2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lbXNldChpbWFnZURhdGEtPmRhdGEo
KS5kYXRhKCksIDAsIGRhdGFTaXplKTsKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICAg
ICAgICAgIG1lbXNldChwaXhlbEJ1ZmZlci0+ZGF0YSgpLmRhdGEoKSwgMCwgZGF0YVNpemUpOwor
ICAgICAgICByZXR1cm4gcGl4ZWxCdWZmZXI7CiAgICAgfQogCi0gICAgdm9pZCBwdXRJbWFnZURh
dGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2Vi
Q29yZTo6SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpIG92ZXJyaWRlCisgICAgdm9pZCBwdXRQaXhlbEJ1ZmZl
cihXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJD
b3JlOjpQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0sIFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCA9IFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICAvLyBU
aGUgbWF0aCBpbnNpZGUgSW1hZ2VEYXRhOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGggdGhl
IG1hdGggaW5zaWRlIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKCkgYWJvdXQgaG93
IG1fcmVzb2x1dGlvblNjYWxlIGludGVyYWN0cyB3aXRoIHRoZSBkYXRhIGluIHRoZSBJbWFnZUJ1
ZmZlci4KLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHB1dEltYWdlRGF0YSgpIGlzIG9ubHkg
Y2FsbGVkIHdoZW4gcmVzb2x1dGlvblNjYWxlKCkgPT0gMS4KKyAgICAgICAgLy8gVGhlIG1hdGgg
aW5zaWRlIFBpeGVsQnVmZmVyOjpjcmVhdGUoKSBkb2Vzbid0IGFncmVlIHdpdGggdGhlIG1hdGgg
aW5zaWRlIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0UGl4ZWxCdWZmZXIoKSBhYm91dCBob3cgbV9y
ZXNvbHV0aW9uU2NhbGUgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgaW4gdGhlIEltYWdlQnVmZmVy
LgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgcHV0UGl4ZWxCdWZmZXIoKSBpcyBvbmx5IGNh
bGxlZCB3aGVuIHJlc29sdXRpb25TY2FsZSgpID09IDEuCiAgICAgICAgIEFTU0VSVChyZXNvbHV0
aW9uU2NhbGUoKSA9PSAxKTsKLSAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigpLnB1
dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRl
c3RGb3JtYXQpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LnJlY29yZGVyKCkucHV0UGl4ZWxC
dWZmZXIoaW5wdXRGb3JtYXQsIHBpeGVsQnVmZmVyLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RG
b3JtYXQpOwogICAgIH0KIAogICAgIGJvb2wgcHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgp
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAJKHJldmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDUwICsxNTAsNTAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1v
dGVSZW5kZXJpbmdCYWNrZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1TaGFyZWRNZW1vcnkq
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRh
KHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0IHRpbWVvdXQpCitTaGFyZWRNZW1vcnkqIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6c2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIo
c2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQgdGltZW91dCkKIHsKICAgICBzZW5kRGVmZXJy
ZWRXYWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkg
PSAhbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgfHwgZGF0YVNpemUgPiBtX2dldEltYWdlRGF0
YVNoYXJlZE1lbW9yeUxlbmd0aDsKLSAgICBib29sIG5lZWRzU2VtYXBob3JlID0gIW1fZ2V0SW1h
Z2VEYXRhU2VtYXBob3JlOworICAgIGJvb2wgbmVlZHNTaGFyZWRNZW1vcnkgPSAhbV9nZXRQaXhl
bEJ1ZmZlclNoYXJlZE1lbW9yeSB8fCBkYXRhU2l6ZSA+IG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRN
ZW1vcnlMZW5ndGg7CisgICAgYm9vbCBuZWVkc1NlbWFwaG9yZSA9ICFtX2dldFBpeGVsQnVmZmVy
U2VtYXBob3JlOwogCiAgICAgaWYgKG5lZWRzU2hhcmVkTWVtb3J5KQotICAgICAgICBtX2dldElt
YWdlRGF0YVNoYXJlZE1lbW9yeSA9IG51bGxwdHI7CisgICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkgPSBudWxscHRyOwogCiAgICAgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFu
ZGxlOwogICAgIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZTsKIAogICAgIGlmIChuZWVkc1NoYXJl
ZE1lbW9yeSAmJiBuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdl
dEltYWdlRGF0YShkYXRhU2l6ZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpV
cGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGE6OlJlcGx5KGhhbmRs
ZSwgc2VtYXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCwgSVBD
OjpTZW5kU3luY09wdGlvbjo6TWFpbnRhaW5PcmRlcmluZ1dpdGhBc3luY01lc3NhZ2VzKTsKKyAg
ICAgICAgc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNo
YXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKGRhdGFTaXplKSwgTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y
ZUZvckdldFBpeGVsQnVmZmVyOjpSZXBseShoYW5kbGUsIHNlbWFwaG9yZSksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2VuZFN5bmNPcHRpb246Ok1haW50YWlu
T3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CiAgICAgZWxzZSBpZiAobmVlZHNTaGFyZWRNZW1v
cnkpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpV
cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRJbWFnZURhdGEoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0SW1hZ2VEYXRhOjpS
ZXBseShoYW5kbGUpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpLCB0aW1lb3V0LCBJUEM6
OlNlbmRTeW5jT3B0aW9uOjpNYWludGFpbk9yZGVyaW5nV2l0aEFzeW5jTWVzc2FnZXMpOworICAg
ICAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hh
cmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIoZGF0YVNpemUpLCBNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6VXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5
KGhhbmRsZSksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCksIHRpbWVvdXQsIElQQzo6U2Vu
ZFN5bmNPcHRpb246Ok1haW50YWluT3JkZXJpbmdXaXRoQXN5bmNNZXNzYWdlcyk7CiAgICAgZWxz
ZSBpZiAobmVlZHNTZW1hcGhvcmUpCi0gICAgICAgIHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JHZXRJbWFnZURhdGEoKSwgTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlNlbWFwaG9yZUZvckdldEltYWdlRGF0YTo6UmVwbHkoc2Vt
YXBob3JlKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgdGltZW91dCk7CisgICAgICAg
IHNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpTZW1hcGhvcmVGb3JH
ZXRQaXhlbEJ1ZmZlcigpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6U2VtYXBo
b3JlRm9yR2V0UGl4ZWxCdWZmZXI6OlJlcGx5KHNlbWFwaG9yZSksIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCksIHRpbWVvdXQpOwogCiAgICAgaWYgKCFoYW5kbGUuaGFuZGxlLmlzTnVsbCgp
KSB7Ci0gICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5Ojpt
YXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0g
ICAgICAgIG1fZ2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5TGVuZ3RoID0gaGFuZGxlLmRhdGFTaXpl
OworICAgICAgICBtX2dldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5Ojpt
YXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Cisg
ICAgICAgIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnlMZW5ndGggPSBoYW5kbGUuZGF0YVNp
emU7CiAgICAgfQogICAgIGlmIChuZWVkc1NlbWFwaG9yZSkKLSAgICAgICAgbV9nZXRJbWFnZURh
dGFTZW1hcGhvcmUgPSBXVEZNb3ZlKHNlbWFwaG9yZSk7CisgICAgICAgIG1fZ2V0UGl4ZWxCdWZm
ZXJTZW1hcGhvcmUgPSBXVEZNb3ZlKHNlbWFwaG9yZSk7CiAKLSAgICBpZiAobV9kZXN0cm95R2V0
SW1hZ2VEYXRhU2hhcmVkTWVtb3J5VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9kZXN0cm95
R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5VGltZXIuc3RvcCgpOwotICAgIG1fZGVzdHJveUdldElt
YWdlRGF0YVNoYXJlZE1lbW9yeVRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOworICAgIGlmIChtX2Rl
c3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuc3RvcCgpOworICAgIG1f
ZGVzdHJveUdldFBpeGVsQnVmZmVyU2hhcmVkTWVtb3J5VGltZXIuc3RhcnRPbmVTaG90KDVfcyk7
CiAKLSAgICByZXR1cm4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkuZ2V0KCk7CisgICAgcmV0
dXJuIG1fZ2V0UGl4ZWxCdWZmZXJTaGFyZWRNZW1vcnkuZ2V0KCk7CiB9CiAKLWJvb2wgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yR2V0SW1hZ2VEYXRhVG9Db21wbGV0ZShJUEM6
OlRpbWVvdXQgdGltZW91dCkKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp3YWl0
Rm9yR2V0UGl4ZWxCdWZmZXJUb0NvbXBsZXRlKElQQzo6VGltZW91dCB0aW1lb3V0KQogewotICAg
IEFTU0VSVChtX2dldEltYWdlRGF0YVNlbWFwaG9yZSk7Ci0gICAgcmV0dXJuIG1fZ2V0SW1hZ2VE
YXRhU2VtYXBob3JlLT53YWl0Rm9yKHRpbWVvdXQpOworICAgIEFTU0VSVChtX2dldFBpeGVsQnVm
ZmVyU2VtYXBob3JlKTsKKyAgICByZXR1cm4gbV9nZXRQaXhlbEJ1ZmZlclNlbWFwaG9yZS0+d2Fp
dEZvcih0aW1lb3V0KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmRl
c3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbV9n
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkgPSBudWxscHRyOwotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRlc3Ryb3lHZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKSwg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1l
c3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOworICAgIG1fZ2V0UGl4ZWxCdWZmZXJT
aGFyZWRNZW1vcnkgPSBudWxscHRyOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcigpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5X
aGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiB9CiAKIFN0cmluZyBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmdldERhdGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24sIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgJKHJl
dmlzaW9uIDI3NzI1NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgY2xhc3MgRGlzcGxheUxpc3Q7CiBjbGFzcyBJdGVtOwogfQogY2xhc3MgRmxvYXRTaXpl
OwotY2xhc3MgSW1hZ2VEYXRhOworY2xhc3MgUGl4ZWxCdWZmZXI7CiBlbnVtIGNsYXNzIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90OwogZW51bSBjbGFzcyBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgOiB1aW50OF90OwogZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogYm9vbDsKQEAgLTc4
LDkgKzc4LDkgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHNlbmREZWZlcnJlZFdha2V1cE1l
c3NhZ2VJZk5lZWRlZCgpOwogCi0gICAgU2hhcmVkTWVtb3J5KiBzaGFyZWRNZW1vcnlGb3JHZXRJ
bWFnZURhdGEoc2l6ZV90IGRhdGFTaXplLCBJUEM6OlRpbWVvdXQpOwotICAgIGJvb2wgd2FpdEZv
ckdldEltYWdlRGF0YVRvQ29tcGxldGUoSVBDOjpUaW1lb3V0KTsKLSAgICB2b2lkIGRlc3Ryb3lH
ZXRJbWFnZURhdGFTaGFyZWRNZW1vcnkoKTsKKyAgICBTaGFyZWRNZW1vcnkqIHNoYXJlZE1lbW9y
eUZvckdldFBpeGVsQnVmZmVyKHNpemVfdCBkYXRhU2l6ZSwgSVBDOjpUaW1lb3V0KTsKKyAgICBi
b29sIHdhaXRGb3JHZXRQaXhlbEJ1ZmZlclRvQ29tcGxldGUoSVBDOjpUaW1lb3V0KTsKKyAgICB2
b2lkIGRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSgpOwogCiAgICAgLy8gSVBDOjpN
ZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKSBjb25zdCBvdmVycmlkZTsKQEAgLTEzNiwxMCArMTM2LDEwIEBAIHByaXZhdGU6CiAgICAg
T3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnJlbnRE
ZXN0aW5hdGlvbkltYWdlQnVmZmVySWRlbnRpZmllcjsKICAgICBPcHRpb25hbDxHUFVQcm9jZXNz
V2FrZXVwTWVzc2FnZUFyZ3VtZW50cz4gbV9kZWZlcnJlZFdha2V1cE1lc3NhZ2VBcmd1bWVudHM7
CiAgICAgdW5zaWduZWQgbV9yZW1haW5pbmdJdGVtc1RvQXBwZW5kQmVmb3JlU2VuZGluZ1dha2V1
cCB7IDAgfTsKLSAgICBPcHRpb25hbDxJUEM6OlNlbWFwaG9yZT4gbV9nZXRJbWFnZURhdGFTZW1h
cGhvcmU7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1v
cnk7Ci0gICAgdWludDY0X3QgbV9nZXRJbWFnZURhdGFTaGFyZWRNZW1vcnlMZW5ndGggeyAwIH07
Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9kZXN0cm95R2V0SW1hZ2VEYXRhU2hhcmVkTWVtb3J5VGlt
ZXIgeyAqdGhpcywgJlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6ZGVzdHJveUdldEltYWdl
RGF0YVNoYXJlZE1lbW9yeSB9OworICAgIE9wdGlvbmFsPElQQzo6U2VtYXBob3JlPiBtX2dldFBp
eGVsQnVmZmVyU2VtYXBob3JlOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fZ2V0UGl4ZWxC
dWZmZXJTaGFyZWRNZW1vcnk7CisgICAgdWludDY0X3QgbV9nZXRQaXhlbEJ1ZmZlclNoYXJlZE1l
bW9yeUxlbmd0aCB7IDAgfTsKKyAgICBXZWJDb3JlOjpUaW1lciBtX2Rlc3Ryb3lHZXRQaXhlbEJ1
ZmZlclNoYXJlZE1lbW9yeVRpbWVyIHsgKnRoaXMsICZSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmRlc3Ryb3lHZXRQaXhlbEJ1ZmZlclNoYXJlZE1lbW9yeSB9OwogICAgIFdlYWtQdHI8R1BV
UHJvY2Vzc0Nvbm5lY3Rpb24+IG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb247CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzcyNTUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMyArMTIwLDEzIEBAIFZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3UKICAgICByZXR1cm4geyB9OwogfQogCi1SZWZQdHI8
SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3QKK09wdGlv
bmFsPFBpeGVsQnVmZmVyPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6Omdl
dFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25z
dAogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UG9pbnQmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKQordm9pZCBJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OnB1dFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IFBpeGVsQnVmZmVyJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFBvaW50JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCShyZXZpc2lvbiAyNzcyNTUpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw4
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpIG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPFdlYkNvcmU6OlBpeGVsQnVmZmVyPiBnZXRQaXhlbEJ1ZmZlcihXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0UGl4ZWxCdWZmZXIoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6UGl4ZWxCdWZm
ZXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRVcHBl
ckxlZnRDb3JuZXIgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBjYW5NYXBCYWNr
aW5nU3RvcmUgPSBmYWxzZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>