<?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>151436</bug_id>
          
          <creation_ts>2015-11-18 23:25:33 -0800</creation_ts>
          <short_desc>[GTK] Implement initial support of asynchronous scrolling.</short_desc>
          <delta_ts>2018-04-25 03:11:53 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>184961</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154066</dependson>
          <blocked>153857</blocked>
    
    <blocked>153858</blocked>
    
    <blocked>154279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="ChangSeok Oh">changseok</reporter>
          <assigned_to name="ChangSeok Oh">changseok</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>emanuele.aina</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>yoon</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1143203</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2015-11-18 23:25:33 -0800</bug_when>
    <thetext>Mac and iOS port have a feature scrolling asynchronously. It would be good if gtk port does.
Before doing that, we need to investigate if it is really feasible for gtk port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149500</commentid>
    <comment_count>1</comment_count>
      <attachid>267430</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2015-12-15 20:58:46 -0800</bug_when>
    <thetext>Created attachment 267430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149507</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-15 21:01:09 -0800</bug_when>
    <thetext>Attachment 267430 did not pass style-queue:


ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:64:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/gtk/ScrollingThreadGtk.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 47 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151704</commentid>
    <comment_count>3</comment_count>
      <attachid>267430</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-12-31 08:16:31 -0800</bug_when>
    <thetext>Comment on attachment 267430
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        This change brings the asyncronous scrolling feature to the gtk port. Basic idea is to handle 

asyncronous -&gt; asynchronous

&gt; Source/cmake/OptionsGTK.cmake:141
&gt; +WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ASYNC_SCROLLING PRIVATE OFF)

I would set the default to ON, then do:

WEBKIT_OPTION_DEPEND(ENABLE_ASYNC_SCROLLING ENABLE_THREADED_COMPOSITOR)

Otherwise we might accidentally wind up enabling threaded compositor by default, but forgetting about async scrolling. And it&apos;s good to use WEBKIT_OPTION_DEPEND anyway when there is a dependency between options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161920</commentid>
    <comment_count>4</comment_count>
      <attachid>270638</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-04 00:51:05 -0800</bug_when>
    <thetext>Created attachment 270638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161921</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 00:52:57 -0800</bug_when>
    <thetext>Attachment 270638 did not pass style-queue:


ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:64:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/gtk/ScrollingThreadGtk.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 49 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161923</commentid>
    <comment_count>6</comment_count>
      <attachid>267430</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-04 01:08:03 -0800</bug_when>
    <thetext>Comment on attachment 267430
Patch

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

Thanks for having a look at this, Michael!

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        This change brings the asyncronous scrolling feature to the gtk port. Basic idea is to handle 
&gt; 
&gt; asyncronous -&gt; asynchronous

Oops. Thanks.

&gt;&gt; Source/cmake/OptionsGTK.cmake:141
&gt;&gt; +WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ASYNC_SCROLLING PRIVATE OFF)
&gt; 
&gt; I would set the default to ON, then do:
&gt; 
&gt; WEBKIT_OPTION_DEPEND(ENABLE_ASYNC_SCROLLING ENABLE_THREADED_COMPOSITOR)
&gt; 
&gt; Otherwise we might accidentally wind up enabling threaded compositor by default, but forgetting about async scrolling. And it&apos;s good to use WEBKIT_OPTION_DEPEND anyway when there is a dependency between options.

Using WEBKIT_OPTION_DEPEND is a good idea. My concern was that this patch did not fully support asyc scrolling yet so it might break current scrolling. But o.k let&apos;s do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161925</commentid>
    <comment_count>7</comment_count>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-04 01:08:32 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=267430&amp;action=review

Thanks for having a look at this, Michael!

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        This change brings the asyncronous scrolling feature to the gtk port. Basic idea is to handle 
&gt; 
&gt; asyncronous -&gt; asynchronous

Oops. Thanks.

&gt;&gt; Source/cmake/OptionsGTK.cmake:141
&gt;&gt; +WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ASYNC_SCROLLING PRIVATE OFF)
&gt; 
&gt; I would set the default to ON, then do:
&gt; 
&gt; WEBKIT_OPTION_DEPEND(ENABLE_ASYNC_SCROLLING ENABLE_THREADED_COMPOSITOR)
&gt; 
&gt; Otherwise we might accidentally wind up enabling threaded compositor by default, but forgetting about async scrolling. And it&apos;s good to use WEBKIT_OPTION_DEPEND anyway when there is a dependency between options.

Using WEBKIT_OPTION_DEPEND is a good idea. My concern was that this patch did not fully support asyc scrolling yet so it might break current scrolling. But o.k let&apos;s do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161928</commentid>
    <comment_count>8</comment_count>
      <attachid>270641</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-04 01:22:41 -0800</bug_when>
    <thetext>Created attachment 270641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161931</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-04 01:24:48 -0800</bug_when>
    <thetext>Attachment 270641 did not pass style-queue:


ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:64:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/gtk/ScrollingThreadGtk.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 49 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162341</commentid>
    <comment_count>10</comment_count>
      <attachid>270641</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2016-02-04 23:35:00 -0800</bug_when>
    <thetext>Comment on attachment 270641
Patch

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

It is not easy to find a nice way to get position of layers without multi-threads problems.
What about caching positions of layers at the start of scrolling?
Maybe we can dump the positions of all layers in the compositing thread at the beginning of the scrolling,
instead of asking the position layer by layer.
And ScrollingNode.*Gtk can ask their layers position from the cached values.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:350
&gt; +    return (id != InvalidCoordinatedLayerID) ? layerByID(id) : nullptr;

Nice!

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:364
&gt; +

But This change is not needed. )

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:379
&gt; +    }

I think this change came from your debugging code, isn&apos;t it?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1913
&gt; +#if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(IOS)

I think it is dangerous because PLATFORM(IOS) != PLATFORM(COCOA).
Are you sure there are no side effects to the non-IOS platform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163694</commentid>
    <comment_count>11</comment_count>
      <attachid>270641</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-10 22:17:35 -0800</bug_when>
    <thetext>Comment on attachment 270641
Patch

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

&gt;&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:364
&gt;&gt; +
&gt; 
&gt; But This change is not needed. )

Removed.

&gt;&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:379
&gt;&gt; +    }
&gt; 
&gt; I think this change came from your debugging code, isn&apos;t it?

Nice catch!

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1913
&gt;&gt; +#if ENABLE(ASYNC_SCROLLING) &amp;&amp; PLATFORM(IOS)
&gt; 
&gt; I think it is dangerous because PLATFORM(IOS) != PLATFORM(COCOA).
&gt; Are you sure there are no side effects to the non-IOS platform?

Yes, I am. Because below touchPoint.location() is defined only for iOS in WebEvent.h. Other platforms do not have location().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163696</commentid>
    <comment_count>12</comment_count>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-10 22:19:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 270641 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270641&amp;action=review
&gt; 
&gt; It is not easy to find a nice way to get position of layers without
&gt; multi-threads problems.
&gt; What about caching positions of layers at the start of scrolling?
&gt; Maybe we can dump the positions of all layers in the compositing thread at
&gt; the beginning of the scrolling,
&gt; instead of asking the position layer by layer.
&gt; And ScrollingNode.*Gtk can ask their layers position from the cached values.
I think the caching way is worth to try. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163711</commentid>
    <comment_count>13</comment_count>
      <attachid>271050</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-11 00:45:40 -0800</bug_when>
    <thetext>Created attachment 271050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163712</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-11 00:46:45 -0800</bug_when>
    <thetext>Attachment 271050 did not pass style-queue:


ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:64:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/gtk/ScrollingThreadGtk.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 49 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165111</commentid>
    <comment_count>15</comment_count>
      <attachid>271050</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-02-16 04:18:57 -0800</bug_when>
    <thetext>Comment on attachment 271050
Patch

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

&gt; Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp:124
&gt;      RunLoop::main().dispatch([scrollingCoordinator, nodeID, horizontal, vertical] {
&gt; +#if PLATFORM(MAC)
&gt;          scrollingCoordinator-&gt;setActiveScrollSnapIndices(nodeID, horizontal, vertical);
&gt; +#endif
&gt;      });

Is it required to dispatch an empty task on the main thread?

&gt; Source/WebCore/platform/gtk/ScrollController.cpp:52
&gt; +    if (fabsf(deltaY) &gt;= fabsf(deltaX))

std::abs() should work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165112</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-02-16 04:20:27 -0800</bug_when>
    <thetext>Is there any dependence on the GTK+ toolkit itself? Or just the threaded compositor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165492</commentid>
    <comment_count>17</comment_count>
      <attachid>271530</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-16 21:12:21 -0800</bug_when>
    <thetext>Created attachment 271530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165497</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-16 21:14:58 -0800</bug_when>
    <thetext>Attachment 271530 did not pass style-queue:


ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:64:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:90:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/gtk/ScrollingThreadGtk.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165500</commentid>
    <comment_count>19</comment_count>
      <attachid>271050</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2016-02-16 21:22:12 -0800</bug_when>
    <thetext>Comment on attachment 271050
Patch

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

&gt; Is there any dependence on the GTK+ toolkit itself? Or just the threaded compositor?
Just the threaded compositor. No other dependencies reqruied.

&gt;&gt; Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp:124
&gt;&gt;      });
&gt; 
&gt; Is it required to dispatch an empty task on the main thread?

No. it isn&apos;t. I thought gtk port might have something to do here but it seems not. currentSnapPointIndicesDidChange is related with RUBBER_BAND which gtk port does not support for now. Let me block the whole implementation of this method with PLATFORM(MAC).

&gt;&gt; Source/WebCore/platform/gtk/ScrollController.cpp:52
&gt;&gt; +    if (fabsf(deltaY) &gt;= fabsf(deltaX))
&gt; 
&gt; std::abs() should work fine.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303165</commentid>
    <comment_count>20</comment_count>
      <attachid>271530</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-30 17:44:16 -0700</bug_when>
    <thetext>Comment on attachment 271530
Patch

Shame this never got reviewed. It was clearly a lot of work.

Are you still interested in updating this patch and submitting it for review again?

Is anyone more familiar with this code than me willing to review it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1417483</commentid>
    <comment_count>21</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-04-25 03:11:53 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 184961 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267430</attachid>
            <date>2015-12-15 20:58:46 -0800</date>
            <delta_ts>2016-02-04 00:50:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151436-20151216135807.patch</filename>
            <type>text/plain</type>
            <size>107189</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWMyMDdjNDEzOGY0ZTA1
NDg1YTdiNWFlMWJhMGFlN2ZkNDIwMDcxZC4uYTljMDZhZGZiNjFiNTcxNjk0YjQ5MzIzMDdlZWIy
YTQ3MmQzNzg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNS0xMi0xNSAgQ2hh
bmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9oQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10g
SW1wbGVtZW50IEFTWU5DX1NDUk9MTElORworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYnJpbmdzIHRoZSBhc3luY3Jvbm91cyBzY3Jv
bGxpbmcgZmVhdHVyZSB0byB0aGUgZ3RrIHBvcnQuIEJhc2ljIGlkZWEgaXMgdG8gaGFuZGxlIAor
ICAgICAgICBzY3JvbGwgZXZlbnRzIGluIGEgc2VwYXJhdGUgdGhyZWFkIGNhbGxlZCAnc2Nyb2xs
aW5nIHRocmVhZCcsIG5vdCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIFRoZSBzY3JvbGwgZXZl
bnRzIGFyZSBwcm9jZXNzZWQgYW5kIG5ldyBwb3NpdGlvbiBvZiByZWxldmFudCBsYXllcnMgaXMg
Y2FsY3VsYXRlZCBhbmQgdGhlbiBtb3ZlCisgICAgICAgIHBsYXRmb3JtTGF5ZXJzIGFjY29yZGlu
ZyB0byB0aGUgcG9zdGlvbnMgaW4gdGhlIHNjcm9sbGluZyB0aHJlYWQuIFZpc2libGUgcmVjdCBp
cyB1cGRhdGVkCisgICAgICAgIGFmdGVyIHRoYXQgaW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gc3lu
Y2hyb25pemluZyB0aGUgY2FsY3VsYXRlZCBwb3NpdGlvbiB3aXRoIEdyYXBoaWNzTGF5ZXIncyBw
b3NpdGlvbi4gCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBmaXhl
ZCBhbmQgc3RpY2t5IGVsZW1lbnQgeWV0LiBUaGV5IHdpbGwgYmUgY292ZXJlZCBieSBmb2xsb3dp
bmcKKyAgICAgICAgcGF0Y2hlcy4gQWxzbywgdGhlIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYmFz
ZWQgb24gdGhlIHRocmVhZGVkIGNvbXBvc2l0b3IuIE90aGVyIGNhc2VzIHdpbGwgYmUgaGFuZGxl
ZCBsYXRlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IAorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSk6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZU5vZGU6OlNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmg6CisgICAgICAgIChzV2ViQ29yZTo6U2Nyb2xsaW5nU3Rh
dGVOb2RlOjpjb21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlTm9kZTo6c2V0Q29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RocmVhZDo6flNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25zRnJvbVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6
OnNob3VsZEhhbmRsZVdoZWVsRXZlbnRTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWU6OnNldE9yQ2xlYXJMYXRjaGVkTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlOjp3aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKToKKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0Rp
ZENoYW5nZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
ckd0azo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGspOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JHdGs6On5TY3JvbGxpbmdDb29yZGluYXRvckd0ayk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckd0azo6cGFnZURlc3Ryb3llZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckd0azo6Y29tbWl0VHJlZVN0YXRlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmhhbmRsZVdo
ZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OnNj
aGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrOjpjb21taXRUcmVlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JHdGs6OnVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuaDogQWRkZWQuCisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFycyk6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RocmVhZEd0ay5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdSdW5Mb29wOjpTY3JvbGxpbmdSdW5Mb29wKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1J1bkxvb3A6OmNhbGxPblNjcm9sbGluZ1J1bkxvb3Ap
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nUnVuTG9vcDo6cnVuTG9vcCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6On5TY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVGhyZWFkOjppbml0aWFsaXplUnVuTG9vcCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUaHJlYWQ6OnRlcm1pbmF0ZVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6flNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRl
QmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZTo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSk6CisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaDogQWRkZWQuCisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVH
dGs6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlR3RrOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6On5TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OmxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0TGF5ZXJQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1
cGRhdGVCZWZvcmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVBZnRlckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OmhhbmRsZVdoZWVsRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6
aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2Nyb2xsQnkpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2Nyb2xsUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0
azo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VD
b25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlR3RrOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZUxheWVyc0FmdGVyVmlld3Bv
cnRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUd0azo6bWluaW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6Om1heGltdW1TY3JvbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRh
dGVNYWluRnJhbWVQaW5TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrOjpsb2dFeHBvc2VkVW5maWxsZWRBcmVhKToKKyAgICAgICAgKFdl
YkNvcmU6OmxvZ1RocmVhZGVkU2Nyb2xsaW5nTW9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaDogQWRkZWQuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFNjcm9sbGluZ1RyZWVHdGs6OmNyZWF0ZSk6CisgICAgICAgIChTY3JvbGxpbmdUcmVl
R3RrOjpTY3JvbGxpbmdUcmVlR3RrKToKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVHdGs6OmNyZWF0
ZVNjcm9sbGluZ1RyZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nVHJlZUd0ay5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTdGlja3lOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGU6OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0ZUJlZm9yZUNoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp1cGRhdGVM
YXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsv
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVP
blNlY29uZGFyeVRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
Ojpwb3NpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6bGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jUG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29vcmRpbmF0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9TY3JvbGxDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9TY3JvbGxDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Q29udHJvbGxlckNsaWVudDo6flNjcm9sbENvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQ29udHJvbGxlckNsaWVudDo6ZGVmZXJUZXN0c0ZvclJlYXNvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjpyZW1vdmVUZXN0RGVmZXJyYWxG
b3JSZWFzb24pOgorCiAyMDE1LTEyLTE0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXNvdXJjZVVzYWdlT3ZlcmxheSBzaG91bGQgc2hvdyBHQyB0aW1lcnMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggY2VhMmZhMDZkNDY2MTI0NTg3MWM0YzRjY2M1MzY2NzllMjFhMzZhYi4u
YTUzOWFjZTZhZjZmM2Y1NmM4MjA2MDUxOWVlYThlMDQyYjBjZDRmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQyIEBACisyMDE1LTEyLTE1ICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29s
bGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgQVNZTkNfU0NST0xMSU5HCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE0MzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IG9mIGNo
YW5nZXMgaW4gV2ViS2l0MiBsYXllciBpcyByZWxhdGVkIHdpdGggYWRkaW5nIGFuIGludGVyZmFj
ZSB0byAgcmVhY2ggVGV4dHVyZU1hcHBlckxheWVyCisgICAgICAgIGZyb20gQ29tcG9zaXRpbmdD
b29yZGluYXRvci4gV2l0aCB0aGlzIGludGVyZmFjZSwgd2UgY2FuIGdldC9zZXQgcG9zdGlvbiBm
cm9tL3RvIFRleHR1cmVNYXBwZXJMYXllci4KKyAgICAgICAgT2YgY291cnNlLCB0aGlzIG9wZXJh
dGlvbnMgaGFwcGVuIGluIHNjcm9sbGluZyB0aHJlYWQsIG5vdCBjb21wb3N0aW5nIHRocmVhZCBz
byB0aGF0IG11dGV4CisgICAgICAgIG1lY2hhbmlzbSBpcyByZXF1aXJlZC4KKworICAgICAgICAq
IFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlE
SWZFeGlzdHMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNy
ZWF0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpk
ZWxldGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6bGF5ZXJQb3NpdGlvbik6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29tcG9zaXRvcjo6c2V0TGF5ZXJQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29tcG9zaXRvcjo6bGF5ZXJQb3NpdGlvbik6CisgICAg
ICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVh
ZGVkQ29tcG9zaXRvci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGRTdGFydFRyYWNraW5nVG91Y2hFdmVudHMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNo
cm9tZUNsaWVudDo6Y3JlYXRlU2Nyb2xsaW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJQb3NpdGlvbik6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6c3VwcG9ydHNBc3luY1Njcm9s
bGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCk6CisKIDIwMTUt
MTItMTQgIFlvbmdHZW9sIEp1bmcgIDx5ZzQ4Lmp1bmdAc2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0Nvb3JkaW5hdGVkIEdyYXBoaWNzXSBDU1MgdHJhbnNpdGlvbiBlZmZlY3QgaXMgbm90IHNob3du
IHdoZW4gdHJhbnNmb3JtZWQgd2l0aCAiJSIgdW5pdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
YTk5MDVhNjE1NjIxMTgzMDM4MTFhYTQzZGIzZGU1ODI5ZmE5ZjMyNi4uZjhjYjM1YjExODk1NDkz
NDMyMmIzYWIwNDY0Y2Y2MThhMGZkY2I5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIwNzMs
NiArMjA3Myw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHAKICAgICBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5j
cHAKIAorICAgIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCiAg
ICAgcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAogICAgIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbExhdGNoaW5nU3RhdGUuY3BwCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29uc3RyYWludHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGJjN2IxZGFm
MjNhZWRjNTVkZGE2YmQ1Y2I2NzczZDA2MTFiODE0M2QuLmIwNWZhYTVlMGJjYjgyYzY1MzQxZjAy
ZWJkMTg2Y2Q4ZjlhYmM0M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNSw2ICsy
NSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dF
QkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L2F0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vZWRpdGlu
Zy9hdGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZ3RrIgorICAgICIke1dFQkNPUkVfRElS
fS9wYWdlL3Njcm9sbGluZy9ndGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2NhaXJv
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9nZW9jbHVlIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ndGsiCkBAIC0yMzEsNiArMjMyLDE0IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3Bw
CiAgICAgcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAogCisgICAgcGFnZS9zY3JvbGxpbmcv
Z3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKKyAgICBwYWdlL3Njcm9sbGlu
Zy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3Jv
bGxpbmdUcmVlRml4ZWROb2RlLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3Jv
bGxpbmdUcmVlR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZS5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlw
ZS5jcHAKQEAgLTI1NSw2ICsyNjQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtf
U09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9QbGF0
Zm9ybVdoZWVsRXZlbnRHdGsuY3BwCisgICAgcGxhdGZvcm0vZ3RrL1Njcm9sbENvbnRyb2xsZXIu
Y3BwCiAgICAgcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcAogICAgIHBsYXRmb3Jt
L2d0ay9Tb3VuZEd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcAppbmRleCA5MDljYzk2N2Y1NTgxYjhiOTE2MWMxMTU3YjY5MjhjMzJjYjVj
Y2VhLi5lOTAzZGQ1Njg5ZGExNzk5NDg3N2RjYWU0OWNhMmMzYzBkNTg4ZGVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmNwcApAQCAtNDQsNiArNDQsMTAgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0
ZVRyZWUuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKIAorI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSkKQEAgLTcxLDEwICs3
NSwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNl
dHNBc0Zsb2F0KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaQogICAgICAgICBmb3IgKGF1dG8mIG9mZnNl
dCA6ICpzbmFwT2Zmc2V0cykKICAgICAgICAgICAgIHNuYXBPZmZzZXRzQXNGbG9hdC51bmNoZWNr
ZWRBcHBlbmQocm91bmRUb0RldmljZVBpeGVsKG9mZnNldCwgZGV2aWNlU2NhbGVGYWN0b3IsIGZh
bHNlKSk7CiAgICAgfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBpZiAoYXhp
cyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpCiAgICAgICAgIG5vZGUuc2V0SG9yaXpv
bnRhbFNuYXBPZmZzZXRzKHNuYXBPZmZzZXRzQXNGbG9hdCk7CiAgICAgZWxzZQogICAgICAgICBu
b2RlLnNldFZlcnRpY2FsU25hcE9mZnNldHMoc25hcE9mZnNldHNBc0Zsb2F0KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGF4aXMpOworICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyNlbmRpZgog
fQogCiB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uRGlydHkoKQpAQCAtNDUyLDYgKzQ2Miw5IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcjo6dXBkYXRlRnJhbWVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQs
CiAgICAgbm9kZS0+c2V0SW5zZXRDbGlwTGF5ZXIoaW5zZXRDbGlwTGF5ZXIpOwogICAgIG5vZGUt
PnNldFNjcm9sbGVkQ29udGVudHNMYXllcihzY3JvbGxlZENvbnRlbnRzTGF5ZXIpOwogICAgIG5v
ZGUtPnNldENvdW50ZXJTY3JvbGxpbmdMYXllcihjb3VudGVyU2Nyb2xsaW5nTGF5ZXIpOworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBub2RlLT5zZXRDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yKGRvd25jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4obGF5ZXIpLT5jb29yZGlu
YXRvcigpKTsKKyNlbmRpZgogCiAgICAgaWYgKHNjcm9sbGluZ0dlb21ldHJ5KSB7CiAgICAgICAg
IG5vZGUtPnNldFNjcm9sbE9yaWdpbihzY3JvbGxpbmdHZW9tZXRyeS0+c2Nyb2xsT3JpZ2luKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcAppbmRleCBiYzkzYmVjZjFmMzUxMzc1ZGU4MTUxNDQxNGQ0YTczOTRmNWQ4OWQz
Li5jYjZlMWMwOWQ1ZjU0MDY2MzE3YmIxZTkwMTk1NzBiMDMxM2NmOGJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
CkBAIC00NCw3ICs0NCw5IEBACiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3JHdGsuaCIKKyNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJT
Y3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKICNlbmRpZgogCkBAIC01
OCw3ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiAhUExBVEZPUk0oQ09DT0EpCiBS
ZWY8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFn
ZSogcGFnZSkKIHsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgUExBVEZPUk0o
R1RLKSAmJiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1NfVEhSRUFERUQpCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JHdGsocGFnZSkpOworI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcyhw
YWdlKSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCmluZGV4
IDg1MDM5MzZhMWE1MWE1NTcyNWU1ZGMyMzNiMWY3Y2VlNjY0ZjM0N2QuLjA1ZDA1Nzk3YTFmYTFl
ZWI5ZmVmMDZjMTRmMjVkYjUzNDRkYzgyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZS5jcHAKQEAgLTQ4LDYgKzQ4LDkgQEAgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlKGNvbnN0IFNjcm9sbGkKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlcihzdGF0ZU5vZGUu
dmVydGljYWxTY3JvbGxiYXJQYWludGVyKCkpCiAgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJQ
YWludGVyKHN0YXRlTm9kZS5ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcigpKQorI2VsaWYgUExB
VEZPUk0oR1RLKQorICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhcihzdGF0ZU5vZGUudmVydGljYWxT
Y3JvbGxiYXIoKSkKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhcihzdGF0ZU5vZGUuaG9yaXpv
bnRhbFNjcm9sbGJhcigpKQogI2VuZGlmCiAgICAgLCBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
KHN0YXRlTm9kZS5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpKQogICAgICwgbV9yZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSkKQEAgLTIx
NSw3ICsyMTgsNyBAQCB2b2lkIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpzZXRG
aXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKGJvbwogICAgIHNldFByb3BlcnR5Q2hh
bmdlZChGaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKTsKIH0KIAotI2lmICFQTEFU
Rk9STShNQUMpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykKIHZvaWQgU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNj
cm9sbGJhcnMoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyKikKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZS5oCmluZGV4IGQ1N2QxZmQ5ZjcwYTg2YzkyYTkwYWUzMWM3NWE3OTUyZmNkNjlj
YWEuLjNhMmFjMzkxZjNmNjIyNmJkNDY3MGJkZDQ5ZDkwMzdjNWQ0MjY4NDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVGcmFtZVNjcm9sbGluZ05vZGUuaApAQCAtMTE2LDYgKzExNiw5IEBAIHB1YmxpYzoKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgU2Nyb2xsYmFyUGFpbnRlciB2ZXJ0aWNhbFNjcm9sbGJhclBhaW50
ZXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlci5nZXQoKTsgfQog
ICAgIFNjcm9sbGJhclBhaW50ZXIgaG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIoKSBjb25zdCB7
IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyLmdldCgpOyB9CisjZWxpZiBQTEFU
Rk9STShHVEspCisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmVydGljYWxTY3JvbGxiYXI7IH0KKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXI7IH0KICNlbmRpZgog
ICAgIHZvaWQgc2V0U2Nyb2xsYmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFycyhTY3JvbGxiYXIqIHZl
cnRpY2FsU2Nyb2xsYmFyLCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIpOwogCkBAIC0x
MzUsNiArMTM4LDkgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0YWluUHRy
PFNjcm9sbGJhclBhaW50ZXI+IG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyOwogICAgIFJldGFp
blB0cjxTY3JvbGxiYXJQYWludGVyPiBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyOworI2Vs
aWYgUExBVEZPUk0oR1RLKQorICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAg
ICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKICNlbmRpZgogCiAgICAgUmVnaW9u
IG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAppbmRleCBkM2U0Zjc2ZmMwNWI4Yzcw
YWE2MDE1YzViOGQ1MjRkOTI1YzE0MjE1Li4zYWM4NTVlYmU1MTkxYjg2MjA1Nzc3ZDQxZjg1NWFm
YTcwZDcxM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlTm9kZS5jcHAKQEAgLTQyLDYgKzQyLDkgQEAgU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpTY3JvbGxpbmdTdGF0ZU5vZGUoU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9sbGlu
Z1N0YXQKICAgICAsIG1fY2hhbmdlZFByb3BlcnRpZXMoMCkKICAgICAsIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlKHNjcm9sbGluZ1N0YXRlVHJlZSkKICAgICAsIG1fcGFyZW50KG51bGxwdHIpCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgICwgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9y
KG51bGxwdHIpCisjZW5kaWYKIHsKIH0KIApAQCAtNTMsNiArNTYsOSBAQCBTY3JvbGxpbmdTdGF0
ZU5vZGU6OlNjcm9sbGluZ1N0YXRlTm9kZShjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRl
Tm9kZSwgU2NybwogICAgICwgbV9jaGFuZ2VkUHJvcGVydGllcyhzdGF0ZU5vZGUuY2hhbmdlZFBy
b3BlcnRpZXMoKSkKICAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlKGFkb3B0aXZlVHJlZSkKICAg
ICAsIG1fcGFyZW50KG51bGxwdHIpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAg
ICwgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yKHN0YXRlTm9kZS5jb21wb3NpdGluZ0Nvb3JkaW5h
dG9yKCkpCisjZW5kaWYKIHsKICAgICBpZiAoaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbExheWVy
KSkKICAgICAgICAgc2V0TGF5ZXIoc3RhdGVOb2RlLmxheWVyKCkudG9SZXByZXNlbnRhdGlvbihh
ZG9wdGl2ZVRyZWUucHJlZmVycmVkTGF5ZXJSZXByZXNlbnRhdGlvbigpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCmluZGV4IGFj
YjYwMWM5ZTg4NmQ2ZmZjMmMwNjgxYTBkMTFiYjI5NmRlNTJmMmEuLjhlYmUzNTIyYmQwZjQ3YTli
M2YzZTBlMDljZGJhZDI5YTNmMDBiMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCkBAIC00MCw2ICs0MCwxMCBAQCBjbGFzcyBH
cmFwaGljc0xheWVyOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogY2xhc3MgVGV4dFN0cmVh
bTsKIAorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK2NsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudDsKKyNlbmRpZgorCiAvLyBVc2VkIHRvIGFsbG93IFNjcm9sbGluZ1N0
YXRlTm9kZXMgdG8gcmVmZXIgdG8gbGF5ZXJzIGluIHZhcmlvdXMgY29udGV4dHM6CiAvLyBhKSBB
c3luYyBzY3JvbGxpbmcsIG1haW4gdGhyZWFkOiBTY3JvbGxpbmdTdGF0ZU5vZGUgaG9sZHMgb250
byBhIEdyYXBoaWNzTGF5ZXIsIGFuZCB1c2VzIG1fbGF5ZXJJRAogLy8gICAgdG8gZGV0ZWN0IHdo
ZXRoZXIgdGhhdCBHcmFwaGljc0xheWVyJ3MgdW5kZXJseWluZyBQbGF0Zm9ybUxheWVyIGNoYW5n
ZWQuCkBAIC0yMzQsNiArMjM4LDExIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBzY3JvbGxpbmdT
dGF0ZVRyZWVBc1RleHQoKSBjb25zdDsKIAorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNvbXBvc2l0aW5nQ29vcmRpbmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3I7IH0KKyAgICB2b2lk
IHNldENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
KiBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yKSB7IG1fY29tcG9zaXRpbmdDb29yZGluYXRvciA9IGNv
bXBvc2l0aW5nQ29vcmRpbmF0b3I7IH0KKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xs
aW5nU3RhdGVOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYsIFNjcm9sbGluZ1N0YXRlVHJl
ZSYpOwogCkBAIC0yNTIsNiArMjYxLDEwIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxSZWZQdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPj4+IG1fY2hpbGRyZW47CiAKICAgICBM
YXllclJlcHJlc2VudGF0aW9uIG1fbGF5ZXI7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBtX2NvbXBvc2l0aW5nQ29v
cmRpbmF0b3I7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IDcy
ODg3OWY3ZjkwZTJkMTcxYzEyNTczZjJjMTQ3ZWRlMmRiZjlhYTcuLjFjNDAzMTVmZWRlNmFmODJl
ZWRiZTg2ZTRkN2FiOTFkNDY3NmY3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtMzQsMTUgKzM0LDE0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorI2lmICFQTEFURk9STShHVEspCiBTY3JvbGxpbmdUaHJlYWQ6OlNj
cm9sbGluZ1RocmVhZCgpCiAgICAgOiBtX3RocmVhZElkZW50aWZpZXIoMCkKIHsKIH0KIAotYm9v
bCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCitTY3JvbGxpbmdUaHJlYWQ6On5T
Y3JvbGxpbmdUaHJlYWQoKQogewotICAgIGF1dG8gdGhyZWFkSWRlbnRpZmllciA9IFNjcm9sbGlu
Z1RocmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlmaWVyOwotICAgIHJldHVybiB0aHJl
YWRJZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWRJZGVudGlmaWVyOwogfQog
CiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBm
dW5jdGlvbikKQEAgLTU4LDYgKzU3LDI4IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRj
aChzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQogICAgIHNjcm9sbGluZ1RocmVhZC53
YWtlVXBSdW5Mb29wKCk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0
aW9uc0Zyb21TY3JvbGxpbmdUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQo
KSk7CisKKyAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gZnVuY3Rpb25zOworCisg
ICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2Z1bmN0aW9uc011dGV4
KTsKKyAgICAgICAgZnVuY3Rpb25zID0gV1RGOjptb3ZlKG1fZnVuY3Rpb25zKTsKKyAgICB9CisK
KyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQorICAgICAgICBmdW5jdGlvbigp
OworfQorI2VuZGlmCisKK2Jvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQor
eworICAgIGF1dG8gdGhyZWFkSWRlbnRpZmllciA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9u
KCkubV90aHJlYWRJZGVudGlmaWVyOworICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1
cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWRJZGVudGlmaWVyOworfQorCiB2b2lkIFNjcm9sbGluZ1Ro
cmVhZDo6ZGlzcGF0Y2hCYXJyaWVyKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiB7
CiAgICAgZGlzcGF0Y2goW2Z1bmN0aW9uXSgpIG11dGFibGUgewpAQCAtODUsNiArMTA2LDggQEAg
dm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKICAgICAgICAgCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25W
YXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFkUnVuTG9vcDsgfSk7Cisj
ZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25W
YXJpYWJsZS53YWl0KGxvY2spOwogI2VuZGlmCiAgICAgfQogfQpAQCAtMTAwLDIxICsxMjMsNiBA
QCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQm9keSgpCiAgICAgaW5pdGlhbGl6ZVJ1bkxv
b3AoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25zRnJvbVNj
cm9sbGluZ1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgpKTsKLQotICAg
IFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBmdW5jdGlvbnM7Ci0gICAgCi0gICAgewot
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2Z1bmN0aW9uc011dGV4KTsKLSAg
ICAgICAgZnVuY3Rpb25zID0gV1RGOjptb3ZlKG1fZnVuY3Rpb25zKTsKLSAgICB9Ci0KLSAgICBm
b3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQotICAgICAgICBmdW5jdGlvbigpOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQu
aAppbmRleCBhNzA5Y2NkOGU3ODYzNjI5ZGU4YTI4M2M0NjNjYTljNzcwNTFjNzE1Li5iOGZmMjk3
YTZlYTU4MzYyOWMzZjhlMTdhZTk5OTFiMmYyZGJlNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaApAQCAtNDIsMTAgKzQyLDE1IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFBMQVRGT1JNKEdUSykKK2NsYXNzIFNjcm9sbGlu
Z1J1bkxvb3A7CisjZW5kaWYKKwogY2xhc3MgU2Nyb2xsaW5nVGhyZWFkIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTY3JvbGxpbmdUaHJlYWQpOwotCiBwdWJsaWM6CisgICAgdmlydHVhbCB+
U2Nyb2xsaW5nVGhyZWFkKCk7CisKICAgICBzdGF0aWMgYm9vbCBpc0N1cnJlbnRUaHJlYWQoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBkaXNwYXRjaChzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+KTsKIApAQCAtNjMsMjggKzY4LDMzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVU
aHJlYWRJZk5lZWRlZCgpOwogICAgIHN0YXRpYyB2b2lkIHRocmVhZENhbGxiYWNrKHZvaWQqIHNj
cm9sbGluZ1RocmVhZCk7CiAgICAgdm9pZCB0aHJlYWRCb2R5KCk7Ci0gICAgdm9pZCBkaXNwYXRj
aEZ1bmN0aW9uc0Zyb21TY3JvbGxpbmdUaHJlYWQoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVJ1
bkxvb3AoKTsKLSAgICB2b2lkIHdha2VVcFJ1bkxvb3AoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFkKCk7CisgICAg
dm9pZCB3YWtlVXBSdW5Mb29wKCk7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkUnVuTG9vcFNvdXJj
ZUNhbGxiYWNrKHZvaWQqIHNjcm9sbGluZ1RocmVhZCk7CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29w
U291cmNlQ2FsbGJhY2soKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHRlcm1pbmF0
ZVNjcm9sbGluZ1RocmVhZCgpOwogI2VuZGlmCiAKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhy
ZWFkSWRlbnRpZmllcjsKIAogICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0
aW9uVmFyaWFibGU7CiAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7Ci0KICAgICBM
b2NrIG1fZnVuY3Rpb25zTXV0ZXg7Ci0gICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+
IG1fZnVuY3Rpb25zOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgVmVjdG9yPHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4+IG1fZnVuY3Rpb25zOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNl
IFdlYkNvcmU6OlJ1bkxvb3AgaGVyZS4KICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3Ro
cmVhZFJ1bkxvb3A7CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFNvdXJjZVJlZj4gbV90aHJlYWRS
dW5Mb29wU291cmNlOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIENvbmRpdGlvbiBtX3Rlcm1p
bmF0ZVJ1bkxvb3BDb25kaXRpb247CisgICAgTG9jayBtX3Rlcm1pbmF0ZVJ1bkxvb3BNdXRleDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsaW5nUnVuTG9vcD4gbV90aHJlYWRSdW5Mb29wOwog
I2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWUuY3BwCmluZGV4IDBmNDFmZWE0NzU1YWU0ODJiZGI5YWM5ODhkNzA0NDc2YTZlOTZkZDEu
LjhiNzExOWMxZDRhNDkzNzUwZWI5OTJjMzdkOTQwYWMwYzY3ODlhMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCkBAIC00OCw2ICs0OCw3
IEBAIFNjcm9sbGluZ1RyZWU6On5TY3JvbGxpbmdUcmVlKCkKIAogYm9vbCBTY3JvbGxpbmdUcmVl
OjpzaG91bGRIYW5kbGVXaGVlbEV2ZW50U3luY2hyb25vdXNseShjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIHdoZWVsRXZlbnQpCiB7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gVGhpcyBt
ZXRob2QgaXMgaW52b2tlZCBieSB0aGUgZXZlbnQgaGFuZGxpbmcgdGhyZWFkCiAgICAgTG9ja0hv
bGRlciBsb2NrKG1fbXV0ZXgpOwogCkBAIC02NywxNSArNjgsMjMgQEAgYm9vbCBTY3JvbGxpbmdU
cmVlOjpzaG91bGRIYW5kbGVXaGVlbEV2ZW50U3luY2hyb25vdXNseShjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQKICAgICAgICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24uY29udGFpbnMo
cm91bmRlZEludFBvaW50KHBvc2l0aW9uKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh3aGVlbEV2ZW50KTsKKyNlbmRpZgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlOjpzZXRPckNsZWFyTGF0Y2hlZE5v
ZGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBTY3JvbGxpbmdOb2RlSUQg
bm9kZUlEKQogeworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICh3aGVlbEV2ZW50LnNob3Vs
ZENvbnNpZGVyTGF0Y2hpbmcoKSkKICAgICAgICAgc2V0TGF0Y2hlZE5vZGUobm9kZUlEKTsKICAg
ICBlbHNlIGlmICh3aGVlbEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hpbmcoKSkKICAgICAgICAgY2xl
YXJMYXRjaGVkTm9kZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVudCk7Cisg
ICAgVU5VU0VEX1BBUkFNKG5vZGVJRCk7CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVl
OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkK
QEAgLTMyMiw2ICszMzEsNyBAQCBTY3JvbGxQaW5uaW5nQmVoYXZpb3IgU2Nyb2xsaW5nVHJlZTo6
c2Nyb2xsUGlubmluZ0JlaGF2aW9yKCkKIAogYm9vbCBTY3JvbGxpbmdUcmVlOjp3aWxsV2hlZWxF
dmVudFN0YXJ0U3dpcGVHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCkKIHsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpICE9
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMzM1LDcgKzM0NSw5IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZTo6d2lsbFdoZWVsRXZlbnRTdGFy
dFN3aXBlR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGlmICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAmJiBtX21haW5GcmFtZVBp
bm5lZFRvVGhlQm90dG9tICYmICFtX3J1YmJlckJhbmRzQXRCb3R0b20pCiAgICAgICAgIHJldHVy
biB0cnVlOwotCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh3aGVlbEV2ZW50KTsKKyNlbmRpZgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAKaW5kZXggZDgxM2RhZWE2NTU1NmY5
ZjBmNmQxNjU4MzRkMjNiNGMzOGY0MTkwYS4uMzliMmMwMmRiMDVkMDdhM2YyNTNkNmZkNWU3YTc5
NjJlOTYwN2ZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCkBAIC0xMTgsNyArMTE4LDkgQEAgdm9pZCBUaHJl
YWRlZFNjcm9sbGluZ1RyZWU6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlkQ2hhbmdlKFNjcm9s
bGluZ05vZGVJRCBub2QKIAogICAgIFJlZlB0cjxBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yPiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtzY3JvbGxpbmdDb29yZGluYXRvciwgbm9kZUlELCBob3Jpem9u
dGFsLCB2ZXJ0aWNhbF0geworI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzKG5vZGVJRCwgaG9yaXpvbnRhbCwg
dmVydGljYWwpOworI2VuZGlmCiAgICAgfSk7CiB9CiAKQEAgLTE2Niw3ICsxNjgsNiBAQCB2b2lk
IFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVs
RXZlbnRUZXN0VHJpZ2dlcjo6UwogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVtb3Zl
VGVzdERlZmVycmFsRm9yUmVhc29uKGlkZW50aWZpZXIsIHJlYXNvbik7CiAgICAgfSk7CiB9Ci0K
ICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMjQwNzZjNDI3MWE3YjQ3NjBkZWFjOGFmNmJmMDFjZWRmMWE3MGE3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yR3RrLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsu
aCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisj
aW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUd0ay5o
IgorI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpTY3JvbGxpbmdDb29yZGluYXRvckd0ayhQYWdlKiBwYWdl
KQorICAgIDogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxp
bmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcigqdGhpcywgJlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3Rr
Ojpjb21taXRUcmVlU3RhdGUpCit7CisgICAgc2V0U2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdUcmVl
R3RrOjpjcmVhdGUodGhpcykpOworfQorCitTY3JvbGxpbmdDb29yZGluYXRvckd0azo6flNjcm9s
bGluZ0Nvb3JkaW5hdG9yR3RrKCkKK3sKKyAgICBBU1NFUlQoIXNjcm9sbGluZ1RyZWUoKSk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OnBhZ2VEZXN0cm95ZWQoKQoreworICAg
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKworICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworCisgICAgLy8gSW52YWxpZGF0
aW5nIHRoZSBzY3JvbGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0
d2VlbiB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4K
KyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiBzY3JvbGxpbmdUcmVlID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHJlbGVhc2VTY3JvbGxpbmdUcmVl
KCkpOworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWVdIHsKKyAg
ICAgICAgc2Nyb2xsaW5nVHJlZS0+aW52YWxpZGF0ZSgpOworICAgIH0pOworfQorCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpCit7CisgICAg
Y29tbWl0VHJlZVN0YXRlKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1l
ci5zdG9wKCk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmhhbmRsZVdoZWVs
RXZlbnQoRnJhbWVWaWV3JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAg
ICBpZiAoc2Nyb2xsaW5nVHJlZSgpLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdo
ZWVsRXZlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8VGhyZWFkZWRT
Y3JvbGxpbmdUcmVlPiB0aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNj
cm9sbGluZ1RyZWU+KHNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNw
YXRjaChbdGhyZWFkZWRTY3JvbGxpbmdUcmVlLCB3aGVlbEV2ZW50XSB7CisgICAgICAgIHRocmVh
ZGVkU2Nyb2xsaW5nVHJlZS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICB9KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckd0azo6c2No
ZWR1bGVUcmVlU3RhdGVDb21taXQoKQoreworICAgIEFTU0VSVChzY3JvbGxpbmdTdGF0ZVRyZWUo
KS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSB8fCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkRpcnR5
KCkpOworICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVy
VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3Rr
Ojpjb21taXRUcmVlU3RhdGUoKQoreworICAgIHdpbGxDb21taXRUcmVlKCk7CisgICAgaWYgKCFz
Y3JvbGxpbmdTdGF0ZVRyZWUoKS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVmUHRyPFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4gdGhyZWFkZWRTY3JvbGxp
bmdUcmVlID0gZG93bmNhc3Q8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPihzY3JvbGxpbmdUcmVlKCkp
OworICAgIFNjcm9sbGluZ1N0YXRlVHJlZSogdW5wcm90ZWN0ZWRUcmVlU3RhdGUgPSBzY3JvbGxp
bmdTdGF0ZVRyZWUoKS0+Y29tbWl0KExheWVyUmVwcmVzZW50YXRpb246OlBsYXRmb3JtTGF5ZXJJ
RFJlcHJlc2VudGF0aW9uKS5yZWxlYXNlKCk7CisKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3Bh
dGNoKFt0aHJlYWRlZFNjcm9sbGluZ1RyZWUsIHVucHJvdGVjdGVkVHJlZVN0YXRlXSB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IHRyZWVTdGF0ZSh1bnByb3Rl
Y3RlZFRyZWVTdGF0ZSk7CisgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0TmV3
VHJlZVN0YXRlKFdURjo6bW92ZSh0cmVlU3RhdGUpKTsKKyAgICB9KTsKKworICAgIHVwZGF0ZVRp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JH
dGs6OnVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCkKK3sKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIGlmICghZnJhbWVWaWV3
KQorICAgICAgICByZXR1cm47CisKKyAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGZy
YW1lVmlldy0+dGlsZWRCYWNraW5nKCk7CisgICAgaWYgKCF0aWxlZEJhY2tpbmcpCisgICAgICAg
IHJldHVybjsKKworICAgIFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIGluZGljYXRvck1vZGU7Cisg
ICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpCisg
ICAgICAgIGluZGljYXRvck1vZGUgPSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxl
SW5kaWNhdGlvbjsKKyAgICBlbHNlCisgICAgICAgIGluZGljYXRvck1vZGUgPSBBc3luY1Njcm9s
bGluZ0luZGljYXRpb247CisKKyAgICB0aWxlZEJhY2tpbmctPnNldFNjcm9sbGluZ01vZGVJbmRp
Y2F0aW9uKGluZGljYXRvck1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNWZhMjgzNGU3M2ExNTViZDA4MTk3YmVjZGY2MTk1MzM1ZTZlNWEwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yR3RrLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrX2gKKyNkZWZpbmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3JH
dGtfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIkFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3Jv
bGxiYXI7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CitjbGFzcyBUaHJlYWRlZFNj
cm9sbGluZ1RyZWU7CisKK2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrIDogcHVibGljIEFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yR3RrKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29yZGluYXRv
ckd0aygpOworCisgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICAv
LyBIYW5kbGUgdGhlIHdoZWVsIGV2ZW50IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBSZXR1cm5z
IHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBoYW5kbGVkIG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcmLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVD
b21taXQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CisgICAgdm9p
ZCB1cGRhdGVUaWxlZFNjcm9sbGluZ0luZGljYXRvcigpOworCisgICAgVGltZXIgbV9zY3JvbGxp
bmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxp
bmdDb29yZGluYXRvckd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTZmNTk1MTIwYTI0ZmU5MDlmNzQ4OThhYWRmNDQ5ZmZi
NTU3YzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Z3RrL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
R3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xs
YmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFycyhTY3JvbGxiYXIqIHZTY3JvbGxiYXIsIFNjcm9sbGJh
ciogaFNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKKyAgICBpZiAoc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhl
bWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
ciA9IHZTY3JvbGxiYXIgJiYgdlNjcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRo
cmVhZCgpCisgICAgICAgID8gdlNjcm9sbGJhciA6IG51bGxwdHI7CisgICAgU2Nyb2xsYmFyKiBo
b3Jpem9udGFsU2Nyb2xsYmFyID0gaFNjcm9sbGJhciAmJiBoU2Nyb2xsYmFyLT5zdXBwb3J0c1Vw
ZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkKKyAgICAgICAgPyBoU2Nyb2xsYmFyIDogbnVsbHB0cjsK
KworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyID09IHZlcnRpY2FsU2Nyb2xsYmFyICYmIG1f
aG9yaXpvbnRhbFNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gdlNjcm9sbGJhcjsKKyAgICBtX2hvcml6
b250YWxTY3JvbGxiYXIgPSBoU2Nyb2xsYmFyOworCisgICAgc2V0UHJvcGVydHlDaGFuZ2VkKFBh
aW50ZXJGb3JTY3JvbGxiYXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShHVEspCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUaHJlYWRHdGsu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU0YzZjYjMyMjVjNDRlNmFkOWQ0MDc3MzAyOWMyM2I0ZjY3ZGNlZWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Ny
b2xsaW5nVGhyZWFkR3RrLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCisKKyNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdSdW5Mb29wIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTY3JvbGxpbmdSdW5Mb29wKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBTY3JvbGxpbmdSdW5Mb29wKCkKKyAgICAgICAgOiBtX3J1bkxv
b3AoUnVuTG9vcDo6Y3VycmVudCgpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxPblNj
cm9sbGluZ1J1bkxvb3Aoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKQorICAgIHsKKyAg
ICAgICAgaWYgKCZtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkgeworICAgICAgICAg
ICAgZnVuY3Rpb24oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IG1fcnVuTG9vcC5kaXNwYXRjaChXVEY6Om1vdmUoZnVuY3Rpb24pKTsKKyAgICB9CisKKyAgICBS
dW5Mb29wJiBydW5Mb29wKCkgeyByZXR1cm4gbV9ydW5Mb29wOyB9Citwcml2YXRlOgorICAgIFJ1
bkxvb3AmIG1fcnVuTG9vcDsKK307CisKK1Njcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFk
KCkKKyAgICA6IG1fdGhyZWFkSWRlbnRpZmllcigwKQorICAgICwgbV90aHJlYWRSdW5Mb29wKG51
bGxwdHIpCit7Cit9CisKK1Njcm9sbGluZ1RocmVhZDo6flNjcm9sbGluZ1RocmVhZCgpCit7Cisg
ICAgdGVybWluYXRlU2Nyb2xsaW5nVGhyZWFkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFk
Ojppbml0aWFsaXplUnVuTG9vcCgpCit7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXgpOworICAgICAgICBtX3RocmVhZFJ1bkxvb3AgPSBz
dGQ6Om1ha2VfdW5pcXVlPFNjcm9sbGluZ1J1bkxvb3A+KCk7CisKKyAgICAgICAgbV9pbml0aWFs
aXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOworICAgIH0KKworICAgIEFT
U0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7CisgICAgbV90aHJlYWRSdW5Mb29wLT5ydW5Mb29wKCku
cnVuKCk7CisKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGVybWluYXRlUnVu
TG9vcE11dGV4KTsKKyAgICAgICAgbV90aHJlYWRSdW5Mb29wID0gbnVsbHB0cjsKKyAgICAgICAg
bV90ZXJtaW5hdGVSdW5Mb29wQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIH0KKworICAgIGRl
dGFjaFRocmVhZChtX3RocmVhZElkZW50aWZpZXIpOworfQorCit2b2lkIFNjcm9sbGluZ1RocmVh
ZDo6dGVybWluYXRlU2Nyb2xsaW5nVGhyZWFkKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3Rlcm1pbmF0ZVJ1bkxvb3BNdXRleCk7CisgICAgbV90aHJlYWRSdW5Mb29wLT5ydW5Mb29wKCku
c3RvcCgpOworICAgIG1fdGVybWluYXRlUnVuTG9vcENvbmRpdGlvbi53YWl0KG1fdGVybWluYXRl
UnVuTG9vcE11dGV4KTsKK30KKwordm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgYXV0byYgc2Nyb2xsaW5nVGhyZWFk
ID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKTsKKyAgICBzY3JvbGxpbmdUaHJlYWQuY3Jl
YXRlVGhyZWFkSWZOZWVkZWQoKTsKKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
c2luZ2xldG9uKCkubV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAgIHNjcm9sbGluZ1RocmVhZC5t
X3RocmVhZFJ1bkxvb3AtPmNhbGxPblNjcm9sbGluZ1J1bkxvb3AoZnVuY3Rpb24pOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2d0ay9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjQzOGEzYmEyZDc2
YTM3YTU4MjE2Yjk0Mjg4NzA5OGYxODUxNzkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0
YXRlRml4ZWROb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlZjxTY3JvbGxpbmdUcmVlRml4ZWROb2RlPiBTY3JvbGxpbmdUcmVlRml4
ZWROb2RlOjpjcmVhdGUoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5nTm9k
ZUlEIG5vZGVJRCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdUcmVlRml4
ZWROb2RlKHNjcm9sbGluZ1RyZWUsIG5vZGVJRCkpOworfQorCitTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUs
IFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCisgICAgOiBTY3JvbGxpbmdUcmVlTm9kZShzY3JvbGxp
bmdUcmVlLCBGaXhlZE5vZGUsIG5vZGVJRCkKK3sKK30KKworU2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZTo6flNjcm9sbGluZ1RyZWVGaXhlZE5vZGUoKQoreworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVO
b2RlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZjZmY0
ZWUwNmQzOWVjZjVkMGEwOWQzNjdmZWI4NDNhNDlmZDUxZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGVfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVlRml4ZWROb2RlX2gKKworI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9zaXRpb25WaWV3cG9ydENv
bnN0cmFpbnRzOworCitjbGFzcyBTY3JvbGxpbmdUcmVlRml4ZWROb2RlIDogcHVibGljIFNjcm9s
bGluZ1RyZWVOb2RlIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNj
cm9sbGluZ1RyZWVGaXhlZE5vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9k
ZUlEKTsKKworICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVGaXhlZE5vZGUoKTsKKworcHJpdmF0
ZToKKyAgICBTY3JvbGxpbmdUcmVlRml4ZWROb2RlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdO
b2RlSUQpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNj
cm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXll
cnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9k
ZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBj
dW11bGF0aXZlRGVsdGEpIG92ZXJyaWRlOworCisgICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29u
c3RyYWludHMgbV9jb25zdHJhaW50czsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQgbV9sYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19TQ1JPTExJTkdfTk9ERShTY3JvbGxpbmdUcmVlRml4ZWROb2RlLCBpc0ZpeGVk
Tm9kZSgpKQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2VuZGlmIC8v
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViMGYyYzc3OTRiODUyNDJhNjJjYjk0ZDc1NjVm
NTlkMjJlNzE2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKQEAgLTAsMCAr
MSwzNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaCIKKworI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKyNpbmNs
dWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgbG9nVGhyZWFkZWRTY3JvbGxp
bmdNb2RlKHVuc2lnbmVkIHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyk7CisKK1JlZjxTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrOjpjcmVhdGUoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5nTm9k
ZUlEIG5vZGVJRCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrKHNjcm9sbGluZ1RyZWUsIG5vZGVJRCkpOworfQorCitTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2Rl
SUQpCisgICAgOiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKHNjcm9sbGluZ1RyZWUs
IG5vZGVJRCkKKyAgICAsIG1fc2Nyb2xsQ29udHJvbGxlcigqdGhpcykKKyAgICAsIG1fc2Nyb2xs
TGF5ZXIoMCkKKyAgICAsIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyKDApCisgICAgLCBtX2NvdW50
ZXJTY3JvbGxpbmdMYXllcigwKQorICAgICwgbV9pbnNldENsaXBMYXllcigwKQorICAgICwgbV9j
b250ZW50U2hhZG93TGF5ZXIoMCkKKyAgICAsIG1faGVhZGVyTGF5ZXIoMCkKKyAgICAsIG1fZm9v
dGVyTGF5ZXIoMCkKKyAgICAsIG1fY29tcG9zaXRpbmdDb29yZGluYXRvcihudWxscHRyKQorICAg
ICwgbV92ZXJ0aWNhbFNjcm9sbGJhcihudWxscHRyKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyKG51bGxwdHIpCit7Cit9CisKK1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6
On5TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKCkKK3sKK30KKworRmxvYXRQb2lu
dCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpsYXllclBvc2l0aW9uKEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBpZCkgY29uc3QKK3sKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisgICAgQVNTRVJUKG1fY29tcG9zaXRpbmdDb29yZGluYXRvcik7CisgICAg
cmV0dXJuIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+bGF5ZXJQb3NpdGlvbihpZCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyNlbmRp
ZgorfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNldExheWVy
UG9zaXRpb24oR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkLCBjb25zdCBGbG9hdFBv
aW50JiBwKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBBU1NFUlQobV9j
b21wb3NpdGluZ0Nvb3JkaW5hdG9yKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPnNl
dExheWVyUG9zaXRpb24oaWQsIHApOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaWQpOworICAg
IFVOVVNFRF9QQVJBTShwKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVHdGs6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRl
Tm9kZSYgc3RhdGVOb2RlKQoreworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6
OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7CisgICAgY29uc3QgYXV0byYgc2Nyb2xs
aW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+
KHN0YXRlTm9kZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yID0gc3RhdGVO
b2RlLmNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKTsKKyAgICBpZiAoY29tcG9zaXRpbmdDb29yZGlu
YXRvciAmJiBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yICE9IG1fY29tcG9zaXRpbmdDb29yZGluYXRv
cikKKyAgICAgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yID0gY29tcG9zaXRpbmdDb29yZGlu
YXRvcjsKKyNlbmRpZgorCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCisgICAgICAgIG1fc2Nyb2xs
TGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNM
YXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKKworICAg
IGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlOjpDb3VudGVyU2Nyb2xsaW5nTGF5ZXIpKQorICAgICAgICBtX2Nv
dW50ZXJTY3JvbGxpbmdMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5jb3VudGVyU2Nyb2xsaW5n
TGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpJbnNldENsaXBMYXllcikpCisgICAg
ICAgIG1faW5zZXRDbGlwTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaW5zZXRDbGlwTGF5ZXIo
KTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKQorICAgICAg
ICBtX2NvbnRlbnRTaGFkb3dMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5jb250ZW50U2hhZG93
TGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpIZWFkZXJMYXllcikpCisgICAgICAg
IG1faGVhZGVyTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaGVhZGVyTGF5ZXIoKTsKKworICAg
IGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlOjpGb290ZXJMYXllcikpCisgICAgICAgIG1fZm9vdGVyTGF5ZXIg
PSBzY3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlOjpQYWludGVyRm9yU2Nyb2xsYmFyKSkgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
ID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5ob3Jpem9udGFsU2Nyb2xsYmFy
KCk7CisgICAgfQorCisgICAgYm9vbCBsb2dTY3JvbGxpbmdNb2RlID0gIW1faGFkRmlyc3RVcGRh
dGU7CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlJlYXNvbnNGb3JTeW5jaHJvbm91c1Njcm9sbGlu
ZykpIHsKKyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJv
bm91c2x5KCkpIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIHRyYW5zaXRpb25pbmcgdG8gdGhlIHNs
b3cgInVwZGF0ZSBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gb24gdGhlIG1haW4gdGhyZWFkIiBtb2Rl
LgorICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHJvYmFibGUgbWFpbiB0aHJlYWQgc2Ny
b2xsIHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIGxheWVyIHBvc2l0aW9uLgorICAg
ICAgICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpCisgICAgICAg
ICAgICAgICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGluZ1N0
YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IGxh
eWVyUG9zaXRpb24obV9zY3JvbGxMYXllcik7CisgICAgICAgICAgICAgICAgbV9wcm9iYWJsZU1h
aW5UaHJlYWRTY3JvbGxQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLXNjcm9sbExheWVyUG9zaXRpb24u
eCgpLCAtc2Nyb2xsTGF5ZXJQb3NpdGlvbi55KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgbG9nU2Nyb2xsaW5nTW9kZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGxv
Z1Njcm9sbGluZ01vZGUpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdQ
ZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpCisgICAgICAgICAgICBsb2dUaHJlYWRlZFNjcm9s
bGluZ01vZGUoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKCkpOworICAgIH0KKworICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6RXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcikpCisgICAgICAgIG1fZXhw
ZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5leHBlY3RzV2hl
ZWxFdmVudFRlc3RUcmlnZ2VyKCk7CisKKyAgICBtX2hhZEZpcnN0VXBkYXRlID0gdHJ1ZTsKK30K
Kwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVBZnRlckNo
aWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4oc3RhdGVOb2Rl
KTsKKworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKKworICAgIC8vIFVwZGF0ZSB0aGUg
c2Nyb2xsIHBvc2l0aW9uIGFmdGVyIGNoaWxkIG5vZGVzIGhhdmUgYmVlbiB1cGRhdGVkLCBiZWNh
dXNlIHRoZXkgbmVlZCB0byBoYXZlIHVwZGF0ZWQgdGhlaXIgY29uc3RyYWludHMgYmVmb3JlIGFu
eSBzY3JvbGxpbmcgaGFwcGVucy4KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uKSkKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsaW5nU3RhdGVOb2RlLnJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5o
YXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikKKyAgICAg
ICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplKQorICAgICAgICB8fCBzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsYWJsZUFyZWFTaXplKSkKKyAgICAgICAgdXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoc2Ny
b2xsUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZUd0azo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCit7CisgICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Njcm9sbENvbnRyb2xsZXIuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKK30K
KworYm9vbCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjppc0FscmVhZHlQaW5u
ZWRJbkRpcmVjdGlvbk9mR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQsIFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIHN3aXRjaCAoYXhpcykgeworICAgIGNh
c2UgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDoKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50
LmRlbHRhWSgpID4gMCAmJiBzY3JvbGxQb3NpdGlvbigpLnkoKSA8PSBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKS55KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAmJiBzY3JvbGxQb3NpdGlv
bigpLnkoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOworICAgIGNhc2UgU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsOgorICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFY
KCkgPiAwICYmIHNjcm9sbFBvc2l0aW9uKCkueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigp
LngoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwICYmIHNjcm9sbFBvc2l0aW9uKCkueCgp
ID49IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVHdGs6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQor
eworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNjcm9sbEJ5KG9mZnNldCk7
Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2Ny
b2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGlmIChzaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uU3luY2hyb25vdXNseSgpKQorICAgICAgICByZXR1cm4gbV9wcm9iYWJsZU1haW5UaHJl
YWRTY3JvbGxQb3NpdGlvbjsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbExheWVyUG9z
aXRpb24gPSBsYXllclBvc2l0aW9uKG1fc2Nyb2xsTGF5ZXIpOworICAgIHJldHVybiBGbG9hdFBv
aW50KC1zY3JvbGxMYXllclBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9s
bExheWVyUG9zaXRpb24ueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICAvLyBTY3JvbGwgZGVsdGFzIGNhbiBi
ZSBub24taW50ZWdyYWwgd2l0aCBzb21lIGlucHV0IGRldmljZXMsIHNvIHNjcm9sbFBvc2l0aW9u
IG1heSBub3QgYmUgaW50ZWdyYWwuCisgICAgLy8gRklYTUU6IHdoZW4gd2Ugc3VwcG9ydCBoYWxm
LXBpeGVsIHNjcm9sbCBwb3NpdGlvbnMgb24gUmV0aW5hIGRpc3BsYXlzLCB0aGlzIHdpbGwgbmVl
ZCB0byByb3VuZCB0byBoYWxmIHBpeGVscy4KKyAgICBGbG9hdFBvaW50IHJvdW5kZWRQb3NpdGlv
bihyb3VuZGYoc2Nyb2xsUG9zaXRpb24ueCgpKSwgcm91bmRmKHNjcm9sbFBvc2l0aW9uLnkoKSkp
OworCisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsUG9zaXRp
b24ocm91bmRlZFBvc2l0aW9uKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQorICAgICAgICBsb2dFeHBvc2VkVW5maWxsZWRB
cmVhKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0
U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFBv
aW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3Jv
bGxQb3NpdGlvbik7CisKKyAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5
bmNocm9ub3VzbHkoKSkgeworICAgICAgICBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb247CisgICAgICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdU
cmVlTm9kZURpZFNjcm9sbChzY3JvbGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIFNldFNj
cm9sbGluZ0xheWVyUG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0
U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgc2Nyb2xsaW5nVHJlZSgp
LnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKHNjcm9sbGluZ05vZGVJRCgpLCBzY3JvbGxQb3Np
dGlvbik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0
U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBB
U1NFUlQoIXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpOwor
CisgICAgc2V0TGF5ZXJQb3NpdGlvbihtX3Njcm9sbExheWVyLCBGbG9hdFBvaW50KC1wb3NpdGlv
bi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4o
KS55KCkpKTsKKworICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBiZWhhdmlvckZv
ckZpeGVkID0gc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCk7CisgICAgTGF5b3V0UG9p
bnQgc2Nyb2xsT2Zmc2V0ID0gTGF5b3V0UG9pbnQocG9zaXRpb24pIC0gdG9MYXlvdXRTaXplKHNj
cm9sbE9yaWdpbigpKTsKKyAgICBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0KEZsb2F0UG9pbnQoKSwg
c2Nyb2xsYWJsZUFyZWFTaXplKCkpOworCisgICAgRmxvYXRTaXplIHNjcm9sbE9mZnNldEZvckZp
eGVkQ2hpbGRyZW4gPSBGcmFtZVZpZXc6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oZW5j
bG9zaW5nTGF5b3V0UmVjdCh2aWV3cG9ydFJlY3QpLCBMYXlvdXRTaXplKHRvdGFsQ29udGVudHNT
aXplKCkpLCBzY3JvbGxPZmZzZXQsIHNjcm9sbE9yaWdpbigpLCBmcmFtZVNjYWxlRmFjdG9yKCks
CisgICAgICAgIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSwgYmVoYXZpb3JG
b3JGaXhlZCwgaGVhZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKTsKKworICAgIGlmIChtX2Nv
dW50ZXJTY3JvbGxpbmdMYXllcikKKyAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbihtX2NvdW50ZXJT
Y3JvbGxpbmdMYXllciwgRmxvYXRQb2ludChzY3JvbGxPZmZzZXRGb3JGaXhlZENoaWxkcmVuKSk7
CisKKyAgICBmbG9hdCB0b3BDb250ZW50SW5zZXQgPSB0aGlzLT50b3BDb250ZW50SW5zZXQoKTsK
KyAgICBpZiAobV9pbnNldENsaXBMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllciAmJiB0
b3BDb250ZW50SW5zZXQpIHsKKyAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbihtX2luc2V0Q2xpcExh
eWVyLCBGbG9hdFBvaW50KDAsIEZyYW1lVmlldzo6eVBvc2l0aW9uRm9ySW5zZXRDbGlwTGF5ZXIo
cG9zaXRpb24sIHRvcENvbnRlbnRJbnNldCkpKTsKKworICAgICAgICBjb25zdCBGbG9hdFBvaW50
IHNjcm9sbGVkQ29udGVudHNMYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbihtX3Njcm9sbGVk
Q29udGVudHNMYXllcik7CisgICAgICAgIHNldExheWVyUG9zaXRpb24obV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXIsIEZsb2F0UG9pbnQoc2Nyb2xsZWRDb250ZW50c0xheWVyUG9zaXRpb24ueCgpLAor
ICAgICAgICAgICAgRnJhbWVWaWV3Ojp5UG9zaXRpb25Gb3JSb290Q29udGVudExheWVyKHBvc2l0
aW9uLCB0b3BDb250ZW50SW5zZXQsIGhlYWRlckhlaWdodCgpKSkpOworICAgICAgICBpZiAobV9j
b250ZW50U2hhZG93TGF5ZXIpCisgICAgICAgICAgICBzZXRMYXllclBvc2l0aW9uKG1fY29udGVu
dFNoYWRvd0xheWVyLCBzY3JvbGxlZENvbnRlbnRzTGF5ZXJQb3NpdGlvbik7CisgICAgfQorCisg
ICAgaWYgKG1faGVhZGVyTGF5ZXIgfHwgbV9mb290ZXJMYXllcikgeworICAgICAgICAvLyBHZW5l
cmFsbHkgdGhlIGJhbm5lcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgaG9yaXpvbnRhbC1wb3NpdGlv
biBjb21wdXRhdGlvbiBhcyBhIGZpeGVkIGVsZW1lbnQuIEhvd2V2ZXIsCisgICAgICAgIC8vIHRo
ZSBiYW5uZXJzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIGZyYW1lU2NhbGVGYWN0b3IoKSwgc28g
aWYgdGhlcmUgaXMgY3VycmVudGx5IGEgbm9uLTEgZnJhbWVTY2FsZUZhY3RvcigpCisgICAgICAg
IC8vIHRoZW4gd2Ugc2hvdWxkIHJlY29tcHV0ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZENoaWxkcmVu
IGZvciB0aGUgYmFubmVyIHdpdGggYSBzY2FsZSBmYWN0b3Igb2YgMS4KKyAgICAgICAgZmxvYXQg
aG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciA9IHNjcm9sbE9mZnNldEZvckZpeGVkQ2hp
bGRyZW4ud2lkdGgoKTsKKyAgICAgICAgaWYgKGZyYW1lU2NhbGVGYWN0b3IoKSAhPSAxKQorICAg
ICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciA9IEZyYW1lVmlldzo6c2Ny
b2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbihlbmNsb3NpbmdMYXlvdXRSZWN0KHZpZXdwb3J0UmVj
dCksIExheW91dFNpemUodG90YWxDb250ZW50c1NpemUoKSksIHNjcm9sbE9mZnNldCwgc2Nyb2xs
T3JpZ2luKCksIDEsIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSwgYmVoYXZp
b3JGb3JGaXhlZCwgaGVhZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKS53aWR0aCgpOworCisg
ICAgICAgIGlmIChtX2hlYWRlckxheWVyKQorICAgICAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbiht
X2hlYWRlckxheWVyLCBGbG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIs
IEZyYW1lVmlldzo6eVBvc2l0aW9uRm9ySGVhZGVyTGF5ZXIocG9zaXRpb24sIHRvcENvbnRlbnRJ
bnNldCkpKTsKKworICAgICAgICBpZiAobV9mb290ZXJMYXllcikgeworICAgICAgICAgICAgc2V0
TGF5ZXJQb3NpdGlvbihtX2Zvb3RlckxheWVyLCBGbG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxP
ZmZzZXRGb3JCYW5uZXIsCisgICAgICAgICAgICAgICAgRnJhbWVWaWV3Ojp5UG9zaXRpb25Gb3JG
b290ZXJMYXllcihwb3NpdGlvbiwgdG9wQ29udGVudEluc2V0LCB0b3RhbENvbnRlbnRzU2l6ZSgp
LmhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlld3BvcnRSZWN0LnNldExv
Y2F0aW9uKEZsb2F0UG9pbnQoKSArIHNjcm9sbE9mZnNldEZvckZpeGVkQ2hpbGRyZW4pOworCisg
ICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+dXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSgqdGhpcywgdmlld3BvcnRSZWN0LCBGbG9hdFNpemUo
KSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBkYXRl
TGF5ZXJzQWZ0ZXJWaWV3cG9ydENoYW5nZShjb25zdCBGbG9hdFJlY3QmLCBkb3VibGUpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0azo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICBGbG9hdFBvaW50IHBvc2l0aW9uOworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkucm9vdE5vZGUo
KSA9PSB0aGlzICYmIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9PSBQ
aW5Ub0JvdHRvbSkKKyAgICAgICAgcG9zaXRpb24uc2V0WShtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KS55KCkpOworCisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitGbG9hdFBvaW50IFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0
Cit7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbih0b3RhbENvbnRlbnRzU2l6ZUZvclJ1YmJlckJh
bmQoKSAtIHNjcm9sbGFibGVBcmVhU2l6ZSgpKTsKKyAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLmV4
cGFuZGVkVG8oRmxvYXRQb2ludCgpKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkucm9vdE5v
ZGUoKSA9PSB0aGlzICYmIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9
PSBQaW5Ub1RvcCkKKyAgICAgICAgcG9zaXRpb24uc2V0WShtaW5pbXVtU2Nyb2xsUG9zaXRpb24o
KS55KCkpOworCisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIGJvb2wgcGlubmVkVG9UaGVMZWZ0ID0gc2Ny
b2xsUG9zaXRpb24ueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICBib29s
IHBpbm5lZFRvVGhlUmlnaHQgPSBzY3JvbGxQb3NpdGlvbi54KCkgPj0gbWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkueCgpOworICAgIGJvb2wgcGlubmVkVG9UaGVUb3AgPSBzY3JvbGxQb3NpdGlvbi55
KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOworICAgIGJvb2wgcGlubmVkVG9UaGVC
b3R0b20gPSBzY3JvbGxQb3NpdGlvbi55KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgp
OworCisgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZVBpblN0YXRlKHBpbm5lZFRvVGhl
TGVmdCwgcGlubmVkVG9UaGVSaWdodCwgcGlubmVkVG9UaGVUb3AsIHBpbm5lZFRvVGhlQm90dG9t
KTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpsb2dFeHBv
c2VkVW5maWxsZWRBcmVhKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGF0aWMg
dm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWduZWQgc3luY2hyb25vdXNTY3JvbGxp
bmdSZWFzb25zKQoreworICAgIGlmIChzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMpIHsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciByZWFzb25zRGVzY3JpcHRpb247CisKKyAgICAgICAgaWYgKHN5
bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpGb3JjZWRP
bk1haW5UaHJlYWQpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kTGl0ZXJh
bCgiZm9yY2VkLCIpOworICAgICAgICBpZiAoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zICYg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6Okhhc1Nsb3dSZXBhaW50T2JqZWN0cykKKyAgICAgICAgICAg
IHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmRMaXRlcmFsKCJzbG93LXJlcGFpbnQgb2JqZWN0cywi
KTsKKyAgICAgICAgaWYgKHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpIYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c1dpdGhvdXRTdXBwb3J0aW5n
Rml4ZWRMYXllcnMpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kTGl0ZXJh
bCgidmlld3BvcnQtY29uc3RyYWluZWQgb2JqZWN0cywiKTsKKyAgICAgICAgaWYgKHN5bmNocm9u
b3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNOb25MYXllclZp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKQorICAgICAgICAgICAgcmVhc29uc0Rlc2NyaXB0aW9u
LmFwcGVuZExpdGVyYWwoIm5vbi1sYXllciB2aWV3cG9ydC1jb25zdHJhaW5lZCBvYmplY3RzLCIp
OworICAgICAgICBpZiAoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OklzSW1hZ2VEb2N1bWVudCkKKyAgICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlv
bi5hcHBlbmRMaXRlcmFsKCJpbWFnZSBkb2N1bWVudCwiKTsKKworICAgICAgICAvLyBTdHJpcCB0
aGUgdHJhaWxpbmcgY29tbWEuCisgICAgICAgIFN0cmluZyByZWFzb25zRGVzY3JpcHRpb25Ucmlt
bWVkID0gcmVhc29uc0Rlc2NyaXB0aW9uLnRvU3RyaW5nKCkubGVmdChyZWFzb25zRGVzY3JpcHRp
b24ubGVuZ3RoKCkgLSAxKTsKKworICAgICAgICBXVEZMb2dBbHdheXMoIlNDUk9MTElORzogU3dp
dGNoaW5nIHRvIG1haW4tdGhyZWFkIHNjcm9sbGluZyBtb2RlLiBUaW1lOiAlZiBSZWFzb24ocyk6
ICVzXG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCByZWFzb25zRGVzY3Jp
cHRpb25UcmltbWVkLmFzY2lpKCkuZGF0YSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJTQ1JPTExJTkc6IFN3aXRjaGluZyB0byB0aHJlYWRlZCBzY3JvbGxpbmcgbW9kZS4g
VGltZTogJWZcbiIsIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzBiMDU2ZGQxMzM2ZTIzY2RlMTY2ZDk3Y2MzM2VmMzkwOTMwMzE3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlR3RrLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrX2gKKyNkZWZpbmUgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0a19oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbENvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorI2luY2x1ZGUgIlNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQ7CitjbGFzcyBUZXh0dXJlTWFwcGVy
TGF5ZXI7CisKK2NsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsgOiBwdWJs
aWMgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3JvbGxDb250cm9s
bGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xs
aW5nTm9kZUlEKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
R3RrKCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0
ayhTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIC8vIFNjcm9sbGluZ1Ry
ZWVOb2RlIG1lbWJlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJlZm9yZUNo
aWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYpIG92ZXJyaWRlOworCisgICAgLy8gU2Nyb2xsY29udHJvbGxlckNsaWVudCBtZW1i
ZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBv
dmVycmlkZSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOyB9CisgICAgdmlydHVhbCBTY3Jv
bGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBtX2hvcml6b250
YWxTY3JvbGxiYXI7IH0KKworICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29u
c3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVM
YXllcnNBZnRlclZpZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJl
Y3QsIGRvdWJsZSBzY2FsZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFNjcm9sbExheWVyUG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworCisgICAgRmxvYXRQb2ludCBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFBvaW50IG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVNYWlu
RnJhbWVQaW5TdGF0ZShjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisKKyAgICBi
b29sIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYsIFNjcm9sbEV2ZW50QXhpcyk7CisKKyAgICB2b2lkIGxvZ0V4cG9zZWRVbmZpbGxl
ZEFyZWEoKTsKKworICAgIEZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbihHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQpIGNvbnN0OworICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIFNjcm9s
bENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOworCisgICAgR3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEIG1fc2Nyb2xsTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRCBtX2NvdW50ZXJTY3JvbGxpbmdMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQgbV9pbnNldENsaXBMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQgbV9jb250ZW50U2hhZG93TGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEIG1faGVhZGVyTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEIG1fZm9vdGVyTGF5ZXI7CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGll
bnQqIG1fY29tcG9zaXRpbmdDb29yZGluYXRvcjsKKworICAgIFNjcm9sbGJhciogbV92ZXJ0aWNh
bFNjcm9sbGJhcjsKKyAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKworICAg
IEZsb2F0UG9pbnQgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbjsKKyAgICBib29s
IG1fbGFzdFNjcm9sbEhhZFVuZmlsbGVkUGl4ZWxzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFk
Rmlyc3RVcGRhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9leHBlY3RzV2hlZWxFdmVudFRlc3RU
cmlnZ2VyIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGE2ZTFiNGM3MzBm
MzI1MzNiOTllM2U5ZGVlMWY5ZmQ5YzE3YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuY3BwCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNj
cm9sbGluZ1RyZWVHdGsuaCIKKworI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCIK
KyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8U2Nyb2xsaW5nVHJlZUd0az4g
U2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRlKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ1Ry
ZWVHdGsoc2Nyb2xsaW5nQ29vcmRpbmF0b3IpKTsKK30KKworU2Nyb2xsaW5nVHJlZUd0azo6U2Ny
b2xsaW5nVHJlZUd0ayhBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGlu
YXRvcikKKyAgICA6IFRocmVhZGVkU2Nyb2xsaW5nVHJlZShzY3JvbGxpbmdDb29yZGluYXRvcikK
K3sKK30KKworUGFzc1JlZlB0cjxTY3JvbGxpbmdUcmVlTm9kZT4gU2Nyb2xsaW5nVHJlZUd0azo6
Y3JlYXRlU2Nyb2xsaW5nVHJlZU5vZGUoU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9s
bGluZ05vZGVJRCBub2RlSUQpCit7CisgICAgc3dpdGNoIChub2RlVHlwZSkgeworICAgIGNhc2Ug
RnJhbWVTY3JvbGxpbmdOb2RlOgorICAgICAgICByZXR1cm4gU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZUd0azo6Y3JlYXRlKCp0aGlzLCBub2RlSUQpOworICAgIGNhc2UgT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgY2FzZSBGaXhlZE5vZGU6CisgICAgICAgIHJldHVybiBTY3JvbGxp
bmdUcmVlRml4ZWROb2RlOjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7CisgICAgY2FzZSBTdGlja3lO
b2RlOgorICAgICAgICByZXR1cm4gU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OmNyZWF0ZSgqdGhp
cywgbm9kZUlEKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmE4YjZiY2U3MjVkOTdj
YWM0N2FlZGYyM2I5ZDQ3OWY5YmNlZDA5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3RrLmgKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1RyZWVHdGtfaAorI2RlZmluZSBT
Y3JvbGxpbmdUcmVlR3RrX2gKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNs
dWRlICJUaHJlYWRlZFNjcm9sbGluZ1RyZWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTY3JvbGxpbmdUcmVlR3RrIDogcHVibGljIFRocmVhZGVkU2Nyb2xsaW5nVHJlZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxTY3JvbGxpbmdUcmVlR3RrPiBjcmVhdGUoQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvciopOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGluZ1Ry
ZWVOb2RlPiBjcmVhdGVTY3JvbGxpbmdUcmVlTm9kZShTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xs
aW5nTm9kZUlEKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdU
cmVlR3RrKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAv
LyBTY3JvbGxpbmdUcmVlR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI5ZjZiYWExZGIzMTg5NzE4ZjNjZjM0NmMwMTNiNzUwMDMyMmFiYjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGUuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgiCisKKyNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFNjcm9sbGluZ1RyZWVTdGlja3lOb2Rl
PiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGlu
Z1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZUlEKSk7Cit9CisK
K1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlOjpTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZShTY3JvbGxp
bmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQorICAgIDogU2Ny
b2xsaW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSwgU3RpY2t5Tm9kZSwgbm9kZUlEKQoreworfQor
CitTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6flNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKCkKK3sK
K30KKwordm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4o
Y29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9y
Q2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRTaXplJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmJlMDYyMmE1MTAzN2JlMTExNTJkMDlmNDIxZGNjODBl
ZThkN2VmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Z3RrL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlX2gKKyNkZWZpbmUgU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGVfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25z
dHJhaW50czsKKworY2xhc3MgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUgOiBwdWJsaWMgU2Nyb2xs
aW5nVHJlZU5vZGUgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2Ny
b2xsaW5nVHJlZVN0aWNreU5vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9k
ZUlEKTsKKworICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKCk7CisKK3ByaXZh
dGU6CisgICAgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGlu
Z05vZGVJRCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3Qg
U2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWRO
b2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUm
IGN1bXVsYXRpdmVEZWx0YSkgb3ZlcnJpZGU7CisKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQgbV9sYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19TQ1JPTExJTkdfTk9ERShTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSwg
aXNTdGlja3lOb2RlKCkpCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisj
ZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5jcHAKaW5kZXggYjM0MTRiNzBkMDkyNmZlZTgyYTQxZDI0ZjU0MjQ3NzBjN2VjZmEx
Ni4uYTlkZGQ3ZDkyN2EzZjdlYTA5MDIwZjUzYjJjYTVlOWExZjJkYzYwYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC00NzIsNiArNDcyLDkgQEAgYm9vbCBTY3JvbGxi
YXI6OnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25zdAogICAgIHJldHVybiAh
bV9zY3JvbGxhYmxlQXJlYS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJm
b3JtYW5jZVRlc3RpbmcoKQogICAgICAgICAmJiAobV9zY3JvbGxhYmxlQXJlYS5oYXNMYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbV9zY3JvbGxhYmxlQXJlYS5oYXNMYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSkKICAgICAgICAgJiYgbV9zY3JvbGxhYmxlQXJlYS51c2VzQXN5bmNT
Y3JvbGxpbmcoKTsKKyNlbGlmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKEdU
SykKKyAgICByZXR1cm4gIW1fc2Nyb2xsYWJsZUFyZWEuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkKKyAgICAgICAgJiYgbV9zY3JvbGxhYmxl
QXJlYS51c2VzQXN5bmNTY3JvbGxpbmcoKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKaW5kZXggNmFkYjY1NGM4MTM0YzUxODdlYTk2N2Y4
MjBjYWVjZDM2N2Q0OGQ0OC4uOTUxY2FiMmY1OWJhYzQwNTI4NTYwZWE4NDRiNGNhM2Y4ZWJhYWZl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaApAQCAtMTMxLDYgKzEzMSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CiAgICAgdm9pZCBhZGRDaGls
ZChUZXh0dXJlTWFwcGVyTGF5ZXIqKTsKIAorICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBhZGp1c3RlZFBvc2l0aW9uKCk7IH0KKwogcHJpdmF0ZToKICAgICBjb25zdCBU
ZXh0dXJlTWFwcGVyTGF5ZXImIHJvb3RMYXllcigpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBv
c2l0aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDBmYTcw
YTA0MGE5YjI5ZjkxMmQ4MzAwN2ZiMGE5NDQ5Yjg2NDdmNWIuLjUyNGI3NzMxZTI5OTY5YzNjMDU4
YzA2ZDdhMjYxMzk5OWY3MDNlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKQEAgLTE4Miw2ICsxODIsMTggQEAgdm9pZCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQs
IENvb3JkaW5hdGVkR3IKICAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihpZCwgc3RhdGUpKTsKIH0KIAorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCitG
bG9hdFBvaW50IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxheWVyUG9zaXRpb24oQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5sYXllclBvc2l0aW9u
KGxheWVySUQpOworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldExheWVyUG9z
aXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7
CisgICAgbV9jbGllbnQtPnNldExheWVyUG9zaXRpb24obGF5ZXJJRCwgcCk7Cit9CisjZW5kaWYK
KwogUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQogewogICAgIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IGZlMTBhM2VkZDg2OWY4
ZTc0N2ZkMDU4MTMyNzlmMjRiMmExMmM4MDUuLjVlM2FkMDY5ZmU2MTQ5ZGZjNDM3NjdlNzBhNzM4
M2U2MTVkODk1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3IuaApAQCAtNTksNiArNTksMTAgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgPSAwOworI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclBvc2l0
aW9uKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKKyAgICAgICAg
dmlydHVhbCBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24oQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7
CisjZW5kaWYKICAgICB9OwogCiAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdlKiwgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Kik7CkBAIC0xMDgsNiArMTEyLDEwIEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMy
X3QmIC8qIGF0bGFzSUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRTdXJmYWNlOjpDbGllbnQqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVy
U3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYp
IG92ZXJyaWRlOworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdmlydHVhbCBGbG9h
dFBvaW50IGxheWVyUG9zaXRpb24oQ29vcmRpbmF0ZWRMYXllcklEKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZs
b2F0UG9pbnQmKSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVu
dAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAyOWM2
NzQxOGIyNzc1YWMyOTFhY2UxYTJkMTQ1MzM0OTc0NTJiMDgwLi5jNWIyYjZkZGY2NTkzNzkyZDYy
ZjA0YjFhYWUxZTYxODY4YmQxOTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMzk1LDYgKzM5NSwxNSBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogICAg
IGFkZFJlcGFpbnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsKIH0KIAordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlm
IChwb3NpdGlvbigpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnN5bmNQb3NpdGlvbihwKTsKKyAgICBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworfQor
CiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5
ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgQ29udGVudHNMYXllclB1cnBvc2UpCiB7
CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggOGE0NWMzNTY1ODU3MDQzNTcxYjJl
MzU5Zjc2NmVmOTFiZDQwY2NjYS4uZmQxMjY2OTNmMzFhZDk4ODNjMGJlMjQ0OGZlN2IwN2YzZDE1
MTg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaApAQCAtNTQsNiArNTQsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBw
YWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywg
dWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQq
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXll
cklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKKworI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCisgICAgdmlydHVhbCBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24oQ29v
cmRpbmF0ZWRMYXllcklEKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVyUG9zaXRpb24o
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpID0gMDsKKyNlbmRp
ZgogfTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNz
TGF5ZXIKQEAgLTEwMiw2ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzRGlzcGxheSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgRmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIgPSBDbGlwVG9MYXllcikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29u
c3QgRmxvYXRSZWN0JiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoYm9vbCkgb3ZlcnJpZGU7CkBAIC0xNDIsNiAr
MTQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBJ
bnRTaXplJiwgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIEludFBvaW50JiwgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpDbGllbnQqKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0Q29vcmRpbmF0b3IoQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50KiBjb29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0b3I7IH0K
IAogICAgIHZvaWQgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKICAgICB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nj
cm9sbENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmOTBmZmEwM2E3OTBhY2I3MmFmODZhODVk
MTI2MzlhNTU2OTQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2Nyb2xsQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgor
CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
LmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9s
bGVyQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK2Jvb2wg
U2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQpCit7CisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0g
bV9jbGllbnQuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVydGljYWxT
Y3JvbGxiYXIgPSBtX2NsaWVudC52ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgZmxvYXQgZGVs
dGFYID0gaG9yaXpvbnRhbFNjcm9sbGJhciA/IC13aGVlbEV2ZW50LmRlbHRhWCgpIDogMDsKKyAg
ICBmbG9hdCBkZWx0YVkgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IC13aGVlbEV2ZW50LmRlbHRhWSgp
IDogMDsKKworICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBh
cHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQorICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZh
YnNmKGRlbHRhWCkpCisgICAgICAgIGRlbHRhWCA9IDA7CisgICAgZWxzZQorICAgICAgICBkZWx0
YVkgPSAwOworCisgICAgaWYgKGRlbHRhWCB8fCBkZWx0YVkpIHsKKyAgICAgICAgaWYgKGRlbHRh
WSkgeworICAgICAgICAgICAgZGVsdGFZICo9IHZlcnRpY2FsU2Nyb2xsYmFyLT5waXhlbFN0ZXAo
KTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVsdGFYKSB7CisgICAgICAgICAgICBkZWx0YVggKj0g
aG9yaXpvbnRhbFNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7CisgICAgICAgICAgICBtX2NsaWVudC5z
Y3JvbGxCeShGbG9hdFNpemUoZGVsdGFYLCAwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjYWRmOTUzZjBiYzJlMWQ3MDgyYjZhOWQyZjgw
MGMyMGJmYjRhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTY3JvbGxDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsQ29udHJvbGxlcl9oCisK
KyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBXaGVl
bEV2ZW50VGVzdFRyaWdnZXI7CisKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgeworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xsZXJDbGllbnQoKSB7IH0KKworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSA9IDA7Cisg
ICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgPSAwOworICAgIHZpcnR1
YWwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGRlZmVyVGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxl
QXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJl
YXNvbikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFy
ZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFz
b24pIGNvbnN0IHsgLyogRG8gbm90aGluZyAqLyB9CisKK307CisKK2NsYXNzIFNjcm9sbENvbnRy
b2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbENvbnRyb2xsZXIpOworCitw
dWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xp
ZW50Jik7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgbV9jbGllbnQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBlMTUwMGQ2MGEwMWQwZjI0MWZhNDM0
OTdjM2E4YjI1OGFiMjExYjUwLi45MWUxOGFiODhmMDQ0YjNlNWE0NjQzYjk4Zjg4ZDQ4ZmMwN2Y1
ZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKQEAgLTM0
Nyw3ICszNDcsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0
ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaQogCiBUZXh0dXJlTWFwcGVyTGF5
ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkKQogewotICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVk
TGF5ZXJJRCkgPyBsYXllckJ5SUQoaWQpIDogMDsKKyAgICByZXR1cm4gKGlkICE9IEludmFsaWRD
b29yZGluYXRlZExheWVySUQpID8gbGF5ZXJCeUlEKGlkKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQpAQCAtMzYxLDYgKzM2MSwxMCBAQCB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyTGF5ZXI+IG5ld0xheWVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyTGF5ZXI+KCk7CiAgICAgbmV3TGF5ZXItPnNldElEKGlk
KTsKICAgICBuZXdMYXllci0+c2V0U2Nyb2xsQ2xpZW50KHRoaXMpOworCisjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xheWVyUG9zaXRpb25Mb2Nr
KTsKKyNlbmRpZgogICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGOjptb3ZlKG5ld0xheWVyKSk7CiB9
CiAKQEAgLTM3Miw3ICszNzYsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRl
bGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGEKIAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklEKQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyTGF5ZXI+IGxheWVy
ID0gbV9sYXllcnMudGFrZShsYXllcklEKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1h
cHBlckxheWVyPiBsYXllcjsKKyAgICB7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sYXllclBvc2l0aW9uTG9jayk7CisjZW5kaWYKKyAg
ICAgICAgbGF5ZXIgPSBtX2xheWVycy50YWtlKGxheWVySUQpOworICAgIH0KICAgICBBU1NFUlQo
bGF5ZXIpOwogCiAgICAgbV9iYWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7CkBAIC02
OTYsNiArNzA2LDI0IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRTY3Jv
bGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6CiAgICAgfSk7CiB9CiAKKyNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnNldExheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYgcCkK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xheWVyUG9zaXRpb25Mb2NrKTsKKyAgICBpZiAo
VGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKSkKKyAgICAgICAg
bGF5ZXItPnNldFBvc2l0aW9uKHApOworfQorCitGbG9hdFBvaW50IENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6bGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklEKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbGF5ZXJQb3NpdGlvbkxvY2spOworICAgIFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0
dXJuIEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gbGF5ZXItPnBvc2l0aW9uKCk7Cit9CisjZW5k
aWYKKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlQmFja2luZ1N0b3Jlcygp
CiB7CiAgICAgaWYgKG1fY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuaAppbmRleCA2OGFhYmZlNDBjNGRmODE5N2QxNmZiZDYyYjhhZmZhNWU5YzI3OTYwLi5kYWJi
M2E4NjcyNGNjMTVkMWY5Yzk5ZWRiMzUzZDQxMjc3NGE3M2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtNzUsNiArNzUsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoc3RkOjpmdW5jdGlvbjx2b2lkKCk+
KTsKIAorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdm9pZCBzZXRMYXllclBvc2l0
aW9uKHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IGxheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCk7CisjZW5k
aWYKKwogICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogZmluZFNjcm9sbGFibGVDb250
ZW50c0xheWVyQXQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIGNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBvZmZzZXQpOwpAQCAtMTU5LDYgKzE2NCw3IEBAIHByaXZhdGU6CiAgICAgLy8gUmVu
ZGVyIHF1ZXVlIGNhbiBiZSBhY2Nlc3NlZCBvbnkgZnJvbSBtYWluIHRocmVhZCBvciB1cGRhdGVQ
YWludE5vZGUgY2FsbCBzdGFjayEKICAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBt
X3JlbmRlclF1ZXVlOwogICAgIExvY2sgbV9yZW5kZXJRdWV1ZU11dGV4OworICAgIExvY2sgbV9s
YXllclBvc2l0aW9uTG9jazsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBv
c2l0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhy
ZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKaW5kZXggYzZkZDA0ODk3Njhm
NjkzYWZmYzJkMzMxM2MyZjhkMDY5MTIzN2Q3Mi4uODNiYWFkNmM3MTBhMmE3OTFjMjQ1NGFiNDc1
OGNmMDBkOTFlZGVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21w
b3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKQEAgLTIxMyw2ICsyMTMsMTkgQEAgdm9pZCBU
aHJlYWRlZENvbXBvc2l0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBj
b25zdCBJbnRTaXplJiBvZmYKICAgICBtX2NsaWVudC0+Y29tbWl0U2Nyb2xsT2Zmc2V0KGxheWVy
SUQsIG9mZnNldCk7CiB9CiAKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQordm9pZCBUaHJl
YWRlZENvbXBvc2l0b3I6OnNldExheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCwgY29uc3Qg
RmxvYXRQb2ludCYgcCkKK3sKKyAgICBtX3NjZW5lLT5zZXRMYXllclBvc2l0aW9uKGxheWVySUQs
IHApOworICAgIHNldE5lZWRzRGlzcGxheSgpOworfQorCitGbG9hdFBvaW50IFRocmVhZGVkQ29t
cG9zaXRvcjo6bGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklEKQoreworICAgIHJldHVybiBt
X3NjZW5lLT5sYXllclBvc2l0aW9uKGxheWVySUQpOworfQorI2VuZGlmCisKIGJvb2wgVGhyZWFk
ZWRDb21wb3NpdG9yOjplbnN1cmVHTENvbnRleHQoKQogewogICAgIGlmICghZ2xDb250ZXh0KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90
aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21w
b3NpdG9yLmgKaW5kZXggNGE3ODlmZDE0M2Y0ODFiM2VjY2QxMjE5OWU1NDUyNjNjNzNmODA1My4u
MTI4NmEzMWZkMzYzOTY1NGRmYzM4ZWI3Mjc5NTQzMTA1ZTliNjAwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9y
L1RocmVhZGVkQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaApAQCAt
NzcsNiArNzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
IAorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9u
KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IGxheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBUaHJlYWRlZENvbXBvc2l0b3IoQ2xpZW50Kik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYjIxOTBjMmY5MzViMzYzZjk3
Y2EzOGNjMWE1MTBlYzkyMzgyNzY3Zi4uMzVkNGU5ZjRkZmEzNTE4NDI0YTE1MjhiZWVjZWNiNDYz
MjUzYmVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAg
LTEyMyw3ICsxMjMsNyBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKICNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5Lmgi
CiAjZW5kaWYKIApAQCAtNzc4LDcgKzc3OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFs
aXplV2ViUGFnZSgpCiAgICAgbV9kcmF3aW5nQXJlYSA9IG1fcGFnZUNsaWVudC5jcmVhdGVEcmF3
aW5nQXJlYVByb3h5KCk7CiAgICAgQVNTRVJUKG1fZHJhd2luZ0FyZWEpOwogCi0jaWYgRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAobV9kcmF3aW5nQXJlYS0+dHlwZSgpID09IERyYXdpbmdBcmVhVHlw
ZVJlbW90ZUxheWVyVHJlZSkgewogICAgICAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkg
PSBzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk+KCp0aGlz
KTsKICNpZiBQTEFURk9STShJT1MpCkBAIC0xNzU1LDcgKzE3NTUsNyBAQCBzdGF0aWMgV2ViV2hl
ZWxFdmVudCBjb2FsZXNjZWRXaGVlbEV2ZW50KERlcXVlPE5hdGl2ZVdlYldoZWVsRXZlbnQ+JiBx
dWV1ZSwgVmVjdAogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBO
YXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKIHsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlm
IChtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkgJiYgbV9zY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5LT5oYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtKGV2ZW50KSkpCiAgICAgICAgIHJldHVybjsK
ICNlbmRpZgpAQCAtMTg4NSw3ICsxODg1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRQbHVn
aW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgdWludDMyX3QgcHJvY2Vzc1R5cGUsIGNvbnMKIAog
Ym9vbCBXZWJQYWdlUHJveHk6OnNob3VsZFN0YXJ0VHJhY2tpbmdUb3VjaEV2ZW50cyhjb25zdCBX
ZWJUb3VjaEV2ZW50JiB0b3VjaFN0YXJ0RXZlbnQpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShJT1Mp
CiAgICAgZm9yIChhdXRvJiB0b3VjaFBvaW50IDogdG91Y2hTdGFydEV2ZW50LnRvdWNoUG9pbnRz
KCkpIHsKICAgICAgICAgaWYgKG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS0+aXNQb2ludElu
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24odG91Y2hQb2ludC5sb2NhdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmlu
ZGV4IDc4MzRkMzk4ZDZkNjc2OTg5N2M4ZDY3Y2RjYzlmZTFkZTU0MGViNjEuLjM3Y2JiYjJkODM4
NzkwNzgwMjg3ZTdiZjAwNDFhZTUxMGUzMGM4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTI5Miw3ICsyOTIsNyBAQCBwdWJsaWM6CiAKICAgICBXZWJzaXRl
RGF0YVN0b3JlJiB3ZWJzaXRlRGF0YVN0b3JlKCkgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3Jl
OyB9CiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkuZ2V0KCk7IH0KICNlbmRpZgogCkBAIC0xNDg2LDcgKzE0ODYs
NyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZhaWxpbmdQcm92aXNpb25hbExvYWRVUkw7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gbV9kcmF3aW5nQXJlYTsKLSNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFBMQVRGT1JNKENPQ09BKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5PiBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk7CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDFjNmU2OTU0Yzk2YmFhMDYzY2E3NWVjNTY1YjEwMWYx
ZWQxMWFhMjAuLjhjZTMzMmMyNWIyNjBhNjEwY2QyZmUwZGQ3NWI0NmJiOTRjZDUxMTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTgwLDcgKzgwLDcgQEAKICNpbmNsdWRlICJXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQ
SElDU19USFJFQURFRCkKICNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgog
I2VuZGlmCiAKQEAgLTg2NSw4ICs4NjUsMTAgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmxheWVy
VHJlZVN0YXRlSXNGcm96ZW4oKSBjb25zdAogUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRv
cj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKiBwYWdl
KSBjb25zdAogewogICAgIEFTU0VSVChtX3BhZ2UtPmNvcmVQYWdlKCkgPT0gcGFnZSk7CisjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+dHlwZSgpID09
IERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSkKICAgICAgICAgcmV0dXJuIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUobV9wYWdlKTsKKyNlbmRpZgogCiAgICAgcmV0dXJu
IDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjc0MTA1OWQzNzMxOGQwMDc0
MjU3N2JlNGI0OWUyOGRiZGY0MWEwOS4uOTQ5Zjg2MDlmM2YwNWNjOTQzNDZmYTIzZDNkZTYzZmJi
ZmQ2MDhhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMjk2LDYgKzI5NiwxOCBA
QCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciosCiB7CiB9CiAKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQordm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJQb3Np
dGlvbih1aW50MzJfdCBsYXllcklELCBjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG1fY29t
cG9zaXRvci0+c2V0TGF5ZXJQb3NpdGlvbihsYXllcklELCBwKTsKK30KKworRmxvYXRQb2ludCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJQb3NpdGlvbih1aW50MzJfdCBs
YXllcklEKQoreworICAgIHJldHVybiBtX2NvbXBvc2l0b3ItPmxheWVyUG9zaXRpb24obGF5ZXJJ
RCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCA3N2UyZTEy
MDUzMmI3ZmQwMDIxMDhkNzM5ZmZjYjFiMTQ5MTlkZDU3Li4yZmU1NjNhZDAxZTRhYjQwYjlhZDE5
ZjBhNTA3NTE2YzlhNTc4ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTEyNiw2ICsx
MjYsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBwYWludExheWVyQ29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSBv
dmVycmlkZTsKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UG9pbnQgbGF5ZXJQb3Np
dGlvbih1aW50MzJfdCBsYXllcklEKSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgTGF5ZXJUcmVl
Q29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CiAgICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRB
c3luY0NhbGxiYWNrSUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmgKaW5kZXggNTJhMzMzNDEyMWQ4Yjg1NGI1YTU2NmVhYzZjNzQw
YzI2MTQwZmMwOC4uNDIzZjAwMTk5NWI3YzQ4OTkzNzM0Yjg2MGMxMzVmNjVlNGZlY2Y0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuaApAQCAtNzUsNiArNzUsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eU5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhib29sJikgb3ZlcnJpZGU7CiAjZW5k
aWYKIAorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNBc3luY1Njcm9sbGluZygpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgor
CiAgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9u
ZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiOTYz
OThlZDM1YzNiMDc4MjRmMjRjOWM1MGU4ZjMyM2ZhMTE0MGFkLi4wZjgzYmFlN2Q4MmQwZTVlZTQ5
MTE3MWZiMmY3OGI4YWJjYWE3NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMTE0LDYgKzExNCw3IEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2Vi
V2hlZWxFdmVudCYgd2hlZWxFdmVuCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Njcm9sbGluZ1RyZWVzTXV0ZXgpOwogICAgIGlmIChSZWZQdHI8
VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiBzY3JvbGxpbmdUcmVlID0gbV9zY3JvbGxpbmdUcmVlcy5n
ZXQocGFnZUlEKSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAvLyBGSVhNRTogSXQn
cyBwcmV0dHkgaG9ycmlibGUgdGhhdCB3ZSdyZSB1cGRhdGluZyB0aGUgYmFjay9mb3J3YXJkIHN0
YXRlIGhlcmUuCiAgICAgICAgIC8vIFdlYkNvcmUgc2hvdWxkIGFsd2F5cyBrbm93IHRoZSBjdXJy
ZW50IHN0YXRlIGFuZCBrbm93IHdoZW4gaXQgY2hhbmdlcyBzbyB0aGUKICAgICAgICAgLy8gc2Ny
b2xsaW5nIHRyZWUgY2FuIGJlIG5vdGlmaWVkLgpAQCAtMTIzLDYgKzEyNCw3IEBAIHZvaWQgRXZl
bnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxF
dmVudCYgd2hlZWxFdmVuCiAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nVHJlZS0+c2V0Q2FuUnVi
YmVyQmFuZFN0YXRlKGNhblJ1YmJlckJhbmRBdExlZnQsIGNhblJ1YmJlckJhbmRBdFJpZ2h0LCBj
YW5SdWJiZXJCYW5kQXRUb3AsIGNhblJ1YmJlckJhbmRBdEJvdHRvbSk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgU2Nyb2xsaW5nVHJlZTo6RXZlbnRSZXN1
bHQgcmVzdWx0ID0gc2Nyb2xsaW5nVHJlZS0+dHJ5VG9IYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3Jt
V2hlZWxFdmVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtl
IGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggZDczYTVjMzlkN2YwODE0M2Fj
YzE4ODk2MGQzMmY2ODY5NmZjOWIyZi4uNGQ5ZjFjYWIwMmVlMjIwZDA1ZTA2ZmNmNmViYjAwMDdh
MjdkNmYwMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTEzOCw2ICsxMzgsNyBAQCBXRUJLSVRf
T1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBQVUJMSUMgT0ZGKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFXzNEX1RSQU5TRk9STVMgUFJJ
VkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFU1NJ
QklMSVRZIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfQUxMSU5PTkVfQlVJTEQgUFJJVkFURSBPRkYpCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfQVNZTkNfU0NST0xMSU5HIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCBQUklWQVRFIE9G
RikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9CQVRURVJZX1NUQVRV
UyBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9D
QU5WQVNfUEFUSCBQUklWQVRFIE9GRikKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxv
ZwppbmRleCAyN2IzMTA2MzE0MjFjOTBmMTE3OTFhZDFlNjhlNWZmMDY4YzJlNjA5Li4wNzM5OTVk
MWY5YWZjYWFmYTY3MDUwOWQ3NWM0MjY2NzNhMzU4NTA2IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cK
KysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMTItMTUgIENoYW5nU2VvayBP
aCAgPGNoYW5nc2Vvay5vaEBjb2xsYWJvcmEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxlbWVu
dCBBU1lOQ19TQ1JPTExJTkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MTQzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6IEFkZCBhIHByaXZhdGUg
ZmxhZywgRU5BQkxFX0FTWU5DX1NDUk9MTElORy4KKwogMjAxNS0xMi0xMCAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBTdXBwb3J0IGJ1aWxkaW5n
IHVuZGVyIEN5Z3dpbiBvciBuYXRpdmUgUGVybAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270638</attachid>
            <date>2016-02-04 00:51:05 -0800</date>
            <delta_ts>2016-02-04 01:22:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151436-20160204175040.patch</filename>
            <type>text/plain</type>
            <size>116429</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1OTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRlYzg1N2FmOTY4OGYx
OWIzMGIzNTk5NzZiMTMwMDBmZDNhYzE5NC4uNzExODA4MWUzNzViYzc4MGJhYjg3ZTI1Y2IwMzBk
ZjgxYzQzZjUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxNi0wMi0wNCAgQ2hh
bmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9oQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10g
SW1wbGVtZW50IEFTWU5DX1NDUk9MTElORworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYnJpbmdzIHRoZSBhc3luY2hyb25vdXMgc2Ny
b2xsaW5nIGZlYXR1cmUgdG8gdGhlIGd0ayBwb3J0LiBCYXNpYyBpZGVhIGlzIHRvIGhhbmRsZQor
ICAgICAgICBzY3JvbGwgZXZlbnRzIGluIGEgc2VwYXJhdGUgdGhyZWFkIGNhbGxlZCAnc2Nyb2xs
aW5nIHRocmVhZCcsIG5vdCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIFRoZSBzY3JvbGwgZXZl
bnRzIGFyZSBwcm9jZXNzZWQgYW5kIG5ldyBwb3NpdGlvbiBvZiByZWxldmFudCBsYXllcnMgaXMg
Y2FsY3VsYXRlZCBhbmQgdGhlbiBtb3ZlCisgICAgICAgIHBsYXRmb3JtTGF5ZXJzIGFjY29yZGlu
ZyB0byB0aGUgcG9zdGlvbnMgaW4gdGhlIHNjcm9sbGluZyB0aHJlYWQuIFZpc2libGUgcmVjdCBp
cyB1cGRhdGVkCisgICAgICAgIGFmdGVyIHRoYXQgaW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gc3lu
Y2hyb25pemluZyB0aGUgY2FsY3VsYXRlZCBwb3NpdGlvbiB3aXRoIEdyYXBoaWNzTGF5ZXIncyBw
b3NpdGlvbi4gCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBmaXhl
ZCwgc3RpY2t5IGFuZCBvdmVyZmxvdyBlbGVtZW50IHlldC4gVGhleSB3aWxsIGJlIGNvdmVyZWQg
YnkgZm9sbG93aW5nCisgICAgICAgIHBhdGNoZXMuIEFsc28sIHRoZSBmZWF0dXJlIGlzIGltcGxl
bWVudGVkIGJhc2VkIG9uIHRoZSB0aHJlYWRlZCBjb21wb3NpdG9yLiBPdGhlciBjYXNlcyB3aWxs
IGJlIGhhbmRsZWQgbGF0ZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGU6OlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAq
IHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbGluZ1N0YXRlTm9kZSk6CisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdTdGF0ZU5vZGU6OmNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpzZXRDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKToKKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVGhyZWFkOjp+U2Nyb2xsaW5nVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQpOgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZTo6c2hvdWxkSGFuZGxlV2hlZWxFdmVudFN5bmNocm9ub3VzbHkpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZTo6c2V0T3JDbGVhckxhdGNoZWROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUp
OgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmN1cnJlbnRTbmFwUG9pbnRJ
bmRpY2VzRGlkQ2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdy
YXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdy
YXBoaWNzOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFw
aGljczo6fkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBo
aWNzOjpwYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFw
aGljczo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQp
OgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVk
R3JhcGhpY3M6OmNvbW1pdFRyZWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6dXBkYXRlVGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3Mv
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuaDogQWRkZWQuCisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckd0azo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JHdGspOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3JHdGs6On5TY3JvbGxpbmdDb29yZGluYXRvckd0ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvckd0azo6cGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdDb29yZGluYXRvckd0azo6Y29tbWl0VHJlZVN0YXRlSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OnNjaGVkdWxlVHJlZVN0
YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpj
b21taXRUcmVlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JH
dGs6OnVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuaDogQWRkZWQuCisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZTo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFycyk6CisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RocmVhZEd0ay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdSdW5Mb29wOjpTY3JvbGxpbmdSdW5Mb29wKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1J1bkxvb3A6OmNhbGxPblNjcm9sbGluZ1J1bkxvb3ApOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nUnVuTG9vcDo6cnVuTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUaHJlYWQ6On5TY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVGhyZWFkOjppbml0aWFsaXplUnVuTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUaHJlYWQ6OnRlcm1pbmF0ZVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsv
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVGaXhlZE5vZGU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6flNjcm9sbGluZ1RyZWVGaXhlZE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlTGF5
ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Nj
cm9sbGluZ1RyZWVGaXhlZE5vZGUuaDogQWRkZWQuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcv
Z3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6On5TY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVHdGs6OmxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVCZWZvcmVD
aGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrOjp1cGRhdGVBZnRlckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6aXNBbHJlYWR5UGlu
bmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0U2Nyb2xs
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUd0azo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpz
ZXRTY3JvbGxMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZUxheWVyc0FmdGVyVmlld3BvcnRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6bWlu
aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGs6Om1heGltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVNYWluRnJhbWVQ
aW5TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrOjpsb2dFeHBvc2VkVW5maWxsZWRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1Ro
cmVhZGVkU2Nyb2xsaW5nTW9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaDogQWRkZWQuCisgICAgICAgICogcGFnZS9z
Y3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFNjcm9s
bGluZ1RyZWVHdGs6OmNyZWF0ZSk6CisgICAgICAgIChTY3JvbGxpbmdUcmVlR3RrOjpTY3JvbGxp
bmdUcmVlR3RrKToKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVHdGs6OmNyZWF0ZVNjcm9sbGluZ1Ry
ZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUd0ay5o
OiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6
OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVTdGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFu
Y2VzdG9yQ2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpwb3NpdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0
aW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6bGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6Y29vcmRpbmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
Y3JvbGxDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250
cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRy
b2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxD
b250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlckNs
aWVudDo6flNjcm9sbENvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Q29udHJvbGxlckNsaWVudDo6ZGVmZXJUZXN0c0ZvclJlYXNvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24pOgor
CiAyMDE2LTAxLTMxICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgcmVzaXplIGV2ZW50IGZvciBIVE1MTWVkaWFFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGQ4
NmQ0ZTkxY2ExOWZmNTk5NGUwMTgyMmM0MmFlMmE0YzE4NDA4Yy4uMmU4YWVjNTZiYzVlODU4ZWM2
ZGUwZDc2ODNhNTA2ZTZiM2QxMWY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE2
LTAyLTA0ICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAg
ICAgICBbR1RLXSBJbXBsZW1lbnQgQVNZTkNfU0NST0xMSU5HCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE0MzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IG9mIGNoYW5nZXMgaW4gV2ViS2l0MiBs
YXllciBpcyByZWxhdGVkIHRvIGFkZGluZyBhbiBpbnRlcmZhY2UgdG8gcmVhY2ggVGV4dHVyZU1h
cHBlckxheWVyCisgICAgICAgIGZyb20gQ29tcG9zaXRpbmdDb29yZGluYXRvci4gV2l0aCB0aGlz
IGludGVyZmFjZSwgd2UgY2FuIGdldC9zZXQgcG9zdGlvbiBmcm9tL3RvIFRleHR1cmVNYXBwZXJM
YXllci4KKworICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6bGF5ZXJQb3NpdGlvbik6CisgICAgICAgICogU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg6CisgICAgICAg
ICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVk
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29tcG9zaXRvcjo6c2V0
TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29tcG9zaXRvcjo6bGF5
ZXJQb3NpdGlvbik6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFk
ZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmluaXRpYWxp
emVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGRTdGFydFRyYWNraW5n
VG91Y2hFdmVudHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlU2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyUG9zaXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJQb3NpdGlvbik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6
c3VwcG9ydHNBc3luY1Njcm9sbGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2
ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6d2hl
ZWxFdmVudCk6CisKIDIwMTYtMDEtMzEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEdldCByaWQgb2YgbW9zdCBjYWxscyB0byBTdHJpbmc6OnVwcGVyOyBtb3N0bHkg
cmVwbGFjZSB0aGVtIHdpdGggY29udmVydFRvQVNDSUlVcHBlcmNhc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggMjQ5N2JlZGY0MzIwMDE4MWM5MjczNjQwNTViNmJmMTUzMjY4MDZhNy4uZDBlZTk1
YjQwMDZiNmJlNzc3YjlhNDI4Zjc1NTcyZWM0OTIwOTQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTIwNjksNiArMjA2OSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5UmVzcG9uc2VIZWFkZXJzLmNwcAogCisgICAgcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvci5jcHAKICAgICBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNl
dHMuY3BwCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHAKICAgICBw
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UKaW5kZXggMzRjY2Q1MzQ3NzgzZGZiODc1MWI0ZDMxZTNhOGYwMGYwYWM3ZTM1MC4uMTI5
ZmFmM2M2YTQ0MzE5MzFmMzVjNmE4MzNmMTczNmIyZGM1ZGFmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKQEAgLTI1LDYgKzI1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvYXRrIgogICAgICIk
e1dFQkNPUkVfRElSfS9lZGl0aW5nL2F0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9ndGsi
CisgICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nL2d0ayIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dlb2Ns
dWUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ayIKQEAgLTIzMiw2ICsyMzMsMTQg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKICAgICBwYWdlL2d0ay9E
cmFnQ29udHJvbGxlckd0ay5jcHAKICAgICBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCiAK
KyAgICBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwCisgICAg
cGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNw
cAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUaHJlYWRHdGsuY3BwCisgICAgcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwCisgICAgcGFnZS9zY3Jv
bGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwCisgICAgcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuY3BwCisgICAgcGFnZS9zY3JvbGxpbmcv
Z3RrL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAtMjU2LDYgKzI2NSw3IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91
c2VFdmVudEd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCiAg
ICAgcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKKyAgICBwbGF0Zm9ybS9n
dGsvU2Nyb2xsQ29udHJvbGxlci5jcHAKICAgICBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9X
aWRnZXRHdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDAyOTFhNGZkMDY5MWYwYjg4
OTc3ZjlmZTFiMTY5ODdhNTMyNjRmZGYuLjc3ZmIzYTM2ZDAzYjY4ZTk1NmQ3YTAxNzk1ZWFkMTdh
NzIyOTJkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC00NCw2ICs0NCwxMCBAQAogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJp
Z2dlci5oIgogCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcihQYWdl
KiBwYWdlKQpAQCAtNzEsMTAgKzc1LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRTdGF0ZVNj
cm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpCiAgICAg
ICAgIGZvciAoYXV0byYgb2Zmc2V0IDogKnNuYXBPZmZzZXRzKQogICAgICAgICAgICAgc25hcE9m
ZnNldHNBc0Zsb2F0LnVuY2hlY2tlZEFwcGVuZChyb3VuZFRvRGV2aWNlUGl4ZWwob2Zmc2V0LCBk
ZXZpY2VTY2FsZUZhY3RvciwgZmFsc2UpKTsKICAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQogICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkKICAg
ICAgICAgbm9kZS5zZXRIb3Jpem9udGFsU25hcE9mZnNldHMoc25hcE9mZnNldHNBc0Zsb2F0KTsK
ICAgICBlbHNlCiAgICAgICAgIG5vZGUuc2V0VmVydGljYWxTbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0
c0FzRmxvYXQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXhpcyk7CisgICAgVU5VU0VEX1BB
UkFNKG5vZGUpOworI2VuZGlmCiB9CiAKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25EaXJ0eSgpCkBAIC00NTEsNiArNDYxLDkgQEAgdm9p
ZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVGcmFtZVNjcm9sbGluZ05vZGUoU2Ny
b2xsaW5nTm9kZUlEIG5vZGVJRCwKICAgICBub2RlLT5zZXRJbnNldENsaXBMYXllcihpbnNldENs
aXBMYXllcik7CiAgICAgbm9kZS0+c2V0U2Nyb2xsZWRDb250ZW50c0xheWVyKHNjcm9sbGVkQ29u
dGVudHNMYXllcik7CiAgICAgbm9kZS0+c2V0Q291bnRlclNjcm9sbGluZ0xheWVyKGNvdW50ZXJT
Y3JvbGxpbmdMYXllcik7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIG5vZGUt
PnNldENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoZG93bmNhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyPihsYXllciktPmNvb3JkaW5hdG9yKCkpOworI2VuZGlmCiAKICAgICBpZiAoc2Nyb2xsaW5n
R2VvbWV0cnkpIHsKICAgICAgICAgbm9kZS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbGluZ0dlb21l
dHJ5LT5zY3JvbGxPcmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDUzYjk4YzE0NWEzNzI5ZWM4ZDI1
MWZjZTI3ZWI2NmU0Zjc5N2IwMGEuLjY1NTU1YjVmZjI1MDZmOTBmMmFhZjZlZGI3ZTRmNjhmZGNk
MzJjMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTQ0LDcgKzQ0LDkgQEAKICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBQTEFURk9STShHVEspICYmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyNpbmNs
dWRlICJTY3JvbGxpbmdDb29yZGluYXRvckd0ay5oIgorI2VsaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGlj
cy5oIgogI2VuZGlmCiAKQEAgLTU4LDcgKzYwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lm
ICFQTEFURk9STShDT0NPQSkKIFJlZjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQogewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyNpZiBQTEFURk9STShHVEspICYmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTY3JvbGxpbmdDb29yZGluYXRvckd0ayhwYWdlKSk7CisjZWxpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JD
b29yZGluYXRlZEdyYXBoaWNzKHBhZ2UpKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZS5jcHAKaW5kZXggODUwMzkzNmExYTUxYTU1NzI1ZTVkYzIzM2IxZjdjZWU2NjRm
MzQ3ZC4uMDVkMDU3OTdhMWZhMWVlYjlmZWYwNmMxNGYyNWRiNTM0NGRjODJkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9s
bGluZ05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcApAQCAtNDgsNiArNDgsOSBAQCBTY3JvbGxpbmdT
dGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUo
Y29uc3QgU2Nyb2xsaQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAsIG1fdmVydGljYWxTY3JvbGxi
YXJQYWludGVyKHN0YXRlTm9kZS52ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIoKSkKICAgICAsIG1f
aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIoc3RhdGVOb2RlLmhvcml6b250YWxTY3JvbGxiYXJQ
YWludGVyKCkpCisjZWxpZiBQTEFURk9STShHVEspCisgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsYmFy
KHN0YXRlTm9kZS52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyKHN0YXRlTm9kZS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCiAjZW5kaWYKICAgICAsIG1fbm9u
RmFzdFNjcm9sbGFibGVSZWdpb24oc3RhdGVOb2RlLm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkp
CiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHN0YXRlTm9kZS5yZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvbigpKQpAQCAtMjE1LDcgKzIxOCw3IEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVGcmFt
ZVNjcm9sbGluZ05vZGU6OnNldEZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoYm9v
CiAgICAgc2V0UHJvcGVydHlDaGFuZ2VkKEZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJh
bWUpOwogfQogCi0jaWYgIVBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oR1RLKQogdm9pZCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0U2Ny
b2xsYmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFycyhTY3JvbGxiYXIqLCBTY3JvbGxiYXIqKQogewog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVGcmFtZVNjcm9sbGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgKaW5kZXggZDU3ZDFmZDlmNzBhODZjOTJh
OTBhZTMxYzc1YTc5NTJmY2Q2OWNhYS4uM2EyYWMzOTFmM2Y2MjI2YmQ0NjcwYmRkNDlkOTAzN2M1
ZDQyNjg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oCkBAIC0xMTYsNiArMTE2
LDkgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBTY3JvbGxiYXJQYWludGVyIHZl
cnRpY2FsU2Nyb2xsYmFyUGFpbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxi
YXJQYWludGVyLmdldCgpOyB9CiAgICAgU2Nyb2xsYmFyUGFpbnRlciBob3Jpem9udGFsU2Nyb2xs
YmFyUGFpbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIu
Z2V0KCk7IH0KKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsgfQorICAgIFNjcm9s
bGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNj
cm9sbGJhcjsgfQogI2VuZGlmCiAgICAgdm9pZCBzZXRTY3JvbGxiYXJQYWludGVyc0Zyb21TY3Jv
bGxiYXJzKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIsIFNjcm9sbGJhciogaG9yaXpvbnRh
bFNjcm9sbGJhcik7CiAKQEAgLTEzNSw2ICsxMzgsOSBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlcj4gbV92ZXJ0aWNhbFNjcm9sbGJh
clBhaW50ZXI7CiAgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXI+IG1faG9yaXpvbnRhbFNj
cm9sbGJhclBhaW50ZXI7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgU2Nyb2xsYmFyKiBtX3Zl
cnRpY2FsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwog
I2VuZGlmCiAKICAgICBSZWdpb24gbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwCmlu
ZGV4IGQzZTRmNzZmYzA1YjhjNzBhYTYwMTVjNWI4ZDUyNGQ5MjVjMTQyMTUuLjNhYzg1NWViZTUx
OTFiODYyMDU3NzdkNDFmODU1YWZhNzBkNzEzYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcApAQCAtNDIsNiArNDIsOSBA
QCBTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbGluZ1N0YXRlTm9kZShTY3JvbGxpbmdOb2RlVHlw
ZSBub2RlVHlwZSwgU2Nyb2xsaW5nU3RhdAogICAgICwgbV9jaGFuZ2VkUHJvcGVydGllcygwKQog
ICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUoc2Nyb2xsaW5nU3RhdGVUcmVlKQogICAgICwgbV9w
YXJlbnQobnVsbHB0cikKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgLCBtX2Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IobnVsbHB0cikKKyNlbmRpZgogewogfQogCkBAIC01Myw2ICs1
Niw5IEBAIFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVOb2RlKGNvbnN0IFNjcm9s
bGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlLCBTY3JvCiAgICAgLCBtX2NoYW5nZWRQcm9wZXJ0aWVz
KHN0YXRlTm9kZS5jaGFuZ2VkUHJvcGVydGllcygpKQogICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUoYWRvcHRpdmVUcmVlKQogICAgICwgbV9wYXJlbnQobnVsbHB0cikKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisgICAgLCBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3Ioc3RhdGVOb2Rl
LmNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKSkKKyNlbmRpZgogewogICAgIGlmIChoYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsTGF5ZXIpKQogICAgICAgICBzZXRMYXllcihzdGF0ZU5vZGUubGF5ZXIo
KS50b1JlcHJlc2VudGF0aW9uKGFkb3B0aXZlVHJlZS5wcmVmZXJyZWRMYXllclJlcHJlc2VudGF0
aW9uKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVOb2RlLmgKaW5kZXggYWNiNjAxYzllODg2ZDZmZmMyYzA2ODFhMGQxMWJiMjk2ZGU1MmYy
YS4uOGViZTM1MjJiZDBmNDdhOWIzZjNlMGUwOWNkYmFkMjlhM2YwMGIyZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgKQEAgLTQw
LDYgKzQwLDEwIEBAIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBTY3JvbGxpbmdTdGF0ZVRy
ZWU7CiBjbGFzcyBUZXh0U3RyZWFtOwogCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50OworI2VuZGlmCisKIC8vIFVzZWQg
dG8gYWxsb3cgU2Nyb2xsaW5nU3RhdGVOb2RlcyB0byByZWZlciB0byBsYXllcnMgaW4gdmFyaW91
cyBjb250ZXh0czoKIC8vIGEpIEFzeW5jIHNjcm9sbGluZywgbWFpbiB0aHJlYWQ6IFNjcm9sbGlu
Z1N0YXRlTm9kZSBob2xkcyBvbnRvIGEgR3JhcGhpY3NMYXllciwgYW5kIHVzZXMgbV9sYXllcklE
CiAvLyAgICB0byBkZXRlY3Qgd2hldGhlciB0aGF0IEdyYXBoaWNzTGF5ZXIncyB1bmRlcmx5aW5n
IFBsYXRmb3JtTGF5ZXIgY2hhbmdlZC4KQEAgLTIzNCw2ICsyMzgsMTEgQEAgcHVibGljOgogCiAg
ICAgU3RyaW5nIHNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dCgpIGNvbnN0OwogCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCog
Y29tcG9zaXRpbmdDb29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRpbmdDb29y
ZGluYXRvcjsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdDb29yZGluYXRvcihDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNvbXBvc2l0aW5nQ29vcmRpbmF0b3IpIHsgbV9jb21wb3Np
dGluZ0Nvb3JkaW5hdG9yID0gY29tcG9zaXRpbmdDb29yZGluYXRvcjsgfQorI2VuZGlmCisKIHBy
b3RlY3RlZDoKICAgICBTY3JvbGxpbmdTdGF0ZU5vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2Rl
JiwgU2Nyb2xsaW5nU3RhdGVUcmVlJik7CiAKQEAgLTI1Miw2ICsyNjEsMTAgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZlB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+Pj4g
bV9jaGlsZHJlbjsKIAogICAgIExheWVyUmVwcmVzZW50YXRpb24gbV9sYXllcjsKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGll
bnQqIG1fY29tcG9zaXRpbmdDb29yZGluYXRvcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RocmVhZC5jcHAKaW5kZXggNDY2OWExOTkyODdhNmNhZjBhZWJjNmJiYmE1YTdlZWU1YzVlYmQ2
Yi4uODliNTZlNmY0MzBjM2EzMjA1MDAxYzA5NDYwYzAzNDA1NzY5MDUwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCkBAIC0zNCwx
NSArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRGT1JNKEdUSykK
IFNjcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKCkKICAgICA6IG1fdGhyZWFkSWRlbnRp
ZmllcigwKQogewogfQogCi1ib29sIFNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKCkK
K1Njcm9sbGluZ1RocmVhZDo6flNjcm9sbGluZ1RocmVhZCgpCiB7Ci0gICAgYXV0byB0aHJlYWRJ
ZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZp
ZXI7Ci0gICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRocmVhZCgpID09IHRo
cmVhZElkZW50aWZpZXI7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQpAQCAtNTgsNiArNTcsMjcgQEAgdm9pZCBTY3Jv
bGxpbmdUaHJlYWQ6OmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiAg
ICAgc2Nyb2xsaW5nVGhyZWFkLndha2VVcFJ1bkxvb3AoKTsKIH0KIAordm9pZCBTY3JvbGxpbmdU
aHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25zRnJvbVNjcm9sbGluZ1RocmVhZCgpCit7CisgICAgQVNT
RVJUKGlzQ3VycmVudFRocmVhZCgpKTsKKworICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+PiBmdW5jdGlvbnM7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX2Z1bmN0aW9uc011dGV4KTsKKyAgICAgICAgZnVuY3Rpb25zID0gV1RGTW92ZShtX2Z1bmN0
aW9ucyk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZ1bmN0aW9ucykKKyAg
ICAgICAgZnVuY3Rpb24oKTsKK30KKyNlbmRpZgorCitib29sIFNjcm9sbGluZ1RocmVhZDo6aXND
dXJyZW50VGhyZWFkKCkKK3sKKyAgICBhdXRvIHRocmVhZElkZW50aWZpZXIgPSBTY3JvbGxpbmdU
aHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkSWRlbnRpZmllcjsKKyAgICByZXR1cm4gdGhyZWFk
SWRlbnRpZmllciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gdGhyZWFkSWRlbnRpZmllcjsKK30KKwog
dm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmllcihzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGZ1bmN0aW9uKQogewogICAgIGRpc3BhdGNoKFtmdW5jdGlvbl0oKSBtdXRhYmxlIHsKQEAg
LTg1LDYgKzEwNSw4IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRl
ZCgpCiAgICAgICAgIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBtX2luaXRpYWxpemVS
dW5Mb29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc117IHJldHVybiBtX3RocmVh
ZFJ1bkxvb3A7IH0pOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBtX2luaXRpYWxpemVS
dW5Mb29wQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKICNlbmRpZgogICAgIH0KIH0KQEAg
LTEwMCwyMSArMTIyLDYgQEAgdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OnRocmVhZEJvZHkoKQogICAg
IGluaXRpYWxpemVSdW5Mb29wKCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRj
aEZ1bmN0aW9uc0Zyb21TY3JvbGxpbmdUaHJlYWQoKQotewotICAgIEFTU0VSVChpc0N1cnJlbnRU
aHJlYWQoKSk7Ci0KLSAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gZnVuY3Rpb25z
OwotICAgIAotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9mdW5j
dGlvbnNNdXRleCk7Ci0gICAgICAgIGZ1bmN0aW9ucyA9IFdURk1vdmUobV9mdW5jdGlvbnMpOwot
ICAgIH0KLQotICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBmdW5jdGlvbnMpCi0gICAgICAgIGZ1
bmN0aW9uKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RocmVhZC5oCmluZGV4IGE3MDljY2Q4ZTc4NjM2MjlkZThhMjgzYzQ2M2NhOWM3NzA1
MWM3MTUuLmI4ZmYyOTdhNmVhNTgzNjI5YzNmOGUxN2FlOTk5MWIyZjJkYmU3OGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC00Miwx
MCArNDIsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgUExBVEZPUk0oR1RLKQor
Y2xhc3MgU2Nyb2xsaW5nUnVuTG9vcDsKKyNlbmRpZgorCiBjbGFzcyBTY3JvbGxpbmdUaHJlYWQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbGluZ1RocmVhZCk7Ci0KIHB1YmxpYzoK
KyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUaHJlYWQoKTsKKwogICAgIHN0YXRpYyBib29sIGlzQ3Vy
cmVudFRocmVhZCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRpc3BhdGNoKHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4pOwogCkBAIC02MywyOCArNjgsMzMgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNyZWF0ZVRocmVhZElmTmVlZGVkKCk7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkQ2Fs
bGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKTsKICAgICB2b2lkIHRocmVhZEJvZHkoKTsKLSAg
ICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbVNjcm9sbGluZ1RocmVhZCgpOwogCiAgICAgdm9p
ZCBpbml0aWFsaXplUnVuTG9vcCgpOwotICAgIHZvaWQgd2FrZVVwUnVuTG9vcCgpOwogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21TY3JvbGxpbmdU
aHJlYWQoKTsKKyAgICB2b2lkIHdha2VVcFJ1bkxvb3AoKTsKICAgICBzdGF0aWMgdm9pZCB0aHJl
YWRSdW5Mb29wU291cmNlQ2FsbGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKTsKICAgICB2b2lk
IHRocmVhZFJ1bkxvb3BTb3VyY2VDYWxsYmFjaygpOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAg
IHZvaWQgdGVybWluYXRlU2Nyb2xsaW5nVGhyZWFkKCk7CiAjZW5kaWYKIAogICAgIFRocmVhZElk
ZW50aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyOwogCiAgICAgQ29uZGl0aW9uIG1faW5pdGlhbGl6
ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZTsKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BN
dXRleDsKLQogICAgIExvY2sgbV9mdW5jdGlvbnNNdXRleDsKLSAgICBWZWN0b3I8c3RkOjpmdW5j
dGlvbjx2b2lkICgpPj4gbV9mdW5jdGlvbnM7CiAKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICBW
ZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9mdW5jdGlvbnM7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCB1c2UgV2ViQ29yZTo6UnVuTG9vcCBoZXJlLgogICAgIFJldGFpblB0cjxDRlJ1
bkxvb3BSZWY+IG1fdGhyZWFkUnVuTG9vcDsKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wU291cmNl
UmVmPiBtX3RocmVhZFJ1bkxvb3BTb3VyY2U7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgQ29u
ZGl0aW9uIG1fdGVybWluYXRlUnVuTG9vcENvbmRpdGlvbjsKKyAgICBMb2NrIG1fdGVybWluYXRl
UnVuTG9vcE11dGV4OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdSdW5Mb29wPiBtX3Ro
cmVhZFJ1bkxvb3A7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAKaW5kZXggNDc2YjRjMjcxZDliYWExNTQ5MDUyNDc0Njlh
NWNhZmY3ZWY0ZjNkNC4uYTllNTYyY2YyNThiNDk2MzA4NGMzNjZlOGNkM2NlZDFhMGM0NmQyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAK
QEAgLTUwLDYgKzUwLDcgQEAgU2Nyb2xsaW5nVHJlZTo6flNjcm9sbGluZ1RyZWUoKQogCiBib29s
IFNjcm9sbGluZ1RyZWU6OnNob3VsZEhhbmRsZVdoZWVsRXZlbnRTeW5jaHJvbm91c2x5KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKKyNpZiBQTEFURk9STShDT0NPQSkK
ICAgICAvLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBldmVudCBoYW5kbGluZyB0aHJl
YWQKICAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7CiAKQEAgLTcxLDE1ICs3MiwyMyBAQCBi
b29sIFNjcm9sbGluZ1RyZWU6OnNob3VsZEhhbmRsZVdoZWVsRXZlbnRTeW5jaHJvbm91c2x5KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudAogICAgICAgICBpZiAobV9ub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbi5jb250YWlucyhyb3VuZGVkSW50UG9pbnQocG9zaXRpb24pKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdoZWVsRXZlbnQpOwor
I2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWU6OnNldE9y
Q2xlYXJMYXRjaGVkTm9kZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNj
cm9sbGluZ05vZGVJRCBub2RlSUQpCiB7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKHdo
ZWVsRXZlbnQuc2hvdWxkQ29uc2lkZXJMYXRjaGluZygpKQogICAgICAgICBzZXRMYXRjaGVkTm9k
ZShub2RlSUQpOwogICAgIGVsc2UgaWYgKHdoZWVsRXZlbnQuc2hvdWxkUmVzZXRMYXRjaGluZygp
KQogICAgICAgICBjbGVhckxhdGNoZWROb2RlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh3
aGVlbEV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0obm9kZUlEKTsKKyNlbmRpZgogfQogCiB2b2lk
IFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50KQpAQCAtMzI2LDYgKzMzNSw3IEBAIFNjcm9sbFBpbm5pbmdCZWhhdmlvciBT
Y3JvbGxpbmdUcmVlOjpzY3JvbGxQaW5uaW5nQmVoYXZpb3IoKQogCiBib29sIFNjcm9sbGluZ1Ry
ZWU6OndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQogeworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICh3aGVlbEV2
ZW50LnBoYXNlKCkgIT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0zMzksNyArMzQ5LDkgQEAgYm9vbCBTY3JvbGxpbmdUcmVlOjp3aWxs
V2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2gK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKHdoZWVsRXZlbnQuZGVsdGFZKCkgPCAwICYm
IG1fbWFpbkZyYW1lUGlubmVkVG9UaGVCb3R0b20gJiYgIW1fcnViYmVyQmFuZHNBdEJvdHRvbSkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdoZWVsRXZl
bnQpOworI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAppbmRleCA0
ODM5ODZhZjVmYmVmZjEwNWVmNDRjMjU4MWVlZjhkMTQ0MGY2ZjVlLi5kMjZkMzYwNmU5ZWNiM2Q4
M2JmZWU0NmE3YjEzMjdmYjJkNDBlZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAKQEAgLTExOCw3ICsxMTgs
OSBAQCB2b2lkIFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6Y3VycmVudFNuYXBQb2ludEluZGljZXNE
aWRDaGFuZ2UoU2Nyb2xsaW5nTm9kZUlEIG5vZAogCiAgICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3I+IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9zY3JvbGxpbmdDb29yZGluYXRv
cjsKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Njcm9sbGluZ0Nvb3JkaW5hdG9yLCBu
b2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2FsXSB7CisjaWYgUExBVEZPUk0oTUFDKQogICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXMobm9kZUlE
LCBob3Jpem9udGFsLCB2ZXJ0aWNhbCk7CisjZW5kaWYKICAgICB9KTsKIH0KIApAQCAtMTY2LDcg
KzE2OCw2IEBAIHZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpyZW1vdmVUZXN0RGVmZXJyYWxG
b3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTCiAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oaWRlbnRpZmllciwgcmVhc29uKTsK
ICAgICB9KTsKIH0KLQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWM3M2JhYWJlY2I1
OGM1NzhlNWFjNWYxMjVjYzk0MGNhMGQxM2E4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCkBAIC0wLDAgKzEsMTQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcy5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNp
bmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNs
dWRlICJTY3JvbGxpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWROb2Rl
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3RpY2t5
Tm9kZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitSZWY8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVh
dGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcyhwYWdlKSk7Cit9CisKK0FzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yQ29vcmRpbmF0ZWRHcmFwaGljcyhQYWdlKiBwYWdlKQorICAgIDogQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1l
cigqdGhpcywgJkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpj
b21taXRUcmVlU3RhdGUpCit7CisgICAgc2V0U2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdUcmVlR3Rr
OjpjcmVhdGUodGhpcykpOworfQorCitBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0
ZWRHcmFwaGljczo6fkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNz
KCkKK3sKKyAgICBBU1NFUlQoIXNjcm9sbGluZ1RyZWUoKSk7Cit9CisKK3ZvaWQgQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OnBhZ2VEZXN0cm95ZWQoKQorewor
ICAgIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKworICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworCisgICAgLy8gSW52YWxp
ZGF0aW5nIHRoZSBzY3JvbGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUg
YmV0d2VlbiB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0
cy4KKyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiBzY3JvbGxpbmdUcmVlID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHJlbGVhc2VTY3JvbGxpbmdU
cmVlKCkpOworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWVdIHsK
KyAgICAgICAgc2Nyb2xsaW5nVHJlZS0+aW52YWxpZGF0ZSgpOworICAgIH0pOworfQorCit2b2lk
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRUcmVl
U3RhdGVJZk5lZWRlZCgpCit7CisgICAgY29tbWl0VHJlZVN0YXRlKCk7CisgICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Cit9CisKK2Jvb2wgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmhhbmRsZVdoZWVsRXZlbnQoRnJhbWVW
aWV3JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoc2Nyb2xs
aW5nVHJlZSgpLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVl
PiB0aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+
KHNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbdGhyZWFk
ZWRTY3JvbGxpbmdUcmVlLCB3aGVlbEV2ZW50XSB7CisgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5n
VHJlZS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICB9KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFw
aGljczo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQoreworICAgIEFTU0VSVChzY3JvbGxpbmdT
dGF0ZVRyZWUoKS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSB8fCBub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbkRpcnR5KCkpOworICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
Q29tbWl0dGVyVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRUcmVlU3RhdGUoKQoreworICAg
IHdpbGxDb21taXRUcmVlKCk7CisgICAgaWYgKCFzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+aGFzQ2hh
bmdlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFRocmVhZGVk
U2Nyb2xsaW5nVHJlZT4gdGhyZWFkZWRTY3JvbGxpbmdUcmVlID0gZG93bmNhc3Q8VGhyZWFkZWRT
Y3JvbGxpbmdUcmVlPihzY3JvbGxpbmdUcmVlKCkpOworICAgIFNjcm9sbGluZ1N0YXRlVHJlZSog
dW5wcm90ZWN0ZWRUcmVlU3RhdGUgPSBzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+Y29tbWl0KExheWVy
UmVwcmVzZW50YXRpb246OlBsYXRmb3JtTGF5ZXJJRFJlcHJlc2VudGF0aW9uKS5yZWxlYXNlKCk7
CisKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRlZFNjcm9sbGluZ1RyZWUs
IHVucHJvdGVjdGVkVHJlZVN0YXRlXSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxp
bmdTdGF0ZVRyZWU+IHRyZWVTdGF0ZSh1bnByb3RlY3RlZFRyZWVTdGF0ZSk7CisgICAgICAgIHRo
cmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0TmV3VHJlZVN0YXRlKFdURjo6bW92ZSh0cmVlU3Rh
dGUpKTsKKyAgICB9KTsKKworICAgIHVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCk7Cit9
CisKK3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OnVw
ZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGZyYW1lVmll
dy0+dGlsZWRCYWNraW5nKCk7CisgICAgaWYgKCF0aWxlZEJhY2tpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIGluZGljYXRvck1vZGU7CisgICAgaWYg
KHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpCisgICAgICAg
IGluZGljYXRvck1vZGUgPSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNh
dGlvbjsKKyAgICBlbHNlCisgICAgICAgIGluZGljYXRvck1vZGUgPSBBc3luY1Njcm9sbGluZ0lu
ZGljYXRpb247CisKKyAgICB0aWxlZEJhY2tpbmctPnNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9u
KGluZGljYXRvck1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFw
aGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjczMmQ5NjRhYzUyOTg2Yjk2Njc2MDU0NTAzN2ZjMjc1NTA1MTkz
MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29y
ZGluYXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBo
aWNzLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzX2gKKyNkZWZpbmUgQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3NfaAorCisjaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKKworI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBTY3JvbGxpbmdT
dGF0ZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7CitjbGFzcyBTY3Jv
bGxpbmdTdGF0ZVRyZWU7CitjbGFzcyBUaHJlYWRlZFNjcm9sbGluZ1RyZWU7CisKK2NsYXNzIEFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzIDogcHVibGljIEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcygpOworCisgICAgdmly
dHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0VHJlZVN0YXRlSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICAvLyBIYW5kbGUgdGhlIHdoZWVs
IGV2ZW50IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2ZW50
IHdhcyBoYW5kbGVkIG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChG
cmFtZVZpZXcmLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKSBvdmVycmlkZTsK
KworICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CisgICAgdm9pZCB1cGRhdGVUaWxlZFNjcm9s
bGluZ0luZGljYXRvcigpOworCisgICAgVGltZXIgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0
ZXJUaW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ZWRlN2I1YzBhNTVkMTUzYTcyYTVlZDQyMzcxYjg5MGFlNTdlOWE1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yR3RrLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuaCIKKworI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVl
bEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW5jbHVkZSAiU2Ny
b2xsaW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUd0ay5oIgorI2luY2x1ZGUg
IlRpbGVkQmFja2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrOjpTY3JvbGxpbmdDb29yZGluYXRvckd0ayhQYWdlKiBwYWdlKQorICAgIDogQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWVD
b21taXR0ZXJUaW1lcigqdGhpcywgJlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpjb21taXRUcmVl
U3RhdGUpCit7CisgICAgc2V0U2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdUcmVlR3RrOjpjcmVhdGUo
dGhpcykpOworfQorCitTY3JvbGxpbmdDb29yZGluYXRvckd0azo6flNjcm9sbGluZ0Nvb3JkaW5h
dG9yR3RrKCkKK3sKKyAgICBBU1NFUlQoIXNjcm9sbGluZ1RyZWUoKSk7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JHdGs6OnBhZ2VEZXN0cm95ZWQoKQoreworICAgIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVU
cmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworCisgICAgLy8gSW52YWxpZGF0aW5nIHRoZSBzY3Jv
bGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0d2VlbiB0aGUgU2Ny
b2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4KKyAgICBSZWZQdHI8
VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiBzY3JvbGxpbmdUcmVlID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHJlbGVhc2VTY3JvbGxpbmdUcmVlKCkpOworICAgIFNj
cm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWVdIHsKKyAgICAgICAgc2Nyb2xs
aW5nVHJlZS0+aW52YWxpZGF0ZSgpOworICAgIH0pOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpCit7CisgICAgY29tbWl0VHJlZVN0
YXRlKCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Cit9
CisKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQoRnJhbWVW
aWV3JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoc2Nyb2xs
aW5nVHJlZSgpLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVl
PiB0aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+
KHNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbdGhyZWFk
ZWRTY3JvbGxpbmdUcmVlLCB3aGVlbEV2ZW50XSB7CisgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5n
VHJlZS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICB9KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckd0azo6c2NoZWR1bGVUcmVlU3Rh
dGVDb21taXQoKQoreworICAgIEFTU0VSVChzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+aGFzQ2hhbmdl
ZFByb3BlcnRpZXMoKSB8fCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkRpcnR5KCkpOworICAgIGlm
IChtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RhcnRP
bmVTaG90KDApOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpjb21taXRUcmVl
U3RhdGUoKQoreworICAgIHdpbGxDb21taXRUcmVlKCk7CisgICAgaWYgKCFzY3JvbGxpbmdTdGF0
ZVRyZWUoKS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmUHRyPFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4gdGhyZWFkZWRTY3JvbGxpbmdUcmVlID0gZG93
bmNhc3Q8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPihzY3JvbGxpbmdUcmVlKCkpOworICAgIFNjcm9s
bGluZ1N0YXRlVHJlZSogdW5wcm90ZWN0ZWRUcmVlU3RhdGUgPSBzY3JvbGxpbmdTdGF0ZVRyZWUo
KS0+Y29tbWl0KExheWVyUmVwcmVzZW50YXRpb246OlBsYXRmb3JtTGF5ZXJJRFJlcHJlc2VudGF0
aW9uKS5yZWxlYXNlKCk7CisKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRl
ZFNjcm9sbGluZ1RyZWUsIHVucHJvdGVjdGVkVHJlZVN0YXRlXSB7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IHRyZWVTdGF0ZSh1bnByb3RlY3RlZFRyZWVTdGF0
ZSk7CisgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0TmV3VHJlZVN0YXRlKFdU
Rk1vdmUodHJlZVN0YXRlKSk7CisgICAgfSk7CisKKyAgICB1cGRhdGVUaWxlZFNjcm9sbGluZ0lu
ZGljYXRvcigpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjp1cGRhdGVUaWxl
ZFNjcm9sbGluZ0luZGljYXRvcigpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0
dXJuOworCisgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSBmcmFtZVZpZXctPnRpbGVk
QmFja2luZygpOworICAgIGlmICghdGlsZWRCYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbiBpbmRpY2F0b3JNb2RlOworICAgIGlmIChzaG91bGRV
cGRhdGVTY3JvbGxMYXllclBvc2l0aW9uU3luY2hyb25vdXNseSgpKQorICAgICAgICBpbmRpY2F0
b3JNb2RlID0gU3luY2hyb25vdXNTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUluZGljYXRpb247Cisg
ICAgZWxzZQorICAgICAgICBpbmRpY2F0b3JNb2RlID0gQXN5bmNTY3JvbGxpbmdJbmRpY2F0aW9u
OworCisgICAgdGlsZWRCYWNraW5nLT5zZXRTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbihpbmRpY2F0
b3JNb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2d0ay9TY3JvbGxpbmdDb29yZGluYXRvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDVmYTI4
MzRlNzNhMTU1YmQwODE5N2JlY2RmNjE5NTMzNWU2ZTVhMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdDb29yZGluYXRvckd0ay5o
CkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdDb29y
ZGluYXRvckd0a19oCisjZGVmaW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrX2gKKworI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyOworY2xhc3Mg
U2Nyb2xsaW5nU3RhdGVOb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwor
Y2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOworY2xhc3MgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOwor
CitjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvckd0ayA6IHB1YmxpYyBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvckd0
ayhQYWdlKik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCkgb3ZlcnJpZGU7CisgICAgLy8gSGFuZGxlIHRoZSB3
aGVlbCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBl
dmVudCB3YXMgaGFuZGxlZCBvciBub3QuCisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZl
bnQoRnJhbWVWaWV3JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZSgpOworICAgIHZvaWQgdXBkYXRlVGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3IoKTsKKworICAgIFRpbWVyIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29t
bWl0dGVyVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JH
dGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9s
bGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDE2ZjU5NTEyMGEyNGZlOTA5Zjc0ODk4YWFkZjQ0OWZmYjU1N2M4YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdT
dGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGcmFt
ZVNjcm9sbGluZ05vZGUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNs
dWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorI2luY2x1
ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJv
bVNjcm9sbGJhcnMoU2Nyb2xsYmFyKiB2U2Nyb2xsYmFyLCBTY3JvbGxiYXIqIGhTY3JvbGxiYXIp
Cit7CisgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCk7CisgICAgaWYgKHNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSB2U2Nyb2xsYmFy
ICYmIHZTY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKQorICAgICAg
ICA/IHZTY3JvbGxiYXIgOiBudWxscHRyOworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhciA9IGhTY3JvbGxiYXIgJiYgaFNjcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFy
eVRocmVhZCgpCisgICAgICAgID8gaFNjcm9sbGJhciA6IG51bGxwdHI7CisKKyAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbGJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhciAmJiBtX2hvcml6b250YWxTY3Jv
bGxiYXIgPT0gaG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhciA9IHZTY3JvbGxiYXI7CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gaFNjcm9sbGJhcjsKKworICAgIHNldFByb3BlcnR5Q2hhbmdlZChQYWludGVyRm9yU2Nyb2xs
YmFyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFT
WU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RocmVhZEd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43MDkxYTBhMjUyN2FiZjM0ZjE4ZjcxYWI5ZDMyMGM5NThmNThmZDQ5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RocmVhZEd0
ay5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFi
b3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKworI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU2Nyb2xsaW5nUnVuTG9vcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2Nyb2xsaW5nUnVuTG9vcCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgU2Nyb2xsaW5nUnVuTG9vcCgpCisgICAgICAgIDogbV9ydW5Mb29wKFJ1bkxvb3A6OmN1
cnJlbnQoKSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjYWxsT25TY3JvbGxpbmdSdW5Mb29w
KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmICgmbV9y
dW5Mb29wID09ICZSdW5Mb29wOjpjdXJyZW50KCkpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3J1bkxvb3AuZGlz
cGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOworICAgIH0KKworICAgIFJ1bkxvb3AmIHJ1bkxvb3Ao
KSB7IHJldHVybiBtX3J1bkxvb3A7IH0KK3ByaXZhdGU6CisgICAgUnVuTG9vcCYgbV9ydW5Mb29w
OworfTsKKworU2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQoKQorICAgIDogbV90aHJl
YWRJZGVudGlmaWVyKDApCisgICAgLCBtX3RocmVhZFJ1bkxvb3AobnVsbHB0cikKK3sKK30KKwor
U2Nyb2xsaW5nVGhyZWFkOjp+U2Nyb2xsaW5nVGhyZWFkKCkKK3sKKyAgICB0ZXJtaW5hdGVTY3Jv
bGxpbmdUaHJlYWQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmluaXRpYWxpemVSdW5M
b29wKCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1
bkxvb3BNdXRleCk7CisgICAgICAgIG1fdGhyZWFkUnVuTG9vcCA9IHN0ZDo6bWFrZV91bmlxdWU8
U2Nyb2xsaW5nUnVuTG9vcD4oKTsKKworICAgICAgICBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgfQorCisgICAgQVNTRVJUKGlzQ3VycmVudFRo
cmVhZCgpKTsKKyAgICBtX3RocmVhZFJ1bkxvb3AtPnJ1bkxvb3AoKS5ydW4oKTsKKworICAgIHsK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV90ZXJtaW5hdGVSdW5Mb29wTXV0ZXgpOworICAg
ICAgICBtX3RocmVhZFJ1bkxvb3AgPSBudWxscHRyOworICAgICAgICBtX3Rlcm1pbmF0ZVJ1bkxv
b3BDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgfQorCisgICAgZGV0YWNoVGhyZWFkKG1fdGhy
ZWFkSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0ZXJtaW5hdGVTY3Jv
bGxpbmdUaHJlYWQoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGVybWluYXRlUnVuTG9v
cE11dGV4KTsKKyAgICBtX3RocmVhZFJ1bkxvb3AtPnJ1bkxvb3AoKS5zdG9wKCk7CisgICAgbV90
ZXJtaW5hdGVSdW5Mb29wQ29uZGl0aW9uLndhaXQobV90ZXJtaW5hdGVSdW5Mb29wTXV0ZXgpOwor
fQorCit2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiBmdW5jdGlvbikKK3sKKyAgICBhdXRvJiBzY3JvbGxpbmdUaHJlYWQgPSBTY3JvbGxpbmdUaHJl
YWQ6OnNpbmdsZXRvbigpOworICAgIHNjcm9sbGluZ1RocmVhZC5jcmVhdGVUaHJlYWRJZk5lZWRl
ZCgpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzaW5nbGV0b24oKS5tX2Z1
bmN0aW9uc011dGV4KTsKKyAgICAgICAgc2Nyb2xsaW5nVGhyZWFkLm1fdGhyZWFkUnVuTG9vcC0+
Y2FsbE9uU2Nyb2xsaW5nUnVuTG9vcChmdW5jdGlvbik7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhl
ZE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNDM4YTNiYTJkNzZhMzdhNTgyMTZiOTQyODg3
MDk4ZjE4NTE3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIK
KyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVm
PFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU+IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZShT
Y3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUoc2Nyb2xsaW5n
VHJlZSwgbm9kZUlEKSk7Cit9CisKK1Njcm9sbGluZ1RyZWVGaXhlZE5vZGU6OlNjcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5nTm9kZUlE
IG5vZGVJRCkKKyAgICA6IFNjcm9sbGluZ1RyZWVOb2RlKHNjcm9sbGluZ1RyZWUsIEZpeGVkTm9k
ZSwgbm9kZUlEKQoreworfQorCitTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp+U2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZSgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRl
QmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZUxheWVy
c0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFNpemUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Nj
cm9sbGluZ1RyZWVGaXhlZE5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NmNmZjRlZTA2ZDM5ZWNmNWQwYTA5
ZDM2N2ZlYjg0M2E0OWZkNTFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMCwwICsxLDYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZV9oCisjZGVm
aW5lIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGVfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb25z
dHJhaW50cy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHM7CisKK2Ns
YXNzIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZUZpeGVk
Tm9kZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQpOworCisgICAgdmly
dHVhbCB+U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSgpOworCitwcml2YXRlOgorICAgIFNjcm9sbGlu
Z1RyZWVGaXhlZE5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2Rl
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JD
aGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJl
Y3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkg
b3ZlcnJpZGU7CisKKyAgICBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBtX2NvbnN0
cmFpbnRzOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1NDUk9M
TElOR19OT0RFKFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUsIGlzRml4ZWROb2RlKCkpCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsv
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmEzNjMzZTA3MDQ3YmVkNDhmOTJjMjE1Y2UyNjAxY2M2YTdlOTgyZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0ay5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKwor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGxvZ1RocmVhZGVkU2Nyb2xsaW5n
TW9kZSh1bnNpZ25lZCBzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMpOworCitSZWY8U2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4gU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZUd0azo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUd0ayhzY3JvbGxpbmdUcmVlLCBub2RlSUQpKTsKK30KKworU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZUd0ayhTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlE
KQorICAgIDogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdUcmVlLCBu
b2RlSUQpCisgICAgLCBtX3Njcm9sbENvbnRyb2xsZXIoKnRoaXMpCisgICAgLCBtX3Njcm9sbExh
eWVyKDApCisgICAgLCBtX3Njcm9sbGVkQ29udGVudHNMYXllcigwKQorICAgICwgbV9jb3VudGVy
U2Nyb2xsaW5nTGF5ZXIoMCkKKyAgICAsIG1faW5zZXRDbGlwTGF5ZXIoMCkKKyAgICAsIG1fY29u
dGVudFNoYWRvd0xheWVyKDApCisgICAgLCBtX2hlYWRlckxheWVyKDApCisgICAgLCBtX2Zvb3Rl
ckxheWVyKDApCisgICAgLCBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3IobnVsbHB0cikKKyAgICAs
IG1fdmVydGljYWxTY3JvbGxiYXIobnVsbHB0cikKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJh
cihudWxscHRyKQoreworfQorCitTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp+
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0aygpCit7Cit9CisKK0Zsb2F0UG9pbnQg
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6bGF5ZXJQb3NpdGlvbihHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQgaWQpIGNvbnN0Cit7CisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorICAgIEFTU0VSVChtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOworICAgIHJl
dHVybiBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPmxheWVyUG9zaXRpb24oaWQpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oaWQpOworICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisjZW5kaWYK
K30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRMYXllclBv
c2l0aW9uKEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBpZCwgY29uc3QgRmxvYXRQb2lu
dCYgcCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgQVNTRVJUKG1fY29t
cG9zaXRpbmdDb29yZGluYXRvcik7CisgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yLT5zZXRM
YXllclBvc2l0aW9uKGlkLCBwKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBV
TlVTRURfUEFSQU0ocCk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlR3RrOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5v
ZGUmIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjp1
cGRhdGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUpOworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGlu
Z1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihz
dGF0ZU5vZGUpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudCogY29tcG9zaXRpbmdDb29yZGluYXRvciA9IHN0YXRlTm9k
ZS5jb21wb3NpdGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYgKGNvbXBvc2l0aW5nQ29vcmRpbmF0
b3IgJiYgY29tcG9zaXRpbmdDb29yZGluYXRvciAhPSBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3Ip
CisgICAgICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvciA9IGNvbXBvc2l0aW5nQ29vcmRpbmF0
b3I7CisjZW5kaWYKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbExh
eWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmxheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKKyAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7CisKKyAgICBp
ZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZy
YW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkKKyAgICAgICAgbV9jb3Vu
dGVyU2Nyb2xsaW5nTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuY291bnRlclNjcm9sbGluZ0xh
eWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SW5zZXRDbGlwTGF5ZXIpKQorICAgICAg
ICBtX2luc2V0Q2xpcExheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmluc2V0Q2xpcExheWVyKCk7
CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q29udGVudFNoYWRvd0xheWVyKSkKKyAgICAgICAg
bV9jb250ZW50U2hhZG93TGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuY29udGVudFNoYWRvd0xh
eWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SGVhZGVyTGF5ZXIpKQorICAgICAgICBt
X2hlYWRlckxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmhlYWRlckxheWVyKCk7CisKKyAgICBp
ZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZy
YW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVyTGF5ZXIpKQorICAgICAgICBtX2Zvb3RlckxheWVyID0g
c2Nyb2xsaW5nU3RhdGVOb2RlLmZvb3RlckxheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZTo6UGFpbnRlckZvclNjcm9sbGJhcikpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9
IHNjcm9sbGluZ1N0YXRlTm9kZS52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaG9yaXpvbnRhbFNjcm9sbGJhcigp
OworICAgIH0KKworICAgIGJvb2wgbG9nU2Nyb2xsaW5nTW9kZSA9ICFtX2hhZEZpcnN0VXBkYXRl
OworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpSZWFzb25zRm9yU3luY2hyb25vdXNTY3JvbGxpbmcp
KSB7CisgICAgICAgIGlmIChzaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uU3luY2hyb25v
dXNseSgpKSB7CisgICAgICAgICAgICAvLyBXZSdyZSB0cmFuc2l0aW9uaW5nIHRvIHRoZSBzbG93
ICJ1cGRhdGUgc2Nyb2xsIGxheWVyIHBvc2l0aW9uIG9uIHRoZSBtYWluIHRocmVhZCIgbW9kZS4K
KyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHByb2JhYmxlIG1haW4gdGhyZWFkIHNjcm9s
bCBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjcm9sbCBsYXllciBwb3NpdGlvbi4KKyAgICAg
ICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pKQorICAgICAgICAg
ICAgICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxpbmdTdGF0
ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbExheWVyUG9zaXRpb24gPSBsYXll
clBvc2l0aW9uKG1fc2Nyb2xsTGF5ZXIpOworICAgICAgICAgICAgICAgIG1fcHJvYmFibGVNYWlu
VGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBGbG9hdFBvaW50KC1zY3JvbGxMYXllclBvc2l0aW9uLngo
KSwgLXNjcm9sbExheWVyUG9zaXRpb24ueSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGxvZ1Njcm9sbGluZ01vZGUgPSB0cnVlOworICAgIH0KKworICAgIGlmIChsb2dT
Y3JvbGxpbmdNb2RlKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgbG9nVGhyZWFkZWRTY3JvbGxp
bmdNb2RlKHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucygpKTsKKyAgICB9CisKKyAgICBpZiAo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OkV4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIpKQorICAgICAgICBtX2V4cGVj
dHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuZXhwZWN0c1doZWVs
RXZlbnRUZXN0VHJpZ2dlcigpOworCisgICAgbV9oYWRGaXJzdFVwZGF0ZSA9IHRydWU7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBkYXRlQWZ0ZXJDaGls
ZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjp1cGRhdGVBZnRlckNoaWxkcmVuKHN0YXRlTm9kZSk7
CisKKyAgICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHNj
cm9sbCBwb3NpdGlvbiBhZnRlciBjaGlsZCBub2RlcyBoYXZlIGJlZW4gdXBkYXRlZCwgYmVjYXVz
ZSB0aGV5IG5lZWQgdG8gaGF2ZSB1cGRhdGVkIHRoZWlyIGNvbnN0cmFpbnRzIGJlZm9yZSBhbnkg
c2Nyb2xsaW5nIGhhcHBlbnMuCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3Np
dGlvbikpCisgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbGluZ1N0YXRlTm9kZS5yZXF1
ZXN0ZWRTY3JvbGxQb3NpdGlvbigpKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpCisgICAgICAg
IHx8IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSkKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGFibGVBcmVhU2l6ZSkpCisgICAgICAgIHVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKHNjcm9s
bFBvc2l0aW9uKCkpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVH
dGs6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
KQoreworICAgIGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zY3JvbGxDb250cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Cit9CisK
K2Jvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6aXNBbHJlYWR5UGlubmVk
SW5EaXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
LCBTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICBjYXNl
IFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWw6CisgICAgICAgIHJldHVybiAod2hlZWxFdmVudC5k
ZWx0YVkoKSA+IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0
aW9uKCkueSgpKSB8fCAod2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYgc2Nyb2xsUG9zaXRpb24o
KS55KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICBjYXNlIFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbDoKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWCgp
ID4gMCAmJiBzY3JvbGxQb3NpdGlvbigpLngoKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbigpLngoKSA+
PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrOjpzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3sK
KyAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxCeShvZmZzZXQpOwor
fQorCitGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvblN5bmNocm9ub3VzbHkoKSkKKyAgICAgICAgcmV0dXJuIG1fcHJvYmFibGVNYWluVGhyZWFk
U2Nyb2xsUG9zaXRpb247CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxMYXllclBvc2l0
aW9uID0gbGF5ZXJQb3NpdGlvbihtX3Njcm9sbExheWVyKTsKKyAgICByZXR1cm4gRmxvYXRQb2lu
dCgtc2Nyb2xsTGF5ZXJQb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1zY3JvbGxM
YXllclBvc2l0aW9uLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKSk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgLy8gU2Nyb2xsIGRlbHRhcyBjYW4gYmUg
bm9uLWludGVncmFsIHdpdGggc29tZSBpbnB1dCBkZXZpY2VzLCBzbyBzY3JvbGxQb3NpdGlvbiBt
YXkgbm90IGJlIGludGVncmFsLgorICAgIC8vIEZJWE1FOiB3aGVuIHdlIHN1cHBvcnQgaGFsZi1w
aXhlbCBzY3JvbGwgcG9zaXRpb25zIG9uIFJldGluYSBkaXNwbGF5cywgdGhpcyB3aWxsIG5lZWQg
dG8gcm91bmQgdG8gaGFsZiBwaXhlbHMuCisgICAgRmxvYXRQb2ludCByb3VuZGVkUG9zaXRpb24o
cm91bmRmKHNjcm9sbFBvc2l0aW9uLngoKSksIHJvdW5kZihzY3JvbGxQb3NpdGlvbi55KCkpKTsK
KworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbFBvc2l0aW9u
KHJvdW5kZWRQb3NpdGlvbik7CisKKyAgICBpZiAoc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbG9nRXhwb3NlZFVuZmlsbGVkQXJl
YSgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNldFNj
cm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgdXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoc2Nyb2xs
UG9zaXRpb24pOworCisgICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5j
aHJvbm91c2x5KCkpIHsKKyAgICAgICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlv
biA9IHNjcm9sbFBvc2l0aW9uOworICAgICAgICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nVHJl
ZU5vZGVEaWRTY3JvbGwoc2Nyb2xsaW5nTm9kZUlEKCksIHNjcm9sbFBvc2l0aW9uLCBTZXRTY3Jv
bGxpbmdMYXllclBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNldFNj
cm9sbExheWVyUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgIHNjcm9sbGluZ1RyZWUoKS5z
Y3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbChzY3JvbGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRp
b24pOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNldFNj
cm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgQVNT
RVJUKCFzaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uU3luY2hyb25vdXNseSgpKTsKKwor
ICAgIHNldExheWVyUG9zaXRpb24obV9zY3JvbGxMYXllciwgRmxvYXRQb2ludCgtcG9zaXRpb24u
eCgpICsgc2Nyb2xsT3JpZ2luKCkueCgpLCAtcG9zaXRpb24ueSgpICsgc2Nyb2xsT3JpZ2luKCku
eSgpKSk7CisKKyAgICBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JG
aXhlZCA9IHNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpOworICAgIEZsb2F0UmVjdCB2
aWV3cG9ydFJlY3QoRmxvYXRQb2ludCgpLCBzY3JvbGxhYmxlQXJlYVNpemUoKSk7CisKKyAgICBG
bG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJlbiA9IEZyYW1lVmlldzo6c2Ny
b2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKGVuY2xvc2luZ0xheW91dFJlY3Qodmlld3BvcnRS
ZWN0KSwgTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6ZSgpKSwgTGF5b3V0UG9pbnQocG9zaXRp
b24pLCBzY3JvbGxPcmlnaW4oKSwgZnJhbWVTY2FsZUZhY3RvcigpLAorICAgICAgICBmaXhlZEVs
ZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCksIGJlaGF2aW9yRm9yRml4ZWQsIGhlYWRlckhl
aWdodCgpLCBmb290ZXJIZWlnaHQoKSk7CisKKyAgICBpZiAobV9jb3VudGVyU2Nyb2xsaW5nTGF5
ZXIpCisgICAgICAgIHNldExheWVyUG9zaXRpb24obV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIsIEZs
b2F0UG9pbnQoc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZENoaWxkcmVuKSk7CisKKyAgICBmbG9hdCB0
b3BDb250ZW50SW5zZXQgPSB0aGlzLT50b3BDb250ZW50SW5zZXQoKTsKKyAgICBpZiAobV9pbnNl
dENsaXBMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllciAmJiB0b3BDb250ZW50SW5zZXQp
IHsKKyAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbihtX2luc2V0Q2xpcExheWVyLCBGbG9hdFBvaW50
KDAsIEZyYW1lVmlldzo6eVBvc2l0aW9uRm9ySW5zZXRDbGlwTGF5ZXIocG9zaXRpb24sIHRvcENv
bnRlbnRJbnNldCkpKTsKKworICAgICAgICBjb25zdCBGbG9hdFBvaW50IHNjcm9sbGVkQ29udGVu
dHNMYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbihtX3Njcm9sbGVkQ29udGVudHNMYXllcik7
CisgICAgICAgIHNldExheWVyUG9zaXRpb24obV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIsIEZyYW1l
Vmlldzo6cG9zaXRpb25Gb3JSb290Q29udGVudExheWVyKHBvc2l0aW9uLCBzY3JvbGxPcmlnaW4o
KSwgdG9wQ29udGVudEluc2V0LCBoZWFkZXJIZWlnaHQoKSkpOworICAgICAgICBpZiAobV9jb250
ZW50U2hhZG93TGF5ZXIpCisgICAgICAgICAgICBzZXRMYXllclBvc2l0aW9uKG1fY29udGVudFNo
YWRvd0xheWVyLCBzY3JvbGxlZENvbnRlbnRzTGF5ZXJQb3NpdGlvbik7CisgICAgfQorCisgICAg
aWYgKG1faGVhZGVyTGF5ZXIgfHwgbV9mb290ZXJMYXllcikgeworICAgICAgICAvLyBHZW5lcmFs
bHkgdGhlIGJhbm5lcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgaG9yaXpvbnRhbC1wb3NpdGlvbiBj
b21wdXRhdGlvbiBhcyBhIGZpeGVkIGVsZW1lbnQuIEhvd2V2ZXIsCisgICAgICAgIC8vIHRoZSBi
YW5uZXJzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIGZyYW1lU2NhbGVGYWN0b3IoKSwgc28gaWYg
dGhlcmUgaXMgY3VycmVudGx5IGEgbm9uLTEgZnJhbWVTY2FsZUZhY3RvcigpCisgICAgICAgIC8v
IHRoZW4gd2Ugc2hvdWxkIHJlY29tcHV0ZSBzY3JvbGxQb3NpdGlvbkZvckZpeGVkQ2hpbGRyZW4g
Zm9yIHRoZSBiYW5uZXIgd2l0aCBhIHNjYWxlIGZhY3RvciBvZiAxLgorICAgICAgICBmbG9hdCBo
b3Jpem9udGFsU2Nyb2xsT2Zmc2V0Rm9yQmFubmVyID0gc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZENo
aWxkcmVuLngoKTsKKyAgICAgICAgaWYgKGZyYW1lU2NhbGVGYWN0b3IoKSAhPSAxKQorICAgICAg
ICAgICAgaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciA9IEZyYW1lVmlldzo6c2Nyb2xs
UG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKGVuY2xvc2luZ0xheW91dFJlY3Qodmlld3BvcnRSZWN0
KSwgTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6ZSgpKSwgTGF5b3V0UG9pbnQocG9zaXRpb24p
LCBzY3JvbGxPcmlnaW4oKSwgMSwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgp
LCBiZWhhdmlvckZvckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpLngoKTsK
KworICAgICAgICBpZiAobV9oZWFkZXJMYXllcikKKyAgICAgICAgICAgIHNldExheWVyUG9zaXRp
b24obV9oZWFkZXJMYXllciwgRmxvYXRQb2ludChob3Jpem9udGFsU2Nyb2xsT2Zmc2V0Rm9yQmFu
bmVyLCBGcmFtZVZpZXc6OnlQb3NpdGlvbkZvckhlYWRlckxheWVyKHBvc2l0aW9uLCB0b3BDb250
ZW50SW5zZXQpKSk7CisKKyAgICAgICAgaWYgKG1fZm9vdGVyTGF5ZXIpIHsKKyAgICAgICAgICAg
IHNldExheWVyUG9zaXRpb24obV9mb290ZXJMYXllciwgRmxvYXRQb2ludChob3Jpem9udGFsU2Ny
b2xsT2Zmc2V0Rm9yQmFubmVyLAorICAgICAgICAgICAgICAgIEZyYW1lVmlldzo6eVBvc2l0aW9u
Rm9yRm9vdGVyTGF5ZXIocG9zaXRpb24sIHRvcENvbnRlbnRJbnNldCwgdG90YWxDb250ZW50c1Np
emUoKS5oZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKworICAgIHZpZXdwb3J0UmVjdC5z
ZXRMb2NhdGlvbihzY3JvbGxQb3NpdGlvbkZvckZpeGVkQ2hpbGRyZW4pOworCisgICAgZm9yIChh
dXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0
ZXJBbmNlc3RvckNoYW5nZSgqdGhpcywgdmlld3BvcnRSZWN0LCBGbG9hdFNpemUoKSk7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBkYXRlTGF5ZXJzQWZ0
ZXJWaWV3cG9ydENoYW5nZShjb25zdCBGbG9hdFJlY3QmLCBkb3VibGUpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUd0azo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBGbG9hdFBv
aW50IHBvc2l0aW9uOworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkucm9vdE5vZGUoKSA9PSB0aGlz
ICYmIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9PSBQaW5Ub0JvdHRv
bSkKKyAgICAgICAgcG9zaXRpb24uc2V0WShtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwor
CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGs6Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAg
RmxvYXRQb2ludCBwb3NpdGlvbih0b3RhbENvbnRlbnRzU2l6ZUZvclJ1YmJlckJhbmQoKSAtIHNj
cm9sbGFibGVBcmVhU2l6ZSgpKTsKKyAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLmV4cGFuZGVkVG8o
RmxvYXRQb2ludCgpKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkucm9vdE5vZGUoKSA9PSB0
aGlzICYmIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9PSBQaW5Ub1Rv
cCkKKyAgICAgICAgcG9zaXRpb24uc2V0WShtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwor
CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVHdGs6OnVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKGNvbnN0IEZsb2F0UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKQoreworICAgIGJvb2wgcGlubmVkVG9UaGVMZWZ0ID0gc2Nyb2xsUG9zaXRp
b24ueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICBib29sIHBpbm5lZFRv
VGhlUmlnaHQgPSBzY3JvbGxQb3NpdGlvbi54KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCku
eCgpOworICAgIGJvb2wgcGlubmVkVG9UaGVUb3AgPSBzY3JvbGxQb3NpdGlvbi55KCkgPD0gbWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOworICAgIGJvb2wgcGlubmVkVG9UaGVCb3R0b20gPSBz
Y3JvbGxQb3NpdGlvbi55KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOworCisgICAg
c2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZVBpblN0YXRlKHBpbm5lZFRvVGhlTGVmdCwgcGlu
bmVkVG9UaGVSaWdodCwgcGlubmVkVG9UaGVUb3AsIHBpbm5lZFRvVGhlQm90dG9tKTsKK30KKwor
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpsb2dFeHBvc2VkVW5maWxs
ZWRBcmVhKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGF0aWMgdm9pZCBsb2dU
aHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWduZWQgc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25z
KQoreworICAgIGlmIChzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMpIHsKKyAgICAgICAgU3Ry
aW5nQnVpbGRlciByZWFzb25zRGVzY3JpcHRpb247CisKKyAgICAgICAgaWYgKHN5bmNocm9ub3Vz
U2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpGb3JjZWRPbk1haW5UaHJl
YWQpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kTGl0ZXJhbCgiZm9yY2Vk
LCIpOworICAgICAgICBpZiAoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6Okhhc1Nsb3dSZXBhaW50T2JqZWN0cykKKyAgICAgICAgICAgIHJlYXNvbnNE
ZXNjcmlwdGlvbi5hcHBlbmRMaXRlcmFsKCJzbG93LXJlcGFpbnQgb2JqZWN0cywiKTsKKyAgICAg
ICAgaWYgKHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpIYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c1dpdGhvdXRTdXBwb3J0aW5nRml4ZWRMYXll
cnMpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kTGl0ZXJhbCgidmlld3Bv
cnQtY29uc3RyYWluZWQgb2JqZWN0cywiKTsKKyAgICAgICAgaWYgKHN5bmNocm9ub3VzU2Nyb2xs
aW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNOb25MYXllclZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzKQorICAgICAgICAgICAgcmVhc29uc0Rlc2NyaXB0aW9uLmFwcGVuZExp
dGVyYWwoIm5vbi1sYXllciB2aWV3cG9ydC1jb25zdHJhaW5lZCBvYmplY3RzLCIpOworICAgICAg
ICBpZiAoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OklzSW1hZ2VEb2N1bWVudCkKKyAgICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmRM
aXRlcmFsKCJpbWFnZSBkb2N1bWVudCwiKTsKKworICAgICAgICAvLyBTdHJpcCB0aGUgdHJhaWxp
bmcgY29tbWEuCisgICAgICAgIFN0cmluZyByZWFzb25zRGVzY3JpcHRpb25UcmltbWVkID0gcmVh
c29uc0Rlc2NyaXB0aW9uLnRvU3RyaW5nKCkubGVmdChyZWFzb25zRGVzY3JpcHRpb24ubGVuZ3Ro
KCkgLSAxKTsKKworICAgICAgICBXVEZMb2dBbHdheXMoIlNDUk9MTElORzogU3dpdGNoaW5nIHRv
IG1haW4tdGhyZWFkIHNjcm9sbGluZyBtb2RlLiBUaW1lOiAlZiBSZWFzb24ocyk6ICVzXG4iLCBX
VEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCByZWFzb25zRGVzY3JpcHRpb25Ucmlt
bWVkLmFzY2lpKCkuZGF0YSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJT
Q1JPTExJTkc6IFN3aXRjaGluZyB0byB0aHJlYWRlZCBzY3JvbGxpbmcgbW9kZS4gVGltZTogJWZc
biIsIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzBiMDU2ZGQx
MzM2ZTIzY2RlMTY2ZDk3Y2MzM2VmMzkwOTMwMzE3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0a19oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbENvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQ7CitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CisK
K2NsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsgOiBwdWJsaWMgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlE
KTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKCk7CisK
K3ByaXZhdGU6CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ayhTY3JvbGxp
bmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIC8vIFNjcm9sbGluZ1RyZWVOb2RlIG1l
bWJlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNv
bnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
IG92ZXJyaWRlOworCisgICAgLy8gU2Nyb2xsY29udHJvbGxlckNsaWVudCBtZW1iZXIgZnVuY3Rp
b25zLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7
IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIGhv
cml6b250YWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxi
YXI7IH0KKworICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMo
Y29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRl
clZpZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGRvdWJs
ZSBzY2FsZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworCisgICAgRmxvYXRQb2ludCBtaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFBvaW50IG1heGltdW1TY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVNYWluRnJhbWVQaW5T
dGF0ZShjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisKKyAgICBib29sIGlzQWxy
ZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYs
IFNjcm9sbEV2ZW50QXhpcyk7CisKKyAgICB2b2lkIGxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEoKTsK
KworICAgIEZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbihHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQpIGNvbnN0OworICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIFNjcm9sbENvbnRyb2xs
ZXIgbV9zY3JvbGxDb250cm9sbGVyOworCisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIG1fc2Nyb2xsTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIG1f
c2Nyb2xsZWRDb250ZW50c0xheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCBtX2NvdW50ZXJTY3JvbGxpbmdMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgbV9pbnNldENsaXBMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQgbV9jb250ZW50U2hhZG93TGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIG1faGVhZGVyTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIG1f
Zm9vdGVyTGF5ZXI7CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fY29t
cG9zaXRpbmdDb29yZGluYXRvcjsKKworICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJh
cjsKKyAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKworICAgIEZsb2F0UG9p
bnQgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbjsKKyAgICBib29sIG1fbGFzdFNj
cm9sbEhhZFVuZmlsbGVkUGl4ZWxzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFkRmlyc3RVcGRh
dGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9leHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHsg
ZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0
ay9TY3JvbGxpbmdUcmVlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0
ay9TY3JvbGxpbmdUcmVlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGE2ZTFiNGM3MzBmMzI1MzNiOTll
M2U5ZGVlMWY5ZmQ5YzE3YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1Ry
ZWVHdGsuaCIKKworI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCIKKyNpbmNsdWRl
ICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8U2Nyb2xsaW5nVHJlZUd0az4gU2Nyb2xsaW5n
VHJlZUd0azo6Y3JlYXRlKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ1RyZWVHdGsoc2Ny
b2xsaW5nQ29vcmRpbmF0b3IpKTsKK30KKworU2Nyb2xsaW5nVHJlZUd0azo6U2Nyb2xsaW5nVHJl
ZUd0ayhBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcikKKyAg
ICA6IFRocmVhZGVkU2Nyb2xsaW5nVHJlZShzY3JvbGxpbmdDb29yZGluYXRvcikKK3sKK30KKwor
UGFzc1JlZlB0cjxTY3JvbGxpbmdUcmVlTm9kZT4gU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRlU2Ny
b2xsaW5nVHJlZU5vZGUoU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQpCit7CisgICAgc3dpdGNoIChub2RlVHlwZSkgeworICAgIGNhc2UgRnJhbWVTY3Jv
bGxpbmdOb2RlOgorICAgICAgICByZXR1cm4gU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZUd0azo6Y3JlYXRlKCp0aGlzLCBub2RlSUQpOworICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdO
b2RlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgY2FzZSBGaXhlZE5vZGU6CisgICAgICAgIHJldHVybiBTY3JvbGxpbmdUcmVlRml4
ZWROb2RlOjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7CisgICAgY2FzZSBTdGlja3lOb2RlOgorICAg
ICAgICByZXR1cm4gU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OmNyZWF0ZSgqdGhpcywgbm9kZUlE
KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Z3RrL1Njcm9sbGluZ1RyZWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0
ay9TY3JvbGxpbmdUcmVlR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmE4YjZiY2U3MjVkOTdjYWM0N2FlZGYy
M2I5ZDQ3OWY5YmNlZDA5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3RrLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1RyZWVHdGtfaAorI2RlZmluZSBTY3JvbGxpbmdU
cmVlR3RrX2gKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJUaHJl
YWRlZFNjcm9sbGluZ1RyZWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3Jv
bGxpbmdUcmVlR3RrIDogcHVibGljIFRocmVhZGVkU2Nyb2xsaW5nVHJlZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxTY3JvbGxpbmdUcmVlR3RrPiBjcmVhdGUoQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvciopOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBj
cmVhdGVTY3JvbGxpbmdUcmVlTm9kZShTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlE
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlR3RrKEFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxp
bmdUcmVlR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0
ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5ZjZiYWEx
ZGIzMTg5NzE4ZjNjZjM0NmMwMTNiNzUwMDMyMmFiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3Bw
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdTdGF0ZVN0aWNreU5vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlPiBTY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNj
cm9sbGluZ05vZGVJRCBub2RlSUQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUoc2Nyb2xsaW5nVHJlZSwgbm9kZUlEKSk7Cit9CisKK1Njcm9sbGlu
Z1RyZWVTdGlja3lOb2RlOjpTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZShTY3JvbGxpbmdUcmVlJiBz
Y3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQorICAgIDogU2Nyb2xsaW5nVHJl
ZU5vZGUoc2Nyb2xsaW5nVHJlZSwgU3RpY2t5Tm9kZSwgbm9kZUlEKQoreworfQorCitTY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZTo6flNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKCkKK3sKK30KKwordm9p
ZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Ny
b2xsaW5nU3RhdGVOb2RlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNj
cm9sbGluZ1RyZWVTdGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNv
bnN0IFNjcm9sbGluZ1RyZWVOb2RlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXpl
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43MmJlMDYyMmE1MTAzN2JlMTExNTJkMDlmNDIxZGNjODBlZThkN2VmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9s
bGluZ1RyZWVTdGlja3lOb2RlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGVfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsK
KworY2xhc3MgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5v
ZGUgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKwor
ICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKCk7CisKK3ByaXZhdGU6CisgICAg
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5n
U3RhdGVOb2RlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVyc0FmdGVy
QW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25z
dCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRp
dmVEZWx0YSkgb3ZlcnJpZGU7CisKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
bV9sYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19TQ1JPTExJTkdfTk9ERShTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSwgaXNTdGlja3lO
b2RlKCkpCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8g
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5j
cHAKaW5kZXggNGI3MDFjNzgxZmFkMTBiMDE0NmI5NGRkMjg4MzYyZmM1OWEwY2UwMy4uN2Q1ZDg5
NWUzZmY1M2IwOTFmOGJmN2YxOGIxYjdkOGM0Nzc1NjFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuY3BwCkBAIC00ODIsNiArNDgyLDkgQEAgYm9vbCBTY3JvbGxiYXI6OnN1cHBv
cnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKSBjb25zdAogICAgIHJldHVybiAhbV9zY3JvbGxh
YmxlQXJlYS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRl
c3RpbmcoKQogICAgICAgICAmJiAobV9zY3JvbGxhYmxlQXJlYS5oYXNMYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfHwgbV9zY3JvbGxhYmxlQXJlYS5oYXNMYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSkKICAgICAgICAgJiYgbV9zY3JvbGxhYmxlQXJlYS51c2VzQXN5bmNTY3JvbGxpbmco
KTsKKyNlbGlmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKEdUSykKKyAgICBy
ZXR1cm4gIW1fc2Nyb2xsYWJsZUFyZWEuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFk
Rm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkKKyAgICAgICAgJiYgbV9zY3JvbGxhYmxlQXJlYS51c2Vz
QXN5bmNTY3JvbGxpbmcoKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmgKaW5kZXggNmFkYjY1NGM4MTM0YzUxODdlYTk2N2Y4MjBjYWVjZDM2
N2Q0OGQ0OC4uOTUxY2FiMmY1OWJhYzQwNTI4NTYwZWE4NDRiNGNhM2Y4ZWJhYWZlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTGF5ZXIuaApAQCAtMTMxLDYgKzEzMSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CiAgICAgdm9pZCBhZGRDaGlsZChUZXh0dXJl
TWFwcGVyTGF5ZXIqKTsKIAorICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBhZGp1c3RlZFBvc2l0aW9uKCk7IH0KKwogcHJpdmF0ZToKICAgICBjb25zdCBUZXh0dXJlTWFw
cGVyTGF5ZXImIHJvb3RMYXllcigpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IGM1M2JjMDY4NzQwYjk1
NWFmMjk3ZDQxMGQwZTVjYWFlOTYyZjkxY2UuLjYzYzVjNjMxMTYwNmU0ODcwMTNiZjdlOTc4ZjI1
Yzc5YjU1NzM4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHAKQEAgLTE4Miw2ICsxODIsMTggQEAgdm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5h
dGVkR3IKICAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihp
ZCwgc3RhdGUpKTsKIH0KIAorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCitGbG9hdFBvaW50
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmxheWVyUG9zaXRpb24oQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5sYXllclBvc2l0aW9uKGxheWVySUQp
OworfQorCit2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNldExheWVyUG9zaXRpb24oQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbV9j
bGllbnQtPnNldExheWVyUG9zaXRpb24obGF5ZXJJRCwgcCk7Cit9CisjZW5kaWYKKwogUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3Jl
YXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQogewogICAgIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IGZlMTBhM2VkZDg2OWY4ZTc0N2ZkMDU4
MTMyNzlmMjRiMmExMmM4MDUuLjVlM2FkMDY5ZmU2MTQ5ZGZjNDM3NjdlNzBhNzM4M2U2MTVkODk1
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3IuaApAQCAtNTksNiArNTksMTAgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5Rmx1c2hSZXF1aXJlZCgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFNjZW5l
U3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgPSAwOworI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclBvc2l0aW9uKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKKyAgICAgICAgdmlydHVhbCBG
bG9hdFBvaW50IGxheWVyUG9zaXRpb24oQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisjZW5kaWYK
ICAgICB9OwogCiAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdlKiwgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Q2xpZW50Kik7CkBAIC0xMDgsNiArMTEyLDEwIEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIC8qIGF0
bGFzSUQgKi8sIFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNl
OjpDbGllbnQqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29v
cmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIG92ZXJyaWRl
OworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdmlydHVhbCBGbG9hdFBvaW50IGxh
eWVyUG9zaXRpb24oQ29vcmRpbmF0ZWRMYXllcklEKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQm
KSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgLy8gVXBkYXRlQXRsYXM6OkNsaWVudAogICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkU3VyZmFjZT4pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBjYjk0YTk2NTIyYTFl
NGU3MGNmODFjYzE3NDc2NTU2NDcyNDU3MGI5Li43NzdiMGZhN2QxYzY1ZDBkN2UyNzNiMjZkMDI1
ZmNlMmJmYWJmMTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMzk1LDYgKzM5NSwxNSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogICAgIGFkZFJlcGFp
bnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsKIH0KIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlmIChwb3NpdGlv
bigpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnN5bmNQb3Np
dGlvbihwKTsKKyAgICBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworfQorCiB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllciwgQ29udGVudHNMYXllclB1cnBvc2UpCiB7CiAjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggOGE0NWMzNTY1ODU3MDQzNTcxYjJlMzU5Zjc2NmVm
OTFiZDQwY2NjYS4uZmQxMjY2OTNmMzFhZDk4ODNjMGJlMjQ0OGZlN2IwN2YzZDE1MTg0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aApAQCAtNTQsNiArNTQsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3Vy
ZmFjZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3Qm
IGF0bGFzSUQsIEludFBvaW50JiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCisgICAgdmlydHVhbCBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24oQ29vcmRpbmF0ZWRM
YXllcklEKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVyUG9zaXRpb24oQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpID0gMDsKKyNlbmRpZgogfTsKIAog
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKQEAg
LTEwMiw2ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIgPSBDbGlwVG9MYXllcikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoYm9vbCkgb3ZlcnJpZGU7CkBAIC0xNDIsNiArMTQ4LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiwg
dWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIEludFBvaW50JiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpD
bGllbnQqKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0Q29vcmRpbmF0b3IoQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
KiBjb29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0b3I7IH0KIAogICAgIHZv
aWQgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKICAgICB2b2lkIHB1cmdlQmFja2lu
Z1N0b3JlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbENvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmOTBmZmEwM2E3OTBhY2I3MmFmODZhODVkMTI2MzlhNTU2
OTQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5j
bHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
U2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50
JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQ29u
dHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQpCit7CisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9jbGllbnQu
aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIg
PSBtX2NsaWVudC52ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgZmxvYXQgZGVsdGFYID0gaG9y
aXpvbnRhbFNjcm9sbGJhciA/IC13aGVlbEV2ZW50LmRlbHRhWCgpIDogMDsKKyAgICBmbG9hdCBk
ZWx0YVkgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IC13aGVlbEV2ZW50LmRlbHRhWSgpIDogMDsKKwor
ICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBseWluZyB0
aGUgPSBjYXNlIHRvIGRlbHRhWQorICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRh
WCkpCisgICAgICAgIGRlbHRhWCA9IDA7CisgICAgZWxzZQorICAgICAgICBkZWx0YVkgPSAwOwor
CisgICAgaWYgKGRlbHRhWCB8fCBkZWx0YVkpIHsKKyAgICAgICAgaWYgKGRlbHRhWSkgeworICAg
ICAgICAgICAgZGVsdGFZICo9IHZlcnRpY2FsU2Nyb2xsYmFyLT5waXhlbFN0ZXAoKTsKKyAgICAg
ICAgICAgIG1fY2xpZW50LnNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZGVsdGFYKSB7CisgICAgICAgICAgICBkZWx0YVggKj0gaG9yaXpvbnRh
bFNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7CisgICAgICAgICAgICBtX2NsaWVudC5zY3JvbGxCeShG
bG9hdFNpemUoZGVsdGFYLCAwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQ29udHJv
bGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNjYWRmOTUzZjBiYzJlMWQ3MDgyYjZhOWQyZjgwMGMyMGJmYjRh
OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
Y3JvbGxDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsQ29udHJvbGxlcl9oCisKKyNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAi
U2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQ
bGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBXaGVlbEV2ZW50VGVz
dFRyaWdnZXI7CisKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgeworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xsZXJDbGllbnQoKSB7IH0KKworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSA9IDA7CisgICAgdmlydHVh
bCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgPSAwOworICAgIHZpcnR1YWwgU2Nyb2xs
YmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRlZmVy
VGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50
aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbikgY29u
c3QgeyAvKiBEbyBub3RoaW5nICovIH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGVzdERlZmVy
cmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlm
aWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0
IHsgLyogRG8gbm90aGluZyAqLyB9CisKK307CisKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbENvbnRyb2xsZXIpOworCitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgU2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50Jik7CisK
KyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisK
K3ByaXZhdGU6CisgICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgbV9jbGllbnQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorCisjZW5kaWYgLy8gU2Nyb2xsQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCAxYjc4ZmQ4ZWZhMjA3OGY0Yzg4MWQ5Y2EzOWJkMzlj
ZGU0MGY5M2E5Li41NDhkMDkwNWRhYWE5YjE0ZDdmN2NkOTU0ZmJjMDFmOGFhM2Y1MjM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKQEAgLTM0Nyw3ICszNDcs
NyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGlu
YXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaQogCiBUZXh0dXJlTWFwcGVyTGF5ZXIqIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQogewotICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkg
PyBsYXllckJ5SUQoaWQpIDogMDsKKyAgICByZXR1cm4gKGlkICE9IEludmFsaWRDb29yZGluYXRl
ZExheWVySUQpID8gbGF5ZXJCeUlEKGlkKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mIGxheWVySURzKQpAQCAtMzYxLDYgKzM2MSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjcmVhdGVMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbmV3TGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRleHR1cmVNYXBwZXJMYXllcj4oKTsKICAgICBuZXdMYXllci0+c2V0SUQoaWQpOwogICAgIG5l
d0xheWVyLT5zZXRTY3JvbGxDbGllbnQodGhpcyk7CisKICAgICBtX2xheWVycy5hZGQoaWQsIFdU
Rk1vdmUobmV3TGF5ZXIpKTsKIH0KIApAQCAtMzcyLDcgKzM3MywxMCBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBsYQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXIo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1
cmVNYXBwZXJMYXllcj4gbGF5ZXIgPSBtX2xheWVycy50YWtlKGxheWVySUQpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyTGF5ZXI+IGxheWVyOworICAgIHsKKyAgICAgICAgbGF5
ZXIgPSBtX2xheWVycy50YWtlKGxheWVySUQpOworICAgIH0KICAgICBBU1NFUlQobGF5ZXIpOwog
CiAgICAgbV9iYWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7CkBAIC02OTYsNiArNzAw
LDIwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRTY3JvbGxPZmZzZXQo
dWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6CiAgICAgfSk7CiB9CiAKKyNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVy
UG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBp
ZiAoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKSkKKyAgICAg
ICAgbGF5ZXItPnNldFBvc2l0aW9uKHApOworfQorCitGbG9hdFBvaW50IENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6bGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklEKQoreworICAgIFRleHR1
cmVNYXBwZXJMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgcmV0dXJuIGxh
eWVyID8gbGF5ZXItPnBvc2l0aW9uKCkgOiBGbG9hdFBvaW50KCk7Cit9CisjZW5kaWYKKwogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7CiAgICAg
aWYgKG1fY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAppbmRl
eCA2OGFhYmZlNDBjNGRmODE5N2QxNmZiZDYyYjhhZmZhNWU5YzI3OTYwLi41ZjRjNDQzOTI2ZGJj
NDlkOTlmMmM5YmYxZTM0ODhhYTQxZjY5NTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuaApAQCAtNzUsNiArNzUsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNo
KCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKIAorI2lm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKHVpbnQz
Ml90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IGxheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCk7CisjZW5kaWYKKwogICAg
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogZmluZFNjcm9sbGFibGVDb250ZW50c0xheWVy
QXQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbW1p
dFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBv
ZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhy
ZWFkZWRDb21wb3NpdG9yLmNwcAppbmRleCBmZWM1ZjY5MTVkMzEwZTBkNDU5NzNhMTI1Yzc5NGYw
OTNiNGYyMDg0Li5kOTQ1ZmI1ZDQ5YTJlNzYyNmI3NzJmYTVjNTNmOTU5NjI3N2NhNTRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRl
ZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21w
b3NpdG9yLmNwcApAQCAtMjEzLDYgKzIxMywyMiBAQCB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6
Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IEludFNpemUmIG9mZgog
ICAgIG1fY2xpZW50LT5jb21taXRTY3JvbGxPZmZzZXQobGF5ZXJJRCwgb2Zmc2V0KTsKIH0KIAor
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCit2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6c2V0
TGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklELCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
bikKK3sKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBzY2VuZSA9IG1fc2Nl
bmU7CisgICAgbV9zY2VuZS0+YXBwZW5kVXBkYXRlKFtzY2VuZSwgbGF5ZXJJRCwgcG9zaXRpb25d
IHsKKyAgICAgICAgc2NlbmUtPnNldExheWVyUG9zaXRpb24obGF5ZXJJRCwgcG9zaXRpb24pOwor
ICAgIH0pOworICAgIHNldE5lZWRzRGlzcGxheSgpOworfQorCitGbG9hdFBvaW50IFRocmVhZGVk
Q29tcG9zaXRvcjo6bGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklEKQoreworICAgIHJldHVy
biBtX3NjZW5lLT5sYXllclBvc2l0aW9uKGxheWVySUQpOworfQorI2VuZGlmCisKIGJvb2wgVGhy
ZWFkZWRDb21wb3NpdG9yOjplbnN1cmVHTENvbnRleHQoKQogewogICAgIGlmICghZ2xDb250ZXh0
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRD
b21wb3NpdG9yLmgKaW5kZXggNGE3ODlmZDE0M2Y0ODFiM2VjY2QxMjE5OWU1NDUyNjNjNzNmODA1
My4uMTI4NmEzMWZkMzYzOTY1NGRmYzM4ZWI3Mjc5NTQzMTA1ZTliNjAwYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3Np
dG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaApA
QCAtNzcsNiArNzcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKTsKICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KTsKIAorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdm9pZCBzZXRMYXllclBvc2l0
aW9uKHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IGxheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCk7CisjZW5k
aWYKKwogcHJpdmF0ZToKICAgICBUaHJlYWRlZENvbXBvc2l0b3IoQ2xpZW50Kik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggM2I1YTJiMDM1NzU3NDg4
NWExOGIzNzg0MGZiODBhZTFjZDkxYzY1Yy4uZDExYWJkZDc5YTNlOWE3MTY1M2NhZjRjZjhjZmYw
NDlhMDE3ZDFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
QEAgLTEyMyw3ICsxMjMsNyBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAjaW5j
bHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgogI2VuZGlmCiAKQEAgLTc4
MSw3ICs3ODEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UoKQogICAg
IG1fZHJhd2luZ0FyZWEgPSBtX3BhZ2VDbGllbnQuY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwog
ICAgIEFTU0VSVChtX2RyYXdpbmdBcmVhKTsKIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYg
KG1fZHJhd2luZ0FyZWEtPnR5cGUoKSA9PSBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWUp
IHsKICAgICAgICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5ID0gc3RkOjptYWtlX3VuaXF1
ZTxSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5PigqdGhpcyk7CiAjaWYgUExBVEZPUk0o
SU9TKQpAQCAtMTc3OCw3ICsxNzc4LDcgQEAgc3RhdGljIFdlYldoZWVsRXZlbnQgY29hbGVzY2Vk
V2hlZWxFdmVudChEZXF1ZTxOYXRpdmVXZWJXaGVlbEV2ZW50PiYgcXVldWUsIFZlY3QKIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVu
dCYgZXZlbnQpCiB7Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAobV9zY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5ICYmIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS0+aGFuZGxlV2hlZWxF
dmVudChwbGF0Zm9ybShldmVudCkpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTE5MTAs
NyArMTkxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIHVpbnQzMl90IHByb2Nlc3NUeXBlLCBjb25zCiAKIGJvb2wgV2ViUGFnZVByb3h5
OjpzaG91bGRTdGFydFRyYWNraW5nVG91Y2hFdmVudHMoY29uc3QgV2ViVG91Y2hFdmVudCYgdG91
Y2hTdGFydEV2ZW50KSBjb25zdAogewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oSU9TKQogICAgIGZvciAoYXV0byYg
dG91Y2hQb2ludCA6IHRvdWNoU3RhcnRFdmVudC50b3VjaFBvaW50cygpKSB7CiAgICAgICAgIGlm
IChtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHktPmlzUG9pbnRJbk5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKHRvdWNoUG9pbnQubG9jYXRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBmN2M2ZjFlMDJhZTk3
ZTU0YmZjZWNmZDdjZWJiMDRiNTY4OWQyMWJkLi5iZjAzMGRiYmU0NGVhM2E5NTQ3MzczY2FlMTc5
MWIzNGUyZGMxMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBA
IC0zMDAsNyArMzAwLDcgQEAgcHVibGljOgogICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rpb25SZXN1
bHRzKCkgeyByZXR1cm4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cy5nZXQoKTsgfQogI2VuZGlmCiAg
ICAgICAgIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JQcm94eSogc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eS5nZXQoKTsgfQogI2VuZGlmCiAKQEAgLTE1MDcsNyArMTUw
Nyw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZmFpbGluZ1Byb3Zpc2lvbmFsTG9hZFVSTDsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBtX2RyYXdpbmdBcmVhOwot
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
JiYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJveHk+IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTsKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMDllMzI2MjhiZTVkYWE0OGExZGRjNDc3NTk3Njdk
MjFiNGMyYmVlYS4uYzk4YmIzMjk2YzA3YWM0MWRhNjdjOTUxNDc1ZWMyZGY1MDc0YTE4YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShDT0NPQSkKICNp
bmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2VuZGlmCiAKQEAgLTg0Miw4
ICs4NDIsMTAgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmxheWVyVHJlZVN0YXRlSXNGcm96ZW4o
KSBjb25zdAogUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gV2ViQ2hyb21lQ2xpZW50
OjpjcmVhdGVTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlKSBjb25zdAogewogICAgIEFT
U0VSVChtX3BhZ2UtPmNvcmVQYWdlKCkgPT0gcGFnZSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+dHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVJl
bW90ZUxheWVyVHJlZSkKICAgICAgICAgcmV0dXJuIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpjcmVhdGUobV9wYWdlKTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjc0MTA1OWQzNzMxOGQwMDc0MjU3N2JlNGI0OWUyOGRiZGY0
MWEwOS4uOTQ5Zjg2MDlmM2YwNWNjOTQzNDZmYTIzZDNkZTYzZmJiZmQ2MDhhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMjk2LDYgKzI5NiwxOCBAQCB2b2lkIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgR3JhcGhpY3NM
YXllciosCiB7CiB9CiAKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQordm9pZCBUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXll
cklELCBjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG1fY29tcG9zaXRvci0+c2V0TGF5ZXJQ
b3NpdGlvbihsYXllcklELCBwKTsKK30KKworRmxvYXRQb2ludCBUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6bGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklEKQoreworICAgIHJl
dHVybiBtX2NvbXBvc2l0b3ItPmxheWVyUG9zaXRpb24obGF5ZXJJRCk7Cit9CisjZW5kaWYKKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCA3N2UyZTEyMDUzMmI3ZmQwMDIxMDhkNzM5
ZmZjYjFiMTQ5MTlkZDU3Li4yZmU1NjNhZDAxZTRhYjQwYjlhZDE5ZjBhNTA3NTE2YzlhNTc4ZGIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTEyNiw2ICsxMjYsMTAgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZSYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwYWludExheWVyQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSBvdmVycmlkZTsKKyNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclBvc2l0aW9uKHVp
bnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXll
cklEKSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJl
ZUNvbnRleHQ7CiAgICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
LmgKaW5kZXggNTJhMzMzNDEyMWQ4Yjg1NGI1YTU2NmVhYzZjNzQwYzI2MTQwZmMwOC4uNDIzZjAw
MTk5NWI3YzQ4OTkzNzM0Yjg2MGMxMzVmNjVlNGZlY2Y0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtNzUsNiArNzUs
MTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveU5hdGl2ZVN1cmZhY2VIYW5k
bGVGb3JDb21wb3NpdGluZyhib29sJikgb3ZlcnJpZGU7CiAjZW5kaWYKIAorI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBc3lu
Y1Njcm9sbGluZygpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorCiAgICAgLy8gSVBDIG1lc3Nh
Z2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVp
bnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFVwZGF0ZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiOTYzOThlZDM1YzNiMDc4MjRmMjRj
OWM1MGU4ZjMyM2ZhMTE0MGFkLi4wZjgzYmFlN2Q4MmQwZTVlZTQ5MTE3MWZiMmY3OGI4YWJjYWE3
NWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnRE
aXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZl
bnREaXNwYXRjaGVyLmNwcApAQCAtMTE0LDYgKzExNCw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
Ojp3aGVlbEV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxF
dmVuCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3Njcm9sbGluZ1RyZWVzTXV0ZXgpOwogICAgIGlmIChSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdU
cmVlPiBzY3JvbGxpbmdUcmVlID0gbV9zY3JvbGxpbmdUcmVlcy5nZXQocGFnZUlEKSkgeworI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgICAgICAvLyBGSVhNRTogSXQncyBwcmV0dHkgaG9ycmlibGUg
dGhhdCB3ZSdyZSB1cGRhdGluZyB0aGUgYmFjay9mb3J3YXJkIHN0YXRlIGhlcmUuCiAgICAgICAg
IC8vIFdlYkNvcmUgc2hvdWxkIGFsd2F5cyBrbm93IHRoZSBjdXJyZW50IHN0YXRlIGFuZCBrbm93
IHdoZW4gaXQgY2hhbmdlcyBzbyB0aGUKICAgICAgICAgLy8gc2Nyb2xsaW5nIHRyZWUgY2FuIGJl
IG5vdGlmaWVkLgpAQCAtMTIzLDYgKzEyNCw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjp3aGVl
bEV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVuCiAg
ICAgICAgICAgICAgICAgc2Nyb2xsaW5nVHJlZS0+c2V0Q2FuUnViYmVyQmFuZFN0YXRlKGNhblJ1
YmJlckJhbmRBdExlZnQsIGNhblJ1YmJlckJhbmRBdFJpZ2h0LCBjYW5SdWJiZXJCYW5kQXRUb3As
IGNhblJ1YmJlckJhbmRBdEJvdHRvbSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQorI2Vu
ZGlmCiAKICAgICAgICAgU2Nyb2xsaW5nVHJlZTo6RXZlbnRSZXN1bHQgcmVzdWx0ID0gc2Nyb2xs
aW5nVHJlZS0+dHJ5VG9IYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtV2hlZWxFdmVudCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09w
dGlvbnNHVEsuY21ha2UKaW5kZXggZmJkM2M3ZmI1ZjU3NDk5YzgwYjEzMjBlYWViMTlmYzQ1YWJh
MGY0NC4uZWI1MTlhMjg4YThlODNlMTM2YTEwZmI5MzU2ZDZmZDQwMTdhMzJkNCAxMDA2NDQKLS0t
IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlv
bnNHVEsuY21ha2UKQEAgLTE0OCw2ICsxNDgsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBQVUJMSUMgT0ZGKQogIyBDaGFuZ2luZyB0aGVzZSBv
cHRpb25zIGlzIGNvbXBsZXRlbHkgdW5zdXBwb3J0ZWQuCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfM0RfVFJBTlNGT1JNUyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VTU0lCSUxJVFkgUFJJVkFURSBPTikKK1dF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BU1lOQ19TQ1JPTExJTkcgUFJJ
VkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ0FOVkFT
X1BBVEggUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfQ1NTX0lNQUdFX1NFVCBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0NTU19SRUdJT05TIFBSSVZBVEUgT04pCmRpZmYgLS1naXQgYS9DaGFuZ2VM
b2cgYi9DaGFuZ2VMb2cKaW5kZXggZWIxZDMwZWUyNTNjODliNDkxMjVkYmE4MGM1ZjM2MDNkNDAz
ZDQ4My4uYzRkMDk5MWIxYTZlZTZhNzAyZjUyNDYyZmU4YTNlZmM0YzA2NTcwNyAxMDA2NDQKLS0t
IGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE2LTAyLTA0
ICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAgICAgICBb
R1RLXSBJbXBsZW1lbnQgQVNZTkNfU0NST0xMSU5HCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE0MzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlOiBB
ZGQgYSBwcml2YXRlIGZsYWcsIEVOQUJMRV9BU1lOQ19TQ1JPTExJTkcuCisKIDIwMTYtMDEtMzEg
IEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJrQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxd
IEFsbCBBUEkgdGVzdHMgYXJlIGJyb2tlbiBvbiAxNS4xMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270641</attachid>
            <date>2016-02-04 01:22:41 -0800</date>
            <delta_ts>2016-02-11 00:45:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151436-20160204182216.patch</filename>
            <type>text/plain</type>
            <size>116896</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1OTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRlYzg1N2FmOTY4OGYx
OWIzMGIzNTk5NzZiMTMwMDBmZDNhYzE5NC4uYWExNjc5MzNlZTU4NGRiOWYyZjlmZjAxNGNjOGMx
MGY2ZjQ5YTA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxNi0wMi0wNCAgQ2hh
bmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9oQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10g
SW1wbGVtZW50IEFTWU5DX1NDUk9MTElORworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYnJpbmdzIHRoZSBhc3luY2hyb25vdXMgc2Ny
b2xsaW5nIGZlYXR1cmUgdG8gdGhlIGd0ayBwb3J0LiBCYXNpYyBpZGVhIGlzIHRvIGhhbmRsZQor
ICAgICAgICBzY3JvbGwgZXZlbnRzIGluIGEgc2VwYXJhdGUgdGhyZWFkIGNhbGxlZCAnc2Nyb2xs
aW5nIHRocmVhZCcsIG5vdCB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIFRoZSBzY3JvbGwgZXZl
bnRzIGFyZSBwcm9jZXNzZWQgYW5kIG5ldyBwb3NpdGlvbiBvZiByZWxldmFudCBsYXllcnMgaXMg
Y2FsY3VsYXRlZCBhbmQgdGhlbiBtb3ZlCisgICAgICAgIHBsYXRmb3JtTGF5ZXJzIGFjY29yZGlu
ZyB0byB0aGUgcG9zdGlvbnMgaW4gdGhlIHNjcm9sbGluZyB0aHJlYWQuIFZpc2libGUgcmVjdCBp
cyB1cGRhdGVkCisgICAgICAgIGFmdGVyIHRoYXQgaW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gc3lu
Y2hyb25pemluZyB0aGUgY2FsY3VsYXRlZCBwb3NpdGlvbiB3aXRoIEdyYXBoaWNzTGF5ZXIncyBw
b3NpdGlvbi4KKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IGZpeGVk
LCBzdGlja3kgYW5kIG92ZXJmbG93IGVsZW1lbnQgeWV0LiBUaGV5IHdpbGwgYmUgY292ZXJlZCBi
eSBmb2xsb3dpbmcKKyAgICAgICAgcGF0Y2hlcy4gQWxzbywgdGhlIGZlYXR1cmUgaXMgaW1wbGVt
ZW50ZWQgYmFzZWQgb24gdGhlIHRocmVhZGVkIGNvbXBvc2l0b3IuIE90aGVyIGNhc2VzIHdpbGwg
YmUgaGFuZGxlZCBsYXRlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgbmVlZGVkLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlRnJhbWVT
Y3JvbGxpbmdOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGlu
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZTo6U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmg6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlTm9kZTo6Y29tcG9zaXRpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldENvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUaHJlYWQ6On5TY3JvbGxpbmdUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21TY3JvbGxpbmdUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpjcmVhdGVUaHJlYWRJZk5lZWRlZCk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmg6CisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlOjpzaG91bGRIYW5kbGVXaGVlbEV2ZW50U3luY2hyb25vdXNseSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjpzZXRPckNsZWFyTGF0Y2hlZE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZTo6d2lsbFdoZWVsRXZlbnRTdGFydFN3aXBlR2VzdHVyZSk6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6Y3VycmVudFNuYXBQb2ludElu
ZGljZXNEaWRDaGFuZ2UpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3Jh
cGhpY3MvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3Jh
cGhpY3M6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBo
aWNzOjp+QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhp
Y3M6OnBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBo
aWNzOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRH
cmFwaGljczo6Y29tbWl0VHJlZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjp1cGRhdGVUaWxlZFNjcm9sbGluZ0lu
ZGljYXRvcik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9B
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpTY3JvbGxp
bmdDb29yZGluYXRvckd0ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
ckd0azo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0Nvb3JkaW5hdG9yR3RrOjpwYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckd0azo6aGFuZGxlV2hlZWxFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckd0azo6c2NoZWR1bGVUcmVlU3Rh
dGVDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNv
bW1pdFRyZWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvckd0
azo6dXBkYXRlVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL2d0ay9TY3JvbGxpbmdDb29yZGluYXRvckd0ay5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
OjpzZXRTY3JvbGxiYXJQYWludGVyc0Zyb21TY3JvbGxiYXJzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3RrLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1J1bkxvb3A6OlNjcm9sbGluZ1J1bkxvb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nUnVuTG9vcDo6Y2FsbE9uU2Nyb2xsaW5nUnVuTG9vcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdSdW5Mb29wOjpydW5Mb29wKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RocmVhZDo6flNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUaHJlYWQ6OmluaXRpYWxpemVSdW5Mb29wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RocmVhZDo6dGVybWluYXRlU2Nyb2xsaW5nVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2gpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlRml4ZWROb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp+U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp1cGRhdGVMYXll
cnNBZnRlckFuY2VzdG9yQ2hhbmdlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Ny
b2xsaW5nVHJlZUZpeGVkTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9n
dGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGspOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6flNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVHdGspOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUd0azo6bGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZUJlZm9yZUNo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVHdGs6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjppc0FscmVhZHlQaW5u
ZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRTY3JvbGxQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNl
dFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBkYXRlTGF5ZXJzQWZ0ZXJWaWV3cG9ydENoYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjptaW5p
bXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUd0azo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZU1haW5GcmFtZVBp
blN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVHdGs6OmxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6bG9nVGhy
ZWFkZWRTY3JvbGxpbmdNb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoU2Nyb2xs
aW5nVHJlZUd0azo6Y3JlYXRlKToKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVHdGs6OlNjcm9sbGlu
Z1RyZWVHdGspOgorICAgICAgICAoU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRlU2Nyb2xsaW5nVHJl
ZU5vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3RrLmg6
IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5
Tm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5v
ZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGU6On5TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5j
ZXN0b3JDaGFuZ2UpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVl
U3RpY2t5Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhy
ZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnBvc2l0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRp
bmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpsYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnNldExheWVyUG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNQ
b3NpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpjb29yZGluYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nj
cm9sbENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRy
b2xsZXI6OlNjcm9sbENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJv
bGxlcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbENv
bnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xp
ZW50Ojp+U2Nyb2xsQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxD
b250cm9sbGVyQ2xpZW50OjpkZWZlclRlc3RzRm9yUmVhc29uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbENvbnRyb2xsZXJDbGllbnQ6OnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbik6CisK
IDIwMTYtMDEtMzEgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCByZXNpemUgZXZlbnQgZm9yIEhUTUxNZWRpYUVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4ZDg2
ZDRlOTFjYTE5ZmY1OTk0ZTAxODIyYzQyYWUyYTRjMTg0MDhjLi4yZThhZWM1NmJjNWU4NThlYzZk
ZTBkNzY4M2E1MDZlNmIzZDExZjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTYt
MDItMDQgIENoYW5nU2VvayBPaCAgPGNoYW5nc2Vvay5vaEBjb2xsYWJvcmEuY29tPgorCisgICAg
ICAgIFtHVEtdIEltcGxlbWVudCBBU1lOQ19TQ1JPTExJTkcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTQzNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vc3Qgb2YgY2hhbmdlcyBpbiBXZWJLaXQyIGxh
eWVyIGlzIHJlbGF0ZWQgdG8gYWRkaW5nIGFuIGludGVyZmFjZSB0byByZWFjaCBUZXh0dXJlTWFw
cGVyTGF5ZXIKKyAgICAgICAgZnJvbSBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLiBXaXRoIHRoaXMg
aW50ZXJmYWNlLCB3ZSBjYW4gZ2V0L3NldCBwb3N0aW9uIGZyb20vdG8gVGV4dHVyZU1hcHBlckxh
eWVyLgorCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpsYXllclBvc2l0aW9uKToKKyAgICAgICAgKiBTaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaDoKKyAgICAgICAg
KiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRD
b21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb21wb3NpdG9yOjpzZXRM
YXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb21wb3NpdG9yOjpsYXll
clBvc2l0aW9uKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRl
ZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6
ZVdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3VsZFN0YXJ0VHJhY2tpbmdU
b3VjaEV2ZW50cyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllclBvc2l0aW9uKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpz
dXBwb3J0c0FzeW5jU2Nyb2xsaW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZl
bnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp3aGVl
bEV2ZW50KToKKwogMjAxNi0wMS0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgR2V0IHJpZCBvZiBtb3N0IGNhbGxzIHRvIFN0cmluZzo6dXBwZXI7IG1vc3RseSBy
ZXBsYWNlIHRoZW0gd2l0aCBjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAyNDk3YmVkZjQzMjAwMTgxYzkyNzM2NDA1NWI2YmYxNTMyNjgwNmE3Li5kMGVlOTVi
NDAwNmI2YmU3NzdiOWE0MjhmNzU1NzJlYzQ5MjA5NDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMjA2OSw2ICsyMDY5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3lSZXNwb25zZUhlYWRlcnMuY3BwCiAKKyAgICBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcAogICAgIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5jcHAKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcAogICAgIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQppbmRleCAzNGNjZDUzNDc3ODNkZmI4NzUxYjRkMzFlM2E4ZjAwZjBhYzdlMzUwLi4xMjlm
YWYzYzZhNDQzMTkzMWYzNWM2YTgzM2YxNzM2YjJkYzVkYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtMjUsNiArMjUsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eS9hdGsiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L2VkaXRpbmcvYXRrIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlL2d0ayIK
KyAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9zY3JvbGxpbmcvZ3RrIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9jYWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2VvY2x1
ZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrIgpAQCAtMjMyLDYgKzIzMywxNCBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtfU09VUkNFUwogICAgIHBhZ2UvZ3RrL0Ry
YWdDb250cm9sbGVyR3RrLmNwcAogICAgIHBhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAKIAor
ICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdDb29yZGluYXRvckd0ay5jcHAKKyAgICBw
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3Bw
CisgICAgcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RocmVhZEd0ay5jcHAKKyAgICBwYWdl
L3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHAKKyAgICBwYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKKyAgICBwYWdl
L3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUd0ay5jcHAKKyAgICBwYWdlL3Njcm9sbGluZy9n
dGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCisKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCkBAIC0yNTYsNiArMjY1LDcgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZVBsYXRmb3JtR1RLX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3Vz
ZUV2ZW50R3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKICAg
ICBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcAorICAgIHBsYXRmb3JtL2d0
ay9TY3JvbGxDb250cm9sbGVyLmNwcAogICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0
ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1dp
ZGdldEd0ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0Fz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggMDI5MWE0ZmQwNjkxZjBiODg5
NzdmOWZlMWIxNjk4N2E1MzI2NGZkZi4uNzdmYjNhMzZkMDNiNjhlOTU2ZDdhMDE3OTVlYWQxN2E3
MjI5MmRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTQ0LDYgKzQ0LDEwIEBACiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmln
Z2VyLmgiCiAKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2Uq
IHBhZ2UpCkBAIC03MSwxMCArNzUsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldFN0YXRlU2Ny
b2xsaW5nTm9kZVNuYXBPZmZzZXRzQXNGbG9hdChTY3JvbGxpbmdTdGF0ZVNjcm9sbGkKICAgICAg
ICAgZm9yIChhdXRvJiBvZmZzZXQgOiAqc25hcE9mZnNldHMpCiAgICAgICAgICAgICBzbmFwT2Zm
c2V0c0FzRmxvYXQudW5jaGVja2VkQXBwZW5kKHJvdW5kVG9EZXZpY2VQaXhlbChvZmZzZXQsIGRl
dmljZVNjYWxlRmFjdG9yLCBmYWxzZSkpOwogICAgIH0KKworI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCiAgICAgaWYgKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKQogICAg
ICAgICBub2RlLnNldEhvcml6b250YWxTbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0c0FzRmxvYXQpOwog
ICAgIGVsc2UKICAgICAgICAgbm9kZS5zZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKHNuYXBPZmZzZXRz
QXNGbG9hdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShheGlzKTsKKyAgICBVTlVTRURfUEFS
QU0obm9kZSk7CisjZW5kaWYKIH0KIAogdm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkRpcnR5KCkKQEAgLTQ1MSw2ICs0NjEsOSBAQCB2b2lk
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZShTY3Jv
bGxpbmdOb2RlSUQgbm9kZUlELAogICAgIG5vZGUtPnNldEluc2V0Q2xpcExheWVyKGluc2V0Q2xp
cExheWVyKTsKICAgICBub2RlLT5zZXRTY3JvbGxlZENvbnRlbnRzTGF5ZXIoc2Nyb2xsZWRDb250
ZW50c0xheWVyKTsKICAgICBub2RlLT5zZXRDb3VudGVyU2Nyb2xsaW5nTGF5ZXIoY291bnRlclNj
cm9sbGluZ0xheWVyKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgbm9kZS0+
c2V0Q29tcG9zaXRpbmdDb29yZGluYXRvcihkb3duY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI+KGxheWVyKS0+Y29vcmRpbmF0b3IoKSk7CisjZW5kaWYKIAogICAgIGlmIChzY3JvbGxpbmdH
ZW9tZXRyeSkgewogICAgICAgICBub2RlLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsaW5nR2VvbWV0
cnktPnNjcm9sbE9yaWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggNTNiOThjMTQ1YTM3MjllYzhkMjUx
ZmNlMjdlYjY2ZTRmNzk3YjAwYS4uNjU1NTViNWZmMjUwNmY5MGYyYWFmNmVkYjdlNGY2OGZkY2Qz
MmMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtNDQsNyArNDQsOSBAQAogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorI2luY2x1
ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmgiCisjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNz
LmgiCiAjZW5kaWYKIApAQCAtNTgsNyArNjAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYg
IVBMQVRGT1JNKENPQ09BKQogUmVmPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCiB7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrKHBhZ2UpKTsKKyNlbGlmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdDb29yZGluYXRvckNv
b3JkaW5hdGVkR3JhcGhpY3MocGFnZSkpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3Jv
bGxpbmdOb2RlLmNwcAppbmRleCA4NTAzOTM2YTFhNTFhNTU3MjVlNWRjMjMzYjFmN2NlZTY2NGYz
NDdkLi4wNWQwNTc5N2ExZmExZWViOWZlZjA2YzE0ZjI1ZGI1MzQ0ZGM4MmQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xs
aW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCkBAIC00OCw2ICs0OCw5IEBAIFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZShj
b25zdCBTY3JvbGxpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJh
clBhaW50ZXIoc3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlcigpKQogICAgICwgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcihzdGF0ZU5vZGUuaG9yaXpvbnRhbFNjcm9sbGJhclBh
aW50ZXIoKSkKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAsIG1fdmVydGljYWxTY3JvbGxiYXIo
c3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxi
YXIoc3RhdGVOb2RlLmhvcml6b250YWxTY3JvbGxiYXIoKSkKICNlbmRpZgogICAgICwgbV9ub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihzdGF0ZU5vZGUubm9uRmFzdFNjcm9sbGFibGVSZWdpb24oKSkK
ICAgICAsIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc3RhdGVOb2RlLnJlcXVlc3RlZFNjcm9s
bFBvc2l0aW9uKCkpCkBAIC0yMTUsNyArMjE4LDcgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6c2V0Rml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZShib28K
ICAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoRml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFt
ZSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShHVEspCiB2b2lkIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpzZXRTY3Jv
bGxiYXJQYWludGVyc0Zyb21TY3JvbGxiYXJzKFNjcm9sbGJhciosIFNjcm9sbGJhciopCiB7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaAppbmRleCBkNTdkMWZkOWY3MGE4NmM5MmE5
MGFlMzFjNzVhNzk1MmZjZDY5Y2FhLi4zYTJhYzM5MWYzZjYyMjZiZDQ2NzBiZGQ0OWQ5MDM3YzVk
NDI2ODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgKQEAgLTExNiw2ICsxMTYs
OSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFNjcm9sbGJhclBhaW50ZXIgdmVy
dGljYWxTY3JvbGxiYXJQYWludGVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJh
clBhaW50ZXIuZ2V0KCk7IH0KICAgICBTY3JvbGxiYXJQYWludGVyIGhvcml6b250YWxTY3JvbGxi
YXJQYWludGVyKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlci5n
ZXQoKTsgfQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOyB9CisgICAgU2Nyb2xs
YmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyOyB9CiAjZW5kaWYKICAgICB2b2lkIHNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9s
bGJhcnMoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciwgU2Nyb2xsYmFyKiBob3Jpem9udGFs
U2Nyb2xsYmFyKTsKIApAQCAtMTM1LDYgKzEzOCw5IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYWludGVyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFy
UGFpbnRlcjsKICAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlcj4gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyUGFpbnRlcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBTY3JvbGxiYXIqIG1fdmVy
dGljYWxTY3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyKiBtX2hvcml6b250YWxTY3JvbGxiYXI7CiAj
ZW5kaWYKIAogICAgIFJlZ2lvbiBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKaW5k
ZXggZDNlNGY3NmZjMDViOGM3MGFhNjAxNWM1YjhkNTI0ZDkyNWMxNDIxNS4uM2FjODU1ZWJlNTE5
MWI4NjIwNTc3N2Q0MWY4NTVhZmE3MGQ3MTNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwCkBAIC00Miw2ICs0Miw5IEBA
IFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ05vZGVUeXBl
IG5vZGVUeXBlLCBTY3JvbGxpbmdTdGF0CiAgICAgLCBtX2NoYW5nZWRQcm9wZXJ0aWVzKDApCiAg
ICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShzY3JvbGxpbmdTdGF0ZVRyZWUpCiAgICAgLCBtX3Bh
cmVudChudWxscHRyKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICAsIG1fY29t
cG9zaXRpbmdDb29yZGluYXRvcihudWxscHRyKQorI2VuZGlmCiB7CiB9CiAKQEAgLTUzLDYgKzU2
LDkgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxpbmdTdGF0ZU5vZGUoY29uc3QgU2Nyb2xs
aW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUsIFNjcm8KICAgICAsIG1fY2hhbmdlZFByb3BlcnRpZXMo
c3RhdGVOb2RlLmNoYW5nZWRQcm9wZXJ0aWVzKCkpCiAgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJl
ZShhZG9wdGl2ZVRyZWUpCiAgICAgLCBtX3BhcmVudChudWxscHRyKQorI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyAgICAsIG1fY29tcG9zaXRpbmdDb29yZGluYXRvcihzdGF0ZU5vZGUu
Y29tcG9zaXRpbmdDb29yZGluYXRvcigpKQorI2VuZGlmCiB7CiAgICAgaWYgKGhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxMYXllcikpCiAgICAgICAgIHNldExheWVyKHN0YXRlTm9kZS5sYXllcigp
LnRvUmVwcmVzZW50YXRpb24oYWRvcHRpdmVUcmVlLnByZWZlcnJlZExheWVyUmVwcmVzZW50YXRp
b24oKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZU5vZGUuaAppbmRleCBhY2I2MDFjOWU4ODZkNmZmYzJjMDY4MWEwZDExYmIyOTZkZTUyZjJh
Li44ZWJlMzUyMmJkMGY0N2E5YjNmM2UwZTA5Y2RiYWQyOWEzZjAwYjJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaApAQCAtNDAs
NiArNDAsMTAgQEAgY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJl
ZTsKIGNsYXNzIFRleHRTdHJlYW07CiAKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCitj
bGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQ7CisjZW5kaWYKKwogLy8gVXNlZCB0
byBhbGxvdyBTY3JvbGxpbmdTdGF0ZU5vZGVzIHRvIHJlZmVyIHRvIGxheWVycyBpbiB2YXJpb3Vz
IGNvbnRleHRzOgogLy8gYSkgQXN5bmMgc2Nyb2xsaW5nLCBtYWluIHRocmVhZDogU2Nyb2xsaW5n
U3RhdGVOb2RlIGhvbGRzIG9udG8gYSBHcmFwaGljc0xheWVyLCBhbmQgdXNlcyBtX2xheWVySUQK
IC8vICAgIHRvIGRldGVjdCB3aGV0aGVyIHRoYXQgR3JhcGhpY3NMYXllcidzIHVuZGVybHlpbmcg
UGxhdGZvcm1MYXllciBjaGFuZ2VkLgpAQCAtMjM0LDYgKzIzOCwxMSBAQCBwdWJsaWM6CiAKICAg
ICBTdHJpbmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkgY29uc3Q7CiAKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBj
b21wb3NpdGluZ0Nvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudCogY29tcG9zaXRpbmdDb29yZGluYXRvcikgeyBtX2NvbXBvc2l0
aW5nQ29vcmRpbmF0b3IgPSBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yOyB9CisjZW5kaWYKKwogcHJv
dGVjdGVkOgogICAgIFNjcm9sbGluZ1N0YXRlTm9kZShjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUm
LCBTY3JvbGxpbmdTdGF0ZVRyZWUmKTsKIApAQCAtMjUyLDYgKzI2MSwxMCBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4+PiBt
X2NoaWxkcmVuOwogCiAgICAgTGF5ZXJSZXByZXNlbnRhdGlvbiBtX2xheWVyOworCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dCogbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmNwcAppbmRleCA0NjY5YTE5OTI4N2E2Y2FmMGFlYmM2YmJiYTVhN2VlZTVjNWViZDZi
Li44OWI1NmU2ZjQzMGMzYTMyMDUwMDFjMDk0NjBjMDM0MDU3NjkwNTAyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTM0LDE1
ICszNCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oR1RLKQog
U2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQoKQogICAgIDogbV90aHJlYWRJZGVudGlm
aWVyKDApCiB7CiB9CiAKLWJvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQor
U2Nyb2xsaW5nVGhyZWFkOjp+U2Nyb2xsaW5nVGhyZWFkKCkKIHsKLSAgICBhdXRvIHRocmVhZElk
ZW50aWZpZXIgPSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkSWRlbnRpZmll
cjsKLSAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gdGhy
ZWFkSWRlbnRpZmllcjsKIH0KIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCkBAIC01OCw2ICs1NywyNyBAQCB2b2lkIFNjcm9s
bGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKICAg
ICBzY3JvbGxpbmdUaHJlYWQud2FrZVVwUnVuTG9vcCgpOwogfQogCit2b2lkIFNjcm9sbGluZ1Ro
cmVhZDo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFkKCkKK3sKKyAgICBBU1NF
UlQoaXNDdXJyZW50VGhyZWFkKCkpOworCisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4+IGZ1bmN0aW9uczsKKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fZnVuY3Rpb25zTXV0ZXgpOworICAgICAgICBmdW5jdGlvbnMgPSBXVEZNb3ZlKG1fZnVuY3Rp
b25zKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQorICAg
ICAgICBmdW5jdGlvbigpOworfQorI2VuZGlmCisKK2Jvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1
cnJlbnRUaHJlYWQoKQoreworICAgIGF1dG8gdGhyZWFkSWRlbnRpZmllciA9IFNjcm9sbGluZ1Ro
cmVhZDo6c2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlmaWVyOworICAgIHJldHVybiB0aHJlYWRJ
ZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWRJZGVudGlmaWVyOworfQorCiB2
b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hCYXJyaWVyKHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZnVuY3Rpb24pCiB7CiAgICAgZGlzcGF0Y2goW2Z1bmN0aW9uXSgpIG11dGFibGUgewpAQCAt
ODUsNiArMTA1LDggQEAgdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVk
KCkKICAgICAgICAgCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1
bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFk
UnVuTG9vcDsgfSk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIG1faW5pdGlhbGl6ZVJ1
bkxvb3BDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2spOwogI2VuZGlmCiAgICAgfQogfQpAQCAt
MTAwLDIxICsxMjIsNiBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQm9keSgpCiAgICAg
aW5pdGlhbGl6ZVJ1bkxvb3AoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNo
RnVuY3Rpb25zRnJvbVNjcm9sbGluZ1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzQ3VycmVudFRo
cmVhZCgpKTsKLQotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBmdW5jdGlvbnM7
Ci0gICAgCi0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2Z1bmN0
aW9uc011dGV4KTsKLSAgICAgICAgZnVuY3Rpb25zID0gV1RGTW92ZShtX2Z1bmN0aW9ucyk7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZ1bmN0aW9ucykKLSAgICAgICAgZnVu
Y3Rpb24oKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVGhyZWFkLmgKaW5kZXggYTcwOWNjZDhlNzg2MzYyOWRlOGEyODNjNDYzY2E5Yzc3MDUx
YzcxNS4uYjhmZjI5N2E2ZWE1ODM2MjljM2Y4ZTE3YWU5OTkxYjJmMmRiZTc4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKQEAgLTQyLDEw
ICs0MiwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShHVEspCitj
bGFzcyBTY3JvbGxpbmdSdW5Mb29wOworI2VuZGlmCisKIGNsYXNzIFNjcm9sbGluZ1RocmVhZCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsaW5nVGhyZWFkKTsKLQogcHVibGljOgor
ICAgIHZpcnR1YWwgflNjcm9sbGluZ1RocmVhZCgpOworCiAgICAgc3RhdGljIGJvb2wgaXNDdXJy
ZW50VGhyZWFkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGF0Y2goc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPik7CiAKQEAgLTYzLDI4ICs2OCwzMyBAQCBwcml2YXRlOgogICAg
IHZvaWQgY3JlYXRlVGhyZWFkSWZOZWVkZWQoKTsKICAgICBzdGF0aWMgdm9pZCB0aHJlYWRDYWxs
YmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpOwogICAgIHZvaWQgdGhyZWFkQm9keSgpOwotICAg
IHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFkKCk7CiAKICAgICB2b2lk
IGluaXRpYWxpemVSdW5Mb29wKCk7Ci0gICAgdm9pZCB3YWtlVXBSdW5Mb29wKCk7CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbVNjcm9sbGluZ1Ro
cmVhZCgpOworICAgIHZvaWQgd2FrZVVwUnVuTG9vcCgpOwogICAgIHN0YXRpYyB2b2lkIHRocmVh
ZFJ1bkxvb3BTb3VyY2VDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpOwogICAgIHZvaWQg
dGhyZWFkUnVuTG9vcFNvdXJjZUNhbGxiYWNrKCk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
dm9pZCB0ZXJtaW5hdGVTY3JvbGxpbmdUaHJlYWQoKTsKICNlbmRpZgogCiAgICAgVGhyZWFkSWRl
bnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXpl
UnVuTG9vcENvbmRpdGlvblZhcmlhYmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11
dGV4OwotCiAgICAgTG9jayBtX2Z1bmN0aW9uc011dGV4OwotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+PiBtX2Z1bmN0aW9uczsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFZl
Y3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2Z1bmN0aW9uczsKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHVzZSBXZWJDb3JlOjpSdW5Mb29wIGhlcmUuCiAgICAgUmV0YWluUHRyPENGUnVu
TG9vcFJlZj4gbV90aHJlYWRSdW5Mb29wOwogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BTb3VyY2VS
ZWY+IG1fdGhyZWFkUnVuTG9vcFNvdXJjZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBDb25k
aXRpb24gbV90ZXJtaW5hdGVSdW5Mb29wQ29uZGl0aW9uOworICAgIExvY2sgbV90ZXJtaW5hdGVS
dW5Mb29wTXV0ZXg7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGluZ1J1bkxvb3A+IG1fdGhy
ZWFkUnVuTG9vcDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlLmNwcAppbmRleCA0NzZiNGMyNzFkOWJhYTE1NDkwNTI0NzQ2OWE1
Y2FmZjdlZjRmM2Q0Li5hOWU1NjJjZjI1OGI0OTYzMDg0YzM2NmU4Y2QzY2VkMWEwYzQ2ZDJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcApA
QCAtNTAsNiArNTAsNyBAQCBTY3JvbGxpbmdUcmVlOjp+U2Nyb2xsaW5nVHJlZSgpCiAKIGJvb2wg
U2Nyb2xsaW5nVHJlZTo6c2hvdWxkSGFuZGxlV2hlZWxFdmVudFN5bmNocm9ub3VzbHkoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogeworI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgdGhlIGV2ZW50IGhhbmRsaW5nIHRocmVh
ZAogICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKIApAQCAtNzEsMTUgKzcyLDIzIEBAIGJv
b2wgU2Nyb2xsaW5nVHJlZTo6c2hvdWxkSGFuZGxlV2hlZWxFdmVudFN5bmNocm9ub3VzbHkoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50CiAgICAgICAgIGlmIChtX25vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uLmNvbnRhaW5zKHJvdW5kZWRJbnRQb2ludChwb3NpdGlvbikpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVudCk7Cisj
ZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZTo6c2V0T3JD
bGVhckxhdGNoZWROb2RlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgU2Ny
b2xsaW5nTm9kZUlEIG5vZGVJRCkKIHsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAod2hl
ZWxFdmVudC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkpCiAgICAgICAgIHNldExhdGNoZWROb2Rl
KG5vZGVJRCk7CiAgICAgZWxzZSBpZiAod2hlZWxFdmVudC5zaG91bGRSZXNldExhdGNoaW5nKCkp
CiAgICAgICAgIGNsZWFyTGF0Y2hlZE5vZGUoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdo
ZWVsRXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShub2RlSUQpOworI2VuZGlmCiB9CiAKIHZvaWQg
U2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQpCkBAIC0zMjYsNiArMzM1LDcgQEAgU2Nyb2xsUGlubmluZ0JlaGF2aW9yIFNj
cm9sbGluZ1RyZWU6OnNjcm9sbFBpbm5pbmdCZWhhdmlvcigpCiAKIGJvb2wgU2Nyb2xsaW5nVHJl
ZTo6d2lsbFdoZWVsRXZlbnRTdGFydFN3aXBlR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQpCiB7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKHdoZWVsRXZl
bnQucGhhc2UoKSAhPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTMzOSw3ICszNDksOSBAQCBib29sIFNjcm9sbGluZ1RyZWU6OndpbGxX
aGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAod2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYg
bV9tYWluRnJhbWVQaW5uZWRUb1RoZUJvdHRvbSAmJiAhbV9ydWJiZXJCYW5kc0F0Qm90dG9tKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVu
dCk7CisjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCmluZGV4IDQ4
Mzk4NmFmNWZiZWZmMTA1ZWY0NGMyNTgxZWVmOGQxNDQwZjZmNWUuLmQyNmQzNjA2ZTllY2IzZDgz
YmZlZTQ2YTdiMTMyN2ZiMmQ0MGVkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcApAQCAtMTE4LDcgKzExOCw5
IEBAIHZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0Rp
ZENoYW5nZShTY3JvbGxpbmdOb2RlSUQgbm9kCiAKICAgICBSZWZQdHI8QXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvcj4gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9y
OwogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2Nyb2xsaW5nQ29vcmRpbmF0b3IsIG5v
ZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWxdIHsKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhub2RlSUQs
IGhvcml6b250YWwsIHZlcnRpY2FsKTsKKyNlbmRpZgogICAgIH0pOwogfQogCkBAIC0xNjYsNyAr
MTY4LDYgQEAgdm9pZCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OnJlbW92ZVRlc3REZWZlcnJhbEZv
clJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlMKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOwog
ICAgIH0pOwogfQotCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzczYmFhYmVjYjU4
YzU3OGU1YWM1ZjEyNWNjOTQwY2EwZDEzYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQorCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2lu
Y2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorI2luY2x1
ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUu
aCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgiCisjaW5j
bHVkZSAiU2Nyb2xsaW5nVHJlZUd0ay5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlZjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZShQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzKHBhZ2UpKTsKK30KKworQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDb29yZGluYXRlZEdyYXBoaWNzKFBhZ2UqIHBhZ2UpCisgICAgOiBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yKHBhZ2UpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVy
KCp0aGlzLCAmQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmNv
bW1pdFRyZWVTdGF0ZSkKK3sKKyAgICBzZXRTY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWVHdGs6
OmNyZWF0ZSh0aGlzKSk7Cit9CisKK0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzOjp+QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3Mo
KQoreworICAgIEFTU0VSVCghc2Nyb2xsaW5nVHJlZSgpKTsKK30KKwordm9pZCBBc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6cGFnZURlc3Ryb3llZCgpCit7Cisg
ICAgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOworCisgICAgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7CisKKyAgICAvLyBJbnZhbGlk
YXRpbmcgdGhlIHNjcm9sbGluZyB0cmVlIHdpbGwgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZSBi
ZXR3ZWVuIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBhbmQgU2Nyb2xsaW5nVHJlZSBvYmplY3Rz
LgorICAgIFJlZlB0cjxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+IHNjcm9sbGluZ1RyZWUgPSBzdGF0
aWNfcG9pbnRlcl9jYXN0PFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4ocmVsZWFzZVNjcm9sbGluZ1Ry
ZWUoKSk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbc2Nyb2xsaW5nVHJlZV0gewor
ICAgICAgICBzY3JvbGxpbmdUcmVlLT5pbnZhbGlkYXRlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFRyZWVT
dGF0ZUlmTmVlZGVkKCkKK3sKKyAgICBjb21taXRUcmVlU3RhdGUoKTsKKyAgICBtX3Njcm9sbGlu
Z1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKK30KKworYm9vbCBBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZp
ZXcmLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChzY3JvbGxp
bmdUcmVlKCktPndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+
IHRocmVhZGVkU2Nyb2xsaW5nVHJlZSA9IGRvd25jYXN0PFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4o
c2Nyb2xsaW5nVHJlZSgpKTsKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRl
ZFNjcm9sbGluZ1RyZWUsIHdoZWVsRXZlbnRdIHsKKyAgICAgICAgdGhyZWFkZWRTY3JvbGxpbmdU
cmVlLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIH0pOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBo
aWNzOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCit7CisgICAgQVNTRVJUKHNjcm9sbGluZ1N0
YXRlVHJlZSgpLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpIHx8IG5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uRGlydHkoKSk7CisgICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVD
b21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFRyZWVTdGF0ZSgpCit7CisgICAg
d2lsbENvbW1pdFRyZWUoKTsKKyAgICBpZiAoIXNjcm9sbGluZ1N0YXRlVHJlZSgpLT5oYXNDaGFu
Z2VkUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8VGhyZWFkZWRT
Y3JvbGxpbmdUcmVlPiB0aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNj
cm9sbGluZ1RyZWU+KHNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKiB1
bnByb3RlY3RlZFRyZWVTdGF0ZSA9IHNjcm9sbGluZ1N0YXRlVHJlZSgpLT5jb21taXQoTGF5ZXJS
ZXByZXNlbnRhdGlvbjo6UGxhdGZvcm1MYXllcklEUmVwcmVzZW50YXRpb24pLnJlbGVhc2UoKTsK
KworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwg
dW5wcm90ZWN0ZWRUcmVlU3RhdGVdIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGlu
Z1N0YXRlVHJlZT4gdHJlZVN0YXRlKHVucHJvdGVjdGVkVHJlZVN0YXRlKTsKKyAgICAgICAgdGhy
ZWFkZWRTY3JvbGxpbmdUcmVlLT5jb21taXROZXdUcmVlU3RhdGUoV1RGOjptb3ZlKHRyZWVTdGF0
ZSkpOworICAgIH0pOworCisgICAgdXBkYXRlVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoKTsKK30K
Kwordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6dXBk
YXRlVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoKQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAg
ICAgIHJldHVybjsKKworICAgIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gZnJhbWVWaWV3
LT50aWxlZEJhY2tpbmcoKTsKKyAgICBpZiAoIXRpbGVkQmFja2luZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgU2Nyb2xsaW5nTW9kZUluZGljYXRpb24gaW5kaWNhdG9yTW9kZTsKKyAgICBpZiAo
c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5bmNocm9ub3VzbHkoKSkKKyAgICAgICAg
aW5kaWNhdG9yTW9kZSA9IFN5bmNocm9ub3VzU2Nyb2xsaW5nQmVjYXVzZU9mU3R5bGVJbmRpY2F0
aW9uOworICAgIGVsc2UKKyAgICAgICAgaW5kaWNhdG9yTW9kZSA9IEFzeW5jU2Nyb2xsaW5nSW5k
aWNhdGlvbjsKKworICAgIHRpbGVkQmFja2luZy0+c2V0U2Nyb2xsaW5nTW9kZUluZGljYXRpb24o
aW5kaWNhdG9yTW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JD
b29yZGluYXRlZEdyYXBoaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29y
ZGluYXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBo
aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzMyZDk2NGFjNTI5ODZiOTY2NzYwNTQ1MDM3ZmMyNzU1MDUxOTMw
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhp
Y3MuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9y
YSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3NfaAorI2RlZmluZSBBc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljc19oCisKKyNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQorCisjaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGluZ1N0
YXRlTm9kZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKK2NsYXNzIFNjcm9s
bGluZ1N0YXRlVHJlZTsKK2NsYXNzIFRocmVhZGVkU2Nyb2xsaW5nVHJlZTsKKworY2xhc3MgQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MgOiBwdWJsaWMgQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MoUGFnZSopOworICAgIHZpcnR1YWwgfkFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRUcmVlU3RhdGVJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIC8vIEhhbmRsZSB0aGUgd2hlZWwg
ZXZlbnQgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuIFJldHVybnMgd2hldGhlciB0aGUgZXZlbnQg
d2FzIGhhbmRsZWQgb3Igbm90LgorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KEZy
YW1lVmlldyYsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBjb21taXRUcmVlU3RhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVkU2Nyb2xs
aW5nSW5kaWNhdG9yKCk7CisKKyAgICBUaW1lciBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRl
clRpbWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKKworI2VuZGlmIC8vIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JD
b29yZGluYXRlZEdyYXBoaWNzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2d0ay9TY3JvbGxpbmdDb29yZGluYXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZlZGU3YjVjMGE1NWQxNTNhNzJhNWVkNDIzNzFiODkwYWU1N2U5YTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0
b3JHdGsuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckd0ay5oIgorCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
Ik1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlR3RrLmgiCisjaW5jbHVkZSAi
VGlsZWRCYWNraW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsaW5nQ29vcmRp
bmF0b3JHdGs6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrKFBhZ2UqIHBhZ2UpCisgICAgOiBBc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNv
bW1pdHRlclRpbWVyKCp0aGlzLCAmU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNvbW1pdFRyZWVT
dGF0ZSkKK3sKKyAgICBzZXRTY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWVHdGs6OmNyZWF0ZSh0
aGlzKSk7Cit9CisKK1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjp+U2Nyb2xsaW5nQ29vcmRpbmF0
b3JHdGsoKQoreworICAgIEFTU0VSVCghc2Nyb2xsaW5nVHJlZSgpKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvckd0azo6cGFnZURlc3Ryb3llZCgpCit7CisgICAgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7CisKKyAgICAvLyBJbnZhbGlkYXRpbmcgdGhlIHNjcm9s
bGluZyB0cmVlIHdpbGwgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZSBiZXR3ZWVuIHRoZSBTY3Jv
bGxpbmdDb29yZGluYXRvciBhbmQgU2Nyb2xsaW5nVHJlZSBvYmplY3RzLgorICAgIFJlZlB0cjxU
aHJlYWRlZFNjcm9sbGluZ1RyZWU+IHNjcm9sbGluZ1RyZWUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0
PFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4ocmVsZWFzZVNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Ny
b2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbc2Nyb2xsaW5nVHJlZV0geworICAgICAgICBzY3JvbGxp
bmdUcmVlLT5pbnZhbGlkYXRlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JHdGs6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCkKK3sKKyAgICBjb21taXRUcmVlU3Rh
dGUoKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKK30K
KworYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvckd0azo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZp
ZXcmLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChzY3JvbGxp
bmdUcmVlKCktPndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+
IHRocmVhZGVkU2Nyb2xsaW5nVHJlZSA9IGRvd25jYXN0PFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4o
c2Nyb2xsaW5nVHJlZSgpKTsKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRl
ZFNjcm9sbGluZ1RyZWUsIHdoZWVsRXZlbnRdIHsKKyAgICAgICAgdGhyZWFkZWRTY3JvbGxpbmdU
cmVlLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIH0pOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpzY2hlZHVsZVRyZWVTdGF0
ZUNvbW1pdCgpCit7CisgICAgQVNTRVJUKHNjcm9sbGluZ1N0YXRlVHJlZSgpLT5oYXNDaGFuZ2Vk
UHJvcGVydGllcygpIHx8IG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRGlydHkoKSk7CisgICAgaWYg
KG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNvbW1pdFRyZWVT
dGF0ZSgpCit7CisgICAgd2lsbENvbW1pdFRyZWUoKTsKKyAgICBpZiAoIXNjcm9sbGluZ1N0YXRl
VHJlZSgpLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiB0aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3du
Y2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xs
aW5nU3RhdGVUcmVlKiB1bnByb3RlY3RlZFRyZWVTdGF0ZSA9IHNjcm9sbGluZ1N0YXRlVHJlZSgp
LT5jb21taXQoTGF5ZXJSZXByZXNlbnRhdGlvbjo6UGxhdGZvcm1MYXllcklEUmVwcmVzZW50YXRp
b24pLnJlbGVhc2UoKTsKKworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3RocmVhZGVk
U2Nyb2xsaW5nVHJlZSwgdW5wcm90ZWN0ZWRUcmVlU3RhdGVdIHsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJlZVN0YXRlKHVucHJvdGVjdGVkVHJlZVN0YXRl
KTsKKyAgICAgICAgdGhyZWFkZWRTY3JvbGxpbmdUcmVlLT5jb21taXROZXdUcmVlU3RhdGUoV1RG
TW92ZSh0cmVlU3RhdGUpKTsKKyAgICB9KTsKKworICAgIHVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OnVwZGF0ZVRpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yKCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1
cm47CisKKyAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGZyYW1lVmlldy0+dGlsZWRC
YWNraW5nKCk7CisgICAgaWYgKCF0aWxlZEJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIGluZGljYXRvck1vZGU7CisgICAgaWYgKHNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpCisgICAgICAgIGluZGljYXRv
ck1vZGUgPSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjsKKyAg
ICBlbHNlCisgICAgICAgIGluZGljYXRvck1vZGUgPSBBc3luY1Njcm9sbGluZ0luZGljYXRpb247
CisKKyAgICB0aWxlZEJhY2tpbmctPnNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKGluZGljYXRv
ck1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNWZhMjgz
NGU3M2ExNTViZDA4MTk3YmVjZGY2MTk1MzM1ZTZlNWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrX2gKKyNkZWZpbmUgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGtfaAorCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBT
Y3JvbGxpbmdTdGF0ZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7Citj
bGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CitjbGFzcyBUaHJlYWRlZFNjcm9sbGluZ1RyZWU7CisK
K2NsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrIDogcHVibGljIEFzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3Rr
KFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdDb29yZGluYXRvckd0aygpOworCisgICAg
dmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0VHJlZVN0YXRlSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICAvLyBIYW5kbGUgdGhlIHdo
ZWVsIGV2ZW50IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2
ZW50IHdhcyBoYW5kbGVkIG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVu
dChGcmFtZVZpZXcmLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CisgICAgdm9pZCB1cGRhdGVUaWxlZFNj
cm9sbGluZ0luZGljYXRvcigpOworCisgICAgVGltZXIgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21t
aXR0ZXJUaW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGluYXRvckd0
a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMTZmNTk1MTIwYTI0ZmU5MDlmNzQ4OThhYWRmNDQ5ZmZiNTU3YzhiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZS5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1
ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGcm9t
U2Nyb2xsYmFycyhTY3JvbGxiYXIqIHZTY3JvbGxiYXIsIFNjcm9sbGJhciogaFNjcm9sbGJhcikK
K3sKKyAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKTsKKyAgICBpZiAoc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHZTY3JvbGxiYXIg
JiYgdlNjcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpCisgICAgICAg
ID8gdlNjcm9sbGJhciA6IG51bGxwdHI7CisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyID0gaFNjcm9sbGJhciAmJiBoU2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5
VGhyZWFkKCkKKyAgICAgICAgPyBoU2Nyb2xsYmFyIDogbnVsbHB0cjsKKworICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyID09IHZlcnRpY2FsU2Nyb2xsYmFyICYmIG1faG9yaXpvbnRhbFNjcm9s
bGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyID0gdlNjcm9sbGJhcjsKKyAgICBtX2hvcml6b250YWxTY3JvbGxiYXIg
PSBoU2Nyb2xsYmFyOworCisgICAgc2V0UHJvcGVydHlDaGFuZ2VkKFBhaW50ZXJGb3JTY3JvbGxi
YXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUaHJlYWRHdGsuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcwOTFhMGEyNTI3YWJmMzRmMThmNzFhYjlkMzIwYzk1OGY1OGZkNDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3Rr
LmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQorCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTY3JvbGxpbmdSdW5Mb29wIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
Y3JvbGxpbmdSdW5Mb29wKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBTY3JvbGxpbmdSdW5Mb29wKCkKKyAgICAgICAgOiBtX3J1bkxvb3AoUnVuTG9vcDo6Y3Vy
cmVudCgpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxPblNjcm9sbGluZ1J1bkxvb3Ao
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCZtX3J1
bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkgeworICAgICAgICAgICAgZnVuY3Rpb24oKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcnVuTG9vcC5kaXNw
YXRjaChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgfQorCisgICAgUnVuTG9vcCYgcnVuTG9vcCgp
IHsgcmV0dXJuIG1fcnVuTG9vcDsgfQorcHJpdmF0ZToKKyAgICBSdW5Mb29wJiBtX3J1bkxvb3A7
Cit9OworCitTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCgpCisgICAgOiBtX3RocmVh
ZElkZW50aWZpZXIoMCkKKyAgICAsIG1fdGhyZWFkUnVuTG9vcChudWxscHRyKQoreworfQorCitT
Y3JvbGxpbmdUaHJlYWQ6On5TY3JvbGxpbmdUaHJlYWQoKQoreworICAgIHRlcm1pbmF0ZVNjcm9s
bGluZ1RocmVhZCgpOworfQorCit2b2lkIFNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxv
b3AoKQoreworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVu
TG9vcE11dGV4KTsKKyAgICAgICAgbV90aHJlYWRSdW5Mb29wID0gc3RkOjptYWtlX3VuaXF1ZTxT
Y3JvbGxpbmdSdW5Mb29wPigpOworCisgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaXNDdXJyZW50VGhy
ZWFkKCkpOworICAgIG1fdGhyZWFkUnVuTG9vcC0+cnVuTG9vcCgpLnJ1bigpOworCisgICAgewor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rlcm1pbmF0ZVJ1bkxvb3BNdXRleCk7CisgICAg
ICAgIG1fdGhyZWFkUnVuTG9vcCA9IG51bGxwdHI7CisgICAgICAgIG1fdGVybWluYXRlUnVuTG9v
cENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAgICBkZXRhY2hUaHJlYWQobV90aHJl
YWRJZGVudGlmaWVyKTsKK30KKwordm9pZCBTY3JvbGxpbmdUaHJlYWQ6OnRlcm1pbmF0ZVNjcm9s
bGluZ1RocmVhZCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV90ZXJtaW5hdGVSdW5Mb29w
TXV0ZXgpOworICAgIG1fdGhyZWFkUnVuTG9vcC0+cnVuTG9vcCgpLnN0b3AoKTsKKyAgICBtX3Rl
cm1pbmF0ZVJ1bkxvb3BDb25kaXRpb24ud2FpdChtX3Rlcm1pbmF0ZVJ1bkxvb3BNdXRleCk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
IGZ1bmN0aW9uKQoreworICAgIGF1dG8mIHNjcm9sbGluZ1RocmVhZCA9IFNjcm9sbGluZ1RocmVh
ZDo6c2luZ2xldG9uKCk7CisgICAgc2Nyb2xsaW5nVGhyZWFkLmNyZWF0ZVRocmVhZElmTmVlZGVk
KCk7CisKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNpbmdsZXRvbigpLm1fZnVu
Y3Rpb25zTXV0ZXgpOworICAgICAgICBzY3JvbGxpbmdUaHJlYWQubV90aHJlYWRSdW5Mb29wLT5j
YWxsT25TY3JvbGxpbmdSdW5Mb29wKGZ1bmN0aW9uKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVk
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY0MzhhM2JhMmQ3NmEzN2E1ODIxNmI5NDI4ODcw
OThmMTg1MTc5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2d0ay9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVl
Rml4ZWROb2RlLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgor
I2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZT4gU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKFNj
cm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZShzY3JvbGxpbmdU
cmVlLCBub2RlSUQpKTsKK30KKworU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6U2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZShTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQg
bm9kZUlEKQorICAgIDogU2Nyb2xsaW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSwgRml4ZWROb2Rl
LCBub2RlSUQpCit7Cit9CisKK1Njcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVl
Rml4ZWROb2RlKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp1cGRhdGVC
ZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlTGF5ZXJz
QWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Ny
b2xsaW5nVHJlZUZpeGVkTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2Y2ZmNGVlMDZkMzllY2Y1ZDBhMDlk
MzY3ZmViODQzYTQ5ZmQ1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlX2gKKyNkZWZp
bmUgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZV9oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0NvbnN0
cmFpbnRzLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKKworY2xh
c3MgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICB2aXJ0
dWFsIH5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNo
YW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVj
dCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKSBv
dmVycmlkZTsKKworICAgIEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIG1fY29uc3Ry
YWludHM7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIG1fbGF5ZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU0NST0xM
SU5HX05PREUoU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSwgaXNGaXhlZE5vZGUoKSkKKworI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlRml4
ZWROb2RlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yYTM2MzNlMDcwNDdiZWQ0OGY5MmMyMTVjZTI2MDFjYzZhN2U5ODJlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuY3BwCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgbG9nVGhyZWFkZWRTY3JvbGxpbmdN
b2RlKHVuc2lnbmVkIHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyk7CisKK1JlZjxTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
R3RrOjpjcmVhdGUoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5nTm9kZUlE
IG5vZGVJRCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlR3RrKHNjcm9sbGluZ1RyZWUsIG5vZGVJRCkpOworfQorCitTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
R3RrKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQp
CisgICAgOiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKHNjcm9sbGluZ1RyZWUsIG5v
ZGVJRCkKKyAgICAsIG1fc2Nyb2xsQ29udHJvbGxlcigqdGhpcykKKyAgICAsIG1fc2Nyb2xsTGF5
ZXIoMCkKKyAgICAsIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyKDApCisgICAgLCBtX2NvdW50ZXJT
Y3JvbGxpbmdMYXllcigwKQorICAgICwgbV9pbnNldENsaXBMYXllcigwKQorICAgICwgbV9jb250
ZW50U2hhZG93TGF5ZXIoMCkKKyAgICAsIG1faGVhZGVyTGF5ZXIoMCkKKyAgICAsIG1fZm9vdGVy
TGF5ZXIoMCkKKyAgICAsIG1fY29tcG9zaXRpbmdDb29yZGluYXRvcihudWxscHRyKQorICAgICwg
bV92ZXJ0aWNhbFNjcm9sbGJhcihudWxscHRyKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
KG51bGxwdHIpCit7Cit9CisKK1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6On5T
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKCkKK3sKK30KKworRmxvYXRQb2ludCBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpsYXllclBvc2l0aW9uKEdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBpZCkgY29uc3QKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisgICAgQVNTRVJUKG1fY29tcG9zaXRpbmdDb29yZGluYXRvcik7CisgICAgcmV0
dXJuIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+bGF5ZXJQb3NpdGlvbihpZCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyNlbmRpZgor
fQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNldExheWVyUG9z
aXRpb24oR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGlkLCBjb25zdCBGbG9hdFBvaW50
JiBwKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBBU1NFUlQobV9jb21w
b3NpdGluZ0Nvb3JkaW5hdG9yKTsKKyAgICBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3ItPnNldExh
eWVyUG9zaXRpb24oaWQsIHApOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaWQpOworICAgIFVO
VVNFRF9QQVJBTShwKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVHdGs6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9k
ZSYgc3RhdGVOb2RlKQoreworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnVw
ZGF0ZUJlZm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7CisgICAgY29uc3QgYXV0byYgc2Nyb2xsaW5n
U3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+KHN0
YXRlTm9kZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yID0gc3RhdGVOb2Rl
LmNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKTsKKyAgICBpZiAoY29tcG9zaXRpbmdDb29yZGluYXRv
ciAmJiBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yICE9IG1fY29tcG9zaXRpbmdDb29yZGluYXRvcikK
KyAgICAgICAgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yID0gY29tcG9zaXRpbmdDb29yZGluYXRv
cjsKKyNlbmRpZgorCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCisgICAgICAgIG1fc2Nyb2xsTGF5
ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQorICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKTsKKworICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlOjpDb3VudGVyU2Nyb2xsaW5nTGF5ZXIpKQorICAgICAgICBtX2NvdW50
ZXJTY3JvbGxpbmdMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5
ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpJbnNldENsaXBMYXllcikpCisgICAgICAg
IG1faW5zZXRDbGlwTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaW5zZXRDbGlwTGF5ZXIoKTsK
KworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKQorICAgICAgICBt
X2NvbnRlbnRTaGFkb3dMYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5jb250ZW50U2hhZG93TGF5
ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpIZWFkZXJMYXllcikpCisgICAgICAgIG1f
aGVhZGVyTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaGVhZGVyTGF5ZXIoKTsKKworICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlOjpGb290ZXJMYXllcikpCisgICAgICAgIG1fZm9vdGVyTGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
OjpQYWludGVyRm9yU2Nyb2xsYmFyKSkgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0g
c2Nyb2xsaW5nU3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7
CisgICAgfQorCisgICAgYm9vbCBsb2dTY3JvbGxpbmdNb2RlID0gIW1faGFkRmlyc3RVcGRhdGU7
CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlJlYXNvbnNGb3JTeW5jaHJvbm91c1Njcm9sbGluZykp
IHsKKyAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91
c2x5KCkpIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIHRyYW5zaXRpb25pbmcgdG8gdGhlIHNsb3cg
InVwZGF0ZSBzY3JvbGwgbGF5ZXIgcG9zaXRpb24gb24gdGhlIG1haW4gdGhyZWFkIiBtb2RlLgor
ICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHJvYmFibGUgbWFpbiB0aHJlYWQgc2Nyb2xs
IHBvc2l0aW9uIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIGxheWVyIHBvc2l0aW9uLgorICAgICAg
ICAgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpCisgICAgICAgICAg
ICAgICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IGxheWVy
UG9zaXRpb24obV9zY3JvbGxMYXllcik7CisgICAgICAgICAgICAgICAgbV9wcm9iYWJsZU1haW5U
aHJlYWRTY3JvbGxQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLXNjcm9sbExheWVyUG9zaXRpb24ueCgp
LCAtc2Nyb2xsTGF5ZXJQb3NpdGlvbi55KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgbG9nU2Nyb2xsaW5nTW9kZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGxvZ1Nj
cm9sbGluZ01vZGUpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdQZXJm
b3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpCisgICAgICAgICAgICBsb2dUaHJlYWRlZFNjcm9sbGlu
Z01vZGUoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKCkpOworICAgIH0KKworICAgIGlmIChz
Y3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6RXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcikpCisgICAgICAgIG1fZXhwZWN0
c1doZWVsRXZlbnRUZXN0VHJpZ2dlciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5leHBlY3RzV2hlZWxF
dmVudFRlc3RUcmlnZ2VyKCk7CisKKyAgICBtX2hhZEZpcnN0VXBkYXRlID0gdHJ1ZTsKK30KKwor
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVBZnRlckNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4oc3RhdGVOb2RlKTsK
KworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgc2Ny
b2xsIHBvc2l0aW9uIGFmdGVyIGNoaWxkIG5vZGVzIGhhdmUgYmVlbiB1cGRhdGVkLCBiZWNhdXNl
IHRoZXkgbmVlZCB0byBoYXZlIHVwZGF0ZWQgdGhlaXIgY29uc3RyYWludHMgYmVmb3JlIGFueSBz
Y3JvbGxpbmcgaGFwcGVucy4KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uKSkKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsaW5nU3RhdGVOb2RlLnJlcXVl
c3RlZFNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikKKyAgICAgICAg
fHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplKQorICAgICAgICB8fCBzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsYWJsZUFyZWFTaXplKSkKKyAgICAgICAgdXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoc2Nyb2xs
UG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0
azo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
Cit7CisgICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Njcm9sbENvbnRyb2xsZXIuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKK30KKwor
Ym9vbCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjppc0FscmVhZHlQaW5uZWRJ
bkRpcmVjdGlvbk9mR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQs
IFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIHN3aXRjaCAoYXhpcykgeworICAgIGNhc2Ug
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDoKKyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRl
bHRhWSgpID4gMCAmJiBzY3JvbGxQb3NpdGlvbigpLnkoKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRp
b24oKS55KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbigp
LnkoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOworICAgIGNhc2UgU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsOgorICAgICAgICByZXR1cm4gKHdoZWVsRXZlbnQuZGVsdGFYKCkg
PiAwICYmIHNjcm9sbFBvc2l0aW9uKCkueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngo
KSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwICYmIHNjcm9sbFBvc2l0aW9uKCkueCgpID49
IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGs6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQorewor
ICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNjcm9sbEJ5KG9mZnNldCk7Cit9
CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2Nyb2xs
UG9zaXRpb24oKSBjb25zdAoreworICAgIGlmIChzaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0
aW9uU3luY2hyb25vdXNseSgpKQorICAgICAgICByZXR1cm4gbV9wcm9iYWJsZU1haW5UaHJlYWRT
Y3JvbGxQb3NpdGlvbjsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbExheWVyUG9zaXRp
b24gPSBsYXllclBvc2l0aW9uKG1fc2Nyb2xsTGF5ZXIpOworICAgIHJldHVybiBGbG9hdFBvaW50
KC1zY3JvbGxMYXllclBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9sbExh
eWVyUG9zaXRpb24ueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpKTsKK30KKwordm9pZCBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICAvLyBTY3JvbGwgZGVsdGFzIGNhbiBiZSBu
b24taW50ZWdyYWwgd2l0aCBzb21lIGlucHV0IGRldmljZXMsIHNvIHNjcm9sbFBvc2l0aW9uIG1h
eSBub3QgYmUgaW50ZWdyYWwuCisgICAgLy8gRklYTUU6IHdoZW4gd2Ugc3VwcG9ydCBoYWxmLXBp
eGVsIHNjcm9sbCBwb3NpdGlvbnMgb24gUmV0aW5hIGRpc3BsYXlzLCB0aGlzIHdpbGwgbmVlZCB0
byByb3VuZCB0byBoYWxmIHBpeGVscy4KKyAgICBGbG9hdFBvaW50IHJvdW5kZWRQb3NpdGlvbihy
b3VuZGYoc2Nyb2xsUG9zaXRpb24ueCgpKSwgcm91bmRmKHNjcm9sbFBvc2l0aW9uLnkoKSkpOwor
CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsUG9zaXRpb24o
cm91bmRlZFBvc2l0aW9uKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQorICAgICAgICBsb2dFeHBvc2VkVW5maWxsZWRBcmVh
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0U2Ny
b2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQ
b3NpdGlvbik7CisKKyAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5bmNo
cm9ub3VzbHkoKSkgeworICAgICAgICBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9u
ID0gc2Nyb2xsUG9zaXRpb247CisgICAgICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVl
Tm9kZURpZFNjcm9sbChzY3JvbGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIFNldFNjcm9s
bGluZ0xheWVyUG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0U2Ny
b2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNj
cm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKHNjcm9sbGluZ05vZGVJRCgpLCBzY3JvbGxQb3NpdGlv
bik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0U2Ny
b2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBBU1NF
UlQoIXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpOworCisg
ICAgc2V0TGF5ZXJQb3NpdGlvbihtX3Njcm9sbExheWVyLCBGbG9hdFBvaW50KC1wb3NpdGlvbi54
KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55
KCkpKTsKKworICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyBiZWhhdmlvckZvckZp
eGVkID0gc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCk7CisgICAgRmxvYXRSZWN0IHZp
ZXdwb3J0UmVjdChGbG9hdFBvaW50KCksIHNjcm9sbGFibGVBcmVhU2l6ZSgpKTsKKworICAgIEZs
b2F0UG9pbnQgc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZENoaWxkcmVuID0gRnJhbWVWaWV3OjpzY3Jv
bGxQb3NpdGlvbkZvckZpeGVkUG9zaXRpb24oZW5jbG9zaW5nTGF5b3V0UmVjdCh2aWV3cG9ydFJl
Y3QpLCBMYXlvdXRTaXplKHRvdGFsQ29udGVudHNTaXplKCkpLCBMYXlvdXRQb2ludChwb3NpdGlv
biksIHNjcm9sbE9yaWdpbigpLCBmcmFtZVNjYWxlRmFjdG9yKCksCisgICAgICAgIGZpeGVkRWxl
bWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSwgYmVoYXZpb3JGb3JGaXhlZCwgaGVhZGVySGVp
Z2h0KCksIGZvb3RlckhlaWdodCgpKTsKKworICAgIGlmIChtX2NvdW50ZXJTY3JvbGxpbmdMYXll
cikKKyAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbihtX2NvdW50ZXJTY3JvbGxpbmdMYXllciwgRmxv
YXRQb2ludChzY3JvbGxQb3NpdGlvbkZvckZpeGVkQ2hpbGRyZW4pKTsKKworICAgIGZsb2F0IHRv
cENvbnRlbnRJbnNldCA9IHRoaXMtPnRvcENvbnRlbnRJbnNldCgpOworICAgIGlmIChtX2luc2V0
Q2xpcExheWVyICYmIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyICYmIHRvcENvbnRlbnRJbnNldCkg
eworICAgICAgICBzZXRMYXllclBvc2l0aW9uKG1faW5zZXRDbGlwTGF5ZXIsIEZsb2F0UG9pbnQo
MCwgRnJhbWVWaWV3Ojp5UG9zaXRpb25Gb3JJbnNldENsaXBMYXllcihwb3NpdGlvbiwgdG9wQ29u
dGVudEluc2V0KSkpOworCisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQgc2Nyb2xsZWRDb250ZW50
c0xheWVyUG9zaXRpb24gPSBsYXllclBvc2l0aW9uKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyKTsK
KyAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbihtX3Njcm9sbGVkQ29udGVudHNMYXllciwgRnJhbWVW
aWV3Ojpwb3NpdGlvbkZvclJvb3RDb250ZW50TGF5ZXIocG9zaXRpb24sIHNjcm9sbE9yaWdpbigp
LCB0b3BDb250ZW50SW5zZXQsIGhlYWRlckhlaWdodCgpKSk7CisgICAgICAgIGlmIChtX2NvbnRl
bnRTaGFkb3dMYXllcikKKyAgICAgICAgICAgIHNldExheWVyUG9zaXRpb24obV9jb250ZW50U2hh
ZG93TGF5ZXIsIHNjcm9sbGVkQ29udGVudHNMYXllclBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBp
ZiAobV9oZWFkZXJMYXllciB8fCBtX2Zvb3RlckxheWVyKSB7CisgICAgICAgIC8vIEdlbmVyYWxs
eSB0aGUgYmFubmVycyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBob3Jpem9udGFsLXBvc2l0aW9uIGNv
bXB1dGF0aW9uIGFzIGEgZml4ZWQgZWxlbWVudC4gSG93ZXZlciwKKyAgICAgICAgLy8gdGhlIGJh
bm5lcnMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUgZnJhbWVTY2FsZUZhY3RvcigpLCBzbyBpZiB0
aGVyZSBpcyBjdXJyZW50bHkgYSBub24tMSBmcmFtZVNjYWxlRmFjdG9yKCkKKyAgICAgICAgLy8g
dGhlbiB3ZSBzaG91bGQgcmVjb21wdXRlIHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJlbiBm
b3IgdGhlIGJhbm5lciB3aXRoIGEgc2NhbGUgZmFjdG9yIG9mIDEuCisgICAgICAgIGZsb2F0IGhv
cml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIgPSBzY3JvbGxQb3NpdGlvbkZvckZpeGVkQ2hp
bGRyZW4ueCgpOworICAgICAgICBpZiAoZnJhbWVTY2FsZUZhY3RvcigpICE9IDEpCisgICAgICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0Rm9yQmFubmVyID0gRnJhbWVWaWV3OjpzY3JvbGxQ
b3NpdGlvbkZvckZpeGVkUG9zaXRpb24oZW5jbG9zaW5nTGF5b3V0UmVjdCh2aWV3cG9ydFJlY3Qp
LCBMYXlvdXRTaXplKHRvdGFsQ29udGVudHNTaXplKCkpLCBMYXlvdXRQb2ludChwb3NpdGlvbiks
IHNjcm9sbE9yaWdpbigpLCAxLCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCks
IGJlaGF2aW9yRm9yRml4ZWQsIGhlYWRlckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSkueCgpOwor
CisgICAgICAgIGlmIChtX2hlYWRlckxheWVyKQorICAgICAgICAgICAgc2V0TGF5ZXJQb3NpdGlv
bihtX2hlYWRlckxheWVyLCBGbG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5u
ZXIsIEZyYW1lVmlldzo6eVBvc2l0aW9uRm9ySGVhZGVyTGF5ZXIocG9zaXRpb24sIHRvcENvbnRl
bnRJbnNldCkpKTsKKworICAgICAgICBpZiAobV9mb290ZXJMYXllcikgeworICAgICAgICAgICAg
c2V0TGF5ZXJQb3NpdGlvbihtX2Zvb3RlckxheWVyLCBGbG9hdFBvaW50KGhvcml6b250YWxTY3Jv
bGxPZmZzZXRGb3JCYW5uZXIsCisgICAgICAgICAgICAgICAgRnJhbWVWaWV3Ojp5UG9zaXRpb25G
b3JGb290ZXJMYXllcihwb3NpdGlvbiwgdG9wQ29udGVudEluc2V0LCB0b3RhbENvbnRlbnRzU2l6
ZSgpLmhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlld3BvcnRSZWN0LnNl
dExvY2F0aW9uKHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJlbik7CisKKyAgICBmb3IgKGF1
dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRl
ckFuY2VzdG9yQ2hhbmdlKCp0aGlzLCB2aWV3cG9ydFJlY3QsIEZsb2F0U2l6ZSgpKTsKK30KKwor
dm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVMYXllcnNBZnRl
clZpZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlR3RrOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIEZsb2F0UG9p
bnQgcG9zaXRpb247CisgICAgaWYgKHNjcm9sbGluZ1RyZWUoKS5yb290Tm9kZSgpID09IHRoaXMg
JiYgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBpbm5pbmdCZWhhdmlvcigpID09IFBpblRvQm90dG9t
KQorICAgICAgICBwb3NpdGlvbi5zZXRZKG1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7CisK
KyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUd0azo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBG
bG9hdFBvaW50IHBvc2l0aW9uKHRvdGFsQ29udGVudHNTaXplRm9yUnViYmVyQmFuZCgpIC0gc2Ny
b2xsYWJsZUFyZWFTaXplKCkpOworICAgIHBvc2l0aW9uID0gcG9zaXRpb24uZXhwYW5kZWRUbyhG
bG9hdFBvaW50KCkpOworCisgICAgaWYgKHNjcm9sbGluZ1RyZWUoKS5yb290Tm9kZSgpID09IHRo
aXMgJiYgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbFBpbm5pbmdCZWhhdmlvcigpID09IFBpblRvVG9w
KQorICAgICAgICBwb3NpdGlvbi5zZXRZKG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSk7CisK
KyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUd0azo6dXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoY29uc3QgRmxvYXRQb2ludCYgc2Ny
b2xsUG9zaXRpb24pCit7CisgICAgYm9vbCBwaW5uZWRUb1RoZUxlZnQgPSBzY3JvbGxQb3NpdGlv
bi54KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOworICAgIGJvb2wgcGlubmVkVG9U
aGVSaWdodCA9IHNjcm9sbFBvc2l0aW9uLngoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCk7CisgICAgYm9vbCBwaW5uZWRUb1RoZVRvcCA9IHNjcm9sbFBvc2l0aW9uLnkoKSA8PSBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7CisgICAgYm9vbCBwaW5uZWRUb1RoZUJvdHRvbSA9IHNj
cm9sbFBvc2l0aW9uLnkoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7CisKKyAgICBz
Y3JvbGxpbmdUcmVlKCkuc2V0TWFpbkZyYW1lUGluU3RhdGUocGlubmVkVG9UaGVMZWZ0LCBwaW5u
ZWRUb1RoZVJpZ2h0LCBwaW5uZWRUb1RoZVRvcCwgcGlubmVkVG9UaGVCb3R0b20pOworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OmxvZ0V4cG9zZWRVbmZpbGxl
ZEFyZWEoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ1Ro
cmVhZGVkU2Nyb2xsaW5nTW9kZSh1bnNpZ25lZCBzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMp
Cit7CisgICAgaWYgKHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucykgeworICAgICAgICBTdHJp
bmdCdWlsZGVyIHJlYXNvbnNEZXNjcmlwdGlvbjsKKworICAgICAgICBpZiAoc3luY2hyb25vdXNT
Y3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OkZvcmNlZE9uTWFpblRocmVh
ZCkKKyAgICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmRMaXRlcmFsKCJmb3JjZWQs
Iik7CisgICAgICAgIGlmIChzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMgJiBTY3JvbGxpbmdD
b29yZGluYXRvcjo6SGFzU2xvd1JlcGFpbnRPYmplY3RzKQorICAgICAgICAgICAgcmVhc29uc0Rl
c2NyaXB0aW9uLmFwcGVuZExpdGVyYWwoInNsb3ctcmVwYWludCBvYmplY3RzLCIpOworICAgICAg
ICBpZiAoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
Okhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzV2l0aG91dFN1cHBvcnRpbmdGaXhlZExheWVy
cykKKyAgICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmRMaXRlcmFsKCJ2aWV3cG9y
dC1jb25zdHJhaW5lZCBvYmplY3RzLCIpOworICAgICAgICBpZiAoc3luY2hyb25vdXNTY3JvbGxp
bmdSZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Okhhc05vbkxheWVyVmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kTGl0
ZXJhbCgibm9uLWxheWVyIHZpZXdwb3J0LWNvbnN0cmFpbmVkIG9iamVjdHMsIik7CisgICAgICAg
IGlmIChzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMgJiBTY3JvbGxpbmdDb29yZGluYXRvcjo6
SXNJbWFnZURvY3VtZW50KQorICAgICAgICAgICAgcmVhc29uc0Rlc2NyaXB0aW9uLmFwcGVuZExp
dGVyYWwoImltYWdlIGRvY3VtZW50LCIpOworCisgICAgICAgIC8vIFN0cmlwIHRoZSB0cmFpbGlu
ZyBjb21tYS4KKyAgICAgICAgU3RyaW5nIHJlYXNvbnNEZXNjcmlwdGlvblRyaW1tZWQgPSByZWFz
b25zRGVzY3JpcHRpb24udG9TdHJpbmcoKS5sZWZ0KHJlYXNvbnNEZXNjcmlwdGlvbi5sZW5ndGgo
KSAtIDEpOworCisgICAgICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBTd2l0Y2hpbmcgdG8g
bWFpbi10aHJlYWQgc2Nyb2xsaW5nIG1vZGUuIFRpbWU6ICVmIFJlYXNvbihzKTogJXNcbiIsIFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCksIHJlYXNvbnNEZXNjcmlwdGlvblRyaW1t
ZWQuYXNjaWkoKS5kYXRhKCkpOworICAgIH0gZWxzZQorICAgICAgICBXVEZMb2dBbHdheXMoIlND
Uk9MTElORzogU3dpdGNoaW5nIHRvIHRocmVhZGVkIHNjcm9sbGluZyBtb2RlLiBUaW1lOiAlZlxu
IiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGIwNTZkZDEz
MzZlMjNjZGUxNjZkOTdjYzMzZWYzOTA5MzAzMTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVHdGsuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xs
YWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGtfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrX2gKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudDsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKKwor
Y2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ayA6IHB1YmxpYyBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLCBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQg
eworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQp
OworICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsoKTsKKwor
cHJpdmF0ZToKKyAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKFNjcm9sbGlu
Z1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQpOworCisgICAgLy8gU2Nyb2xsaW5nVHJlZU5vZGUgbWVt
YmVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29u
c3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikg
b3ZlcnJpZGU7CisKKyAgICAvLyBTY3JvbGxjb250cm9sbGVyQ2xpZW50IG1lbWJlciBmdW5jdGlv
bnMuCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsg
cmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXI7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJh
cjsgfQorCisgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhj
b25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVy
Vmlld3BvcnRDaGFuZ2UoY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgZG91Ymxl
IHNjYWxlKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFBvaW50IG1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIEZsb2F0UG9pbnQgbWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVBpblN0
YXRlKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKworICAgIGJvb2wgaXNBbHJl
YWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jiwg
U2Nyb2xsRXZlbnRBeGlzKTsKKworICAgIHZvaWQgbG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpOwor
CisgICAgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uKEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCkgY29uc3Q7CisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKEdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgU2Nyb2xsQ29udHJvbGxl
ciBtX3Njcm9sbENvbnRyb2xsZXI7CisKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQgbV9zY3JvbGxMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
IG1fY291bnRlclNjcm9sbGluZ0xheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCBtX2luc2V0Q2xpcExheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCBtX2NvbnRlbnRTaGFkb3dMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQgbV9oZWFkZXJMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbV9m
b290ZXJMYXllcjsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogbV9jb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOworCisgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsU2Nyb2xsYmFy
OworICAgIFNjcm9sbGJhciogbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworCisgICAgRmxvYXRQb2lu
dCBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOworICAgIGJvb2wgbV9sYXN0U2Ny
b2xsSGFkVW5maWxsZWRQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYWRGaXJzdFVwZGF0
ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIgeyBm
YWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3Rr
L1Njcm9sbGluZ1RyZWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3Rr
L1Njcm9sbGluZ1RyZWVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYTZlMWI0YzczMGYzMjUzM2I5OWUz
ZTlkZWUxZjlmZDljMTdiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUd0ay5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJl
ZUd0ay5oIgorCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZS5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxTY3JvbGxpbmdUcmVlR3RrPiBTY3JvbGxpbmdU
cmVlR3RrOjpjcmVhdGUoQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRp
bmF0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZUd0ayhzY3Jv
bGxpbmdDb29yZGluYXRvcikpOworfQorCitTY3JvbGxpbmdUcmVlR3RrOjpTY3JvbGxpbmdUcmVl
R3RrKEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAg
IDogVGhyZWFkZWRTY3JvbGxpbmdUcmVlKHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQoreworfQorCitQ
YXNzUmVmUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlR3RrOjpjcmVhdGVTY3Jv
bGxpbmdUcmVlTm9kZShTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlE
IG5vZGVJRCkKK3sKKyAgICBzd2l0Y2ggKG5vZGVUeXBlKSB7CisgICAgY2FzZSBGcmFtZVNjcm9s
bGluZ05vZGU6CisgICAgICAgIHJldHVybiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
R3RrOjpjcmVhdGUoKnRoaXMsIG5vZGVJRCk7CisgICAgY2FzZSBPdmVyZmxvd1Njcm9sbGluZ05v
ZGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBjYXNlIEZpeGVkTm9kZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsKKyAgICBjYXNlIFN0aWNreU5vZGU6CisgICAg
ICAgIHJldHVybiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y3JlYXRlKCp0aGlzLCBub2RlSUQp
OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2VuZGlmIC8vIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9n
dGsvU2Nyb2xsaW5nVHJlZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3Rr
L1Njcm9sbGluZ1RyZWVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYThiNmJjZTcyNWQ5N2NhYzQ3YWVkZjIz
YjlkNDc5ZjliY2VkMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nVHJlZUd0a19oCisjZGVmaW5lIFNjcm9sbGluZ1Ry
ZWVHdGtfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIlRocmVh
ZGVkU2Nyb2xsaW5nVHJlZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9s
bGluZ1RyZWVHdGsgOiBwdWJsaWMgVGhyZWFkZWRTY3JvbGxpbmdUcmVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFNjcm9sbGluZ1RyZWVHdGs+IGNyZWF0ZShBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yKik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IGNy
ZWF0ZVNjcm9sbGluZ1RyZWVOb2RlKFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFNjcm9sbGluZ1RyZWVHdGsoQXN5
bmNTY3JvbGxpbmdDb29yZGluYXRvciopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGlu
Z1RyZWVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3Rr
L1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlmNmJhYTFk
YjMxODk3MThmM2NmMzQ2YzAxM2I3NTAwMzIyYWJiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcm9s
bGluZ1N0YXRlU3RpY2t5Tm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZWY8U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU+IFNjcm9sbGlu
Z1RyZWVTdGlja3lOb2RlOjpjcmVhdGUoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Ny
b2xsaW5nTm9kZUlEIG5vZGVJRCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpKTsKK30KKworU2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGU6OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKFNjcm9sbGluZ1RyZWUmIHNj
cm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCisgICAgOiBTY3JvbGxpbmdUcmVl
Tm9kZShzY3JvbGxpbmdUcmVlLCBTdGlja3lOb2RlLCBub2RlSUQpCit7Cit9CisKK1Njcm9sbGlu
Z1RyZWVTdGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKQoreworfQorCit2b2lk
IFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3Jv
bGxpbmdTdGF0ZU5vZGUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29u
c3QgU2Nyb2xsaW5nVHJlZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcyYmUwNjIyYTUxMDM3YmUxMTE1MmQwOWY0MjFkY2M4MGVlOGQ3ZWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGVfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZV9oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzOwor
CitjbGFzcyBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9k
ZSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTY3JvbGxpbmdUcmVl
U3RpY2t5Tm9kZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQpOworCisg
ICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKTsKKworcHJpdmF0ZToKKyAgICBT
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsK
KworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdT
dGF0ZU5vZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJB
bmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0
IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY3VtdWxhdGl2
ZURlbHRhKSBvdmVycmlkZTsKKworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBt
X2xheWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1NDUk9MTElOR19OT0RFKFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLCBpc1N0aWNreU5v
ZGUoKSkKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBT
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNw
cAppbmRleCA0YjcwMWM3ODFmYWQxMGIwMTQ2Yjk0ZGQyODgzNjJmYzU5YTBjZTAzLi43ZDVkODk1
ZTNmZjUzYjA5MWY4YmY3ZjE4YjFiN2Q4YzQ3NzU2MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5jcHAKQEAgLTQ4Miw2ICs0ODIsOSBAQCBib29sIFNjcm9sbGJhcjo6c3VwcG9y
dHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX3Njcm9sbGFi
bGVBcmVhLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVz
dGluZygpCiAgICAgICAgICYmIChtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXIoKSB8fCBtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpKQogICAgICAgICAmJiBtX3Njcm9sbGFibGVBcmVhLnVzZXNBc3luY1Njcm9sbGluZygp
OworI2VsaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oR1RLKQorICAgIHJl
dHVybiAhbV9zY3JvbGxhYmxlQXJlYS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKQorICAgICAgICAmJiBtX3Njcm9sbGFibGVBcmVhLnVzZXNB
c3luY1Njcm9sbGluZygpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTGF5ZXIuaAppbmRleCA2YWRiNjU0YzgxMzRjNTE4N2VhOTY3ZjgyMGNhZWNkMzY3
ZDQ4ZDQ4Li45NTFjYWIyZjU5YmFjNDA1Mjg1NjBlYTg0NGI0Y2EzZjhlYmFhZmVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oCkBAIC0xMzEsNiArMTMxLDggQEAgcHVibGljOgogICAgIHZvaWQg
YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKICAgICB2b2lkIGFkZENoaWxkKFRleHR1cmVN
YXBwZXJMYXllciopOwogCisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGFkanVzdGVkUG9zaXRpb24oKTsgfQorCiBwcml2YXRlOgogICAgIGNvbnN0IFRleHR1cmVNYXBw
ZXJMYXllciYgcm9vdExheWVyKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXggYzUzYmMwNjg3NDBiOTU1
YWYyOTdkNDEwZDBlNWNhYWU5NjJmOTFjZS4uNjNjNWM2MzExNjA2ZTQ4NzAxM2JmN2U5NzhmMjVj
NzliNTU3MzgxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmNwcApAQCAtMTgyLDYgKzE4MiwxOCBAQCB2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29vcmRpbmF0
ZWRHcgogICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlk
LCBzdGF0ZSkpOwogfQogCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKK0Zsb2F0UG9pbnQg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6bGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmxheWVyUG9zaXRpb24obGF5ZXJJRCk7
Cit9CisKK3ZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJQb3NpdGlvbihDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBtX2Ns
aWVudC0+c2V0TGF5ZXJQb3NpdGlvbihsYXllcklELCBwKTsKK30KKyNlbmRpZgorCiBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVh
dGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCiB7CiAgICAgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKaW5kZXggZmUxMGEzZWRkODY5ZjhlNzQ3ZmQwNTgx
MzI3OWYyNGIyYTEyYzgwNS4uNWUzYWQwNjlmZTYxNDlkZmM0Mzc2N2U3MGE3MzgzZTYxNWQ4OTUx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRv
ci5oCkBAIC01OSw2ICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlGbHVzaFJlcXVpcmVkKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVT
dGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSA9IDA7CisjaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldExheWVyUG9zaXRpb24oQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBGbG9hdFBvaW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIEZs
b2F0UG9pbnQgbGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQpID0gMDsKKyNlbmRpZgog
ICAgIH07CiAKICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKFBhZ2UqLCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpDbGllbnQqKTsKQEAgLTEwOCw2ICsxMTIsMTAgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50VG9TdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgLyogYXRs
YXNJRCAqLywgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6
OkNsaWVudCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29y
ZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgb3ZlcnJpZGU7
CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbGF5
ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllclBvc2l0aW9uKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYp
IG92ZXJyaWRlOworI2VuZGlmCiAKICAgICAvLyBVcGRhdGVBdGxhczo6Q2xpZW50CiAgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IGNiOTRhOTY1MjJhMWU0
ZTcwY2Y4MWNjMTc0NzY1NTY0NzI0NTcwYjkuLjc3N2IwZmE3ZDFjNjVkMGQ3ZTI3M2IyNmQwMjVm
Y2UyYmZhYmYxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0zOTUsNiArMzk1LDE1IEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiAgICAgYWRkUmVwYWlu
dFJlY3QoY29udGVudHNSZWN0KCkpOwogfQogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c3luY1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgaWYgKHBvc2l0aW9u
KCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c3luY1Bvc2l0
aW9uKHApOworICAgIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Cit9CisKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyLCBDb250ZW50c0xheWVyUHVycG9zZSkKIHsKICNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCA4YTQ1YzM1NjU4NTcwNDM1NzFiMmUzNTlmNzY2ZWY5
MWJkNDBjY2NhLi5mZDEyNjY5M2YzMWFkOTg4M2MwYmUyNDQ4ZmU3YjA3ZjNkMTUxODRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
CkBAIC01NCw2ICs1NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHBhaW50VG9TdXJm
YWNlKGNvbnN0IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYg
YXRsYXNJRCwgSW50UG9pbnQmLCBDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVudCopID0gMDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgPSAwOworCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExh
eWVySUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkgPSAwOworI2VuZGlmCiB9OwogCiBj
bGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllcgpAQCAt
MTAyLDYgKzEwNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBTaG91bGRDbGlwVG9MYXllciA9IENsaXBUb0xheWVyKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3luY1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJl
Y3QmLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seShib29sKSBvdmVycmlkZTsKQEAgLTE0Miw2ICsxNDgsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHBhaW50VG9TdXJmYWNlKGNvbnN0IEludFNpemUmLCB1
aW50MzJfdCYgLyogYXRsYXNJRCAqLywgSW50UG9pbnQmLCBDb29yZGluYXRlZFN1cmZhY2U6OkNs
aWVudCopIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRvcjsgfQogCiAgICAgdm9p
ZCBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwogICAgIHZvaWQgcHVyZ2VCYWNraW5n
U3RvcmVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQ29udHJv
bGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY5MGZmYTAzYTc5MGFjYjcyYWY4NmE4NWQxMjYzOWE1NTY5
NDEzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgiCisKKyNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNs
dWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
Y3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQm
IGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworYm9vbCBTY3JvbGxDb250
cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxF
dmVudCkKK3sKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBtX2NsaWVudC5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9
IG1fY2xpZW50LnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisKKyAgICBmbG9hdCBkZWx0YVggPSBob3Jp
em9udGFsU2Nyb2xsYmFyID8gLXdoZWVsRXZlbnQuZGVsdGFYKCkgOiAwOworICAgIGZsb2F0IGRl
bHRhWSA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gLXdoZWVsRXZlbnQuZGVsdGFZKCkgOiAwOworCisg
ICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9sbGluZyB2ZXJ0aWNhbGx5IGJ5IGFwcGx5aW5nIHRo
ZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFY
KSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisK
KyAgICBpZiAoZGVsdGFYIHx8IGRlbHRhWSkgeworICAgICAgICBpZiAoZGVsdGFZKSB7CisgICAg
ICAgICAgICBkZWx0YVkgKj0gdmVydGljYWxTY3JvbGxiYXItPnBpeGVsU3RlcCgpOworICAgICAg
ICAgICAgbV9jbGllbnQuc2Nyb2xsQnkoRmxvYXRTaXplKDAsIGRlbHRhWSkpOworICAgICAgICB9
CisgICAgICAgIGlmIChkZWx0YVgpIHsKKyAgICAgICAgICAgIGRlbHRhWCAqPSBob3Jpem9udGFs
U2Nyb2xsYmFyLT5waXhlbFN0ZXAoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNjcm9sbEJ5KEZs
b2F0U2l6ZShkZWx0YVgsIDApKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxDb250cm9s
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2NhZGY5NTNmMGJjMmUxZDcwODJiNmE5ZDJmODAwYzIwYmZiNGE5
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxD
b250cm9sbGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNj
cm9sbENvbnRyb2xsZXJfaAorI2RlZmluZSBTY3JvbGxDb250cm9sbGVyX2gKKworI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJT
Y3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBs
YXRmb3JtV2hlZWxFdmVudDsKK2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjsKKworY2xhc3MgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7Citwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+U2Nyb2xsQ29udHJvbGxlckNsaWVudCgpIHsgfQorCitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIHNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFs
IFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSA9IDA7CisgICAgdmlydHVhbCBTY3JvbGxi
YXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmZXJU
ZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRp
ZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBjb25z
dCB7IC8qIERvIG5vdGhpbmcgKi8gfQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUZXN0RGVmZXJy
YWxGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZp
ZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbikgY29uc3Qg
eyAvKiBEbyBub3RoaW5nICovIH0KKworfTsKKworY2xhc3MgU2Nyb2xsQ29udHJvbGxlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsQ29udHJvbGxlcik7CisKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQmKTsKKwor
ICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKwor
cHJpdmF0ZToKKyAgICBTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBtX2NsaWVudDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisKKyNlbmRpZiAvLyBTY3JvbGxDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IDFiNzhmZDhlZmEyMDc4ZjRjODgxZDljYTM5YmQzOWNk
ZTQwZjkzYTkuLjU0OGQwOTA1ZGFhYTliMTRkN2Y3Y2Q5NTRmYmMwMWY4YWEzZjUyMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAtMzQ3LDcgKzM0Nyw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpCiAKIFRleHR1cmVNYXBwZXJMYXllciogQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVy
SUQgaWQpCiB7Ci0gICAgcmV0dXJuIChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKSA/
IGxheWVyQnlJRChpZCkgOiAwOworICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVk
TGF5ZXJJRCkgPyBsYXllckJ5SUQoaWQpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgbGF5ZXJJRHMpCkBAIC0zNjEsNiArMzYxLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBuZXdMYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8
VGV4dHVyZU1hcHBlckxheWVyPigpOwogICAgIG5ld0xheWVyLT5zZXRJRChpZCk7CiAgICAgbmV3
TGF5ZXItPnNldFNjcm9sbENsaWVudCh0aGlzKTsKKwogICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RG
TW92ZShuZXdMYXllcikpOwogfQogCkBAIC0zNzIsNyArMzczLDEwIEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mIGxhCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcihD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVy
ZU1hcHBlckxheWVyPiBsYXllciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJRCk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbGF5ZXI7CisgICAgeworICAgICAgICBsYXll
ciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJRCk7CisgICAgfQogICAgIEFTU0VSVChsYXllcik7CiAK
ICAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKQEAgLTY5Niw2ICs3MDAs
MjAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjcm9sbE9mZnNldCh1
aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXoKICAgICB9KTsKIH0KIAorI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJQ
b3NpdGlvbih1aW50MzJfdCBsYXllcklELCBjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlm
IChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpKQorICAgICAg
ICBsYXllci0+c2V0UG9zaXRpb24ocCk7Cit9CisKK0Zsb2F0UG9pbnQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpsYXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVySUQpCit7CisgICAgVGV4dHVy
ZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICByZXR1cm4gbGF5
ZXIgPyBsYXllci0+cG9zaXRpb24oKSA6IEZsb2F0UG9pbnQoKTsKK30KKyNlbmRpZgorCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBp
ZiAobV9jbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4
IDY4YWFiZmU0MGM0ZGY4MTk3ZDE2ZmJkNjJiOGFmZmE1ZTljMjc5NjAuLjVmNGM0NDM5MjZkYmM0
OWQ5OWYyYzliZjFlMzQ4OGFhNDFmNjk1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oCkBAIC03NSw2ICs3NSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2go
KTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOwogCisjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICB2b2lkIHNldExheWVyUG9zaXRpb24odWludDMy
X3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgbGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklEKTsKKyNlbmRpZgorCiAgICAg
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBmaW5kU2Nyb2xsYWJsZUNvbnRlbnRzTGF5ZXJB
dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0
U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG9m
ZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJl
YWRlZENvbXBvc2l0b3IuY3BwCmluZGV4IGZlYzVmNjkxNWQzMTBlMGQ0NTk3M2ExMjVjNzk0ZjA5
M2I0ZjIwODQuLmQ5NDVmYjVkNDlhMmU3NjI2Yjc3MmZhNWM1M2Y5NTk2Mjc3Y2E1NGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVk
Y29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBv
c2l0b3IuY3BwCkBAIC0yMTMsNiArMjEzLDIyIEBAIHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpj
b21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2ZmCiAg
ICAgbV9jbGllbnQtPmNvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZzZXQpOwogfQogCisj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKK3ZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpzZXRM
YXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQoreworICAgIFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHNjZW5lID0gbV9zY2Vu
ZTsKKyAgICBtX3NjZW5lLT5hcHBlbmRVcGRhdGUoW3NjZW5lLCBsYXllcklELCBwb3NpdGlvbl0g
eworICAgICAgICBzY2VuZS0+c2V0TGF5ZXJQb3NpdGlvbihsYXllcklELCBwb3NpdGlvbik7Cisg
ICAgfSk7CisgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK0Zsb2F0UG9pbnQgVGhyZWFkZWRD
b21wb3NpdG9yOjpsYXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVySUQpCit7CisgICAgcmV0dXJu
IG1fc2NlbmUtPmxheWVyUG9zaXRpb24obGF5ZXJJRCk7Cit9CisjZW5kaWYKKwogYm9vbCBUaHJl
YWRlZENvbXBvc2l0b3I6OmVuc3VyZUdMQ29udGV4dCgpCiB7CiAgICAgaWYgKCFnbENvbnRleHQo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENv
bXBvc2l0b3IuaAppbmRleCA0YTc4OWZkMTQzZjQ4MWIzZWNjZDEyMTk5ZTU0NTI2M2M3M2Y4MDUz
Li4xMjg2YTMxZmQzNjM5NjU0ZGZjMzhlYjcyNzk1NDMxMDVlOWI2MDBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0
b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCkBA
IC03Nyw2ICs3NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpOwogICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OwogCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICB2b2lkIHNldExheWVyUG9zaXRp
b24odWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgbGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklEKTsKKyNlbmRp
ZgorCiBwcml2YXRlOgogICAgIFRocmVhZGVkQ29tcG9zaXRvcihDbGllbnQqKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAzYjVhMmIwMzU3NTc0ODg1
YTE4YjM3ODQwZmI4MGFlMWNkOTFjNjVjLi5kMTFhYmRkNzlhM2U5YTcxNjUzY2FmNGNmOGNmZjA0
OWEwMTdkMWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMTIzLDcgKzEyMyw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShDT0NPQSkKICNpbmNs
dWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgiCiAjZW5kaWYKIApAQCAtNzgx
LDcgKzc4MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2ViUGFnZSgpCiAgICAg
bV9kcmF3aW5nQXJlYSA9IG1fcGFnZUNsaWVudC5jcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7CiAg
ICAgQVNTRVJUKG1fZHJhd2luZ0FyZWEpOwogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
KyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAo
bV9kcmF3aW5nQXJlYS0+dHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSkg
ewogICAgICAgICBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk+KCp0aGlzKTsKICNpZiBQTEFURk9STShJ
T1MpCkBAIC0xNzc4LDcgKzE3NzgsNyBAQCBzdGF0aWMgV2ViV2hlZWxFdmVudCBjb2FsZXNjZWRX
aGVlbEV2ZW50KERlcXVlPE5hdGl2ZVdlYldoZWVsRXZlbnQ+JiBxdWV1ZSwgVmVjdAogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50
JiBldmVudCkKIHsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChtX3Njcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHkgJiYgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5LT5oYW5kbGVXaGVlbEV2
ZW50KHBsYXRmb3JtKGV2ZW50KSkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgpAQCAtMTkxMCw3
ICsxOTEwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRQbHVnaW4oY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgdWludDMyX3QgcHJvY2Vzc1R5cGUsIGNvbnMKIAogYm9vbCBXZWJQYWdlUHJveHk6
OnNob3VsZFN0YXJ0VHJhY2tpbmdUb3VjaEV2ZW50cyhjb25zdCBXZWJUb3VjaEV2ZW50JiB0b3Vj
aFN0YXJ0RXZlbnQpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShJT1MpCiAgICAgZm9yIChhdXRvJiB0
b3VjaFBvaW50IDogdG91Y2hTdGFydEV2ZW50LnRvdWNoUG9pbnRzKCkpIHsKICAgICAgICAgaWYg
KG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS0+aXNQb2ludEluTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24odG91Y2hQb2ludC5sb2NhdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGY3YzZmMWUwMmFlOTdl
NTRiZmNlY2ZkN2NlYmIwNGI1Njg5ZDIxYmQuLmJmMDMwZGJiZTQ0ZWEzYTk1NDczNzNjYWUxNzkx
YjM0ZTJkYzEzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAg
LTMwMCw3ICszMDAsNyBAQCBwdWJsaWM6CiAgICAgTlNBcnJheSAqZGF0YURldGVjdGlvblJlc3Vs
dHMoKSB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzLmdldCgpOyB9CiAjZW5kaWYKICAg
ICAgICAgCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5KiBzY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxpbmdDb29yZGluYXRvclByb3h5LmdldCgpOyB9CiAjZW5kaWYKIApAQCAtMTUwNyw3ICsxNTA3
LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9mYWlsaW5nUHJvdmlzaW9uYWxMb2FkVVJMOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IG1fZHJhd2luZ0FyZWE7Ci0j
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAm
JiBQTEFURk9STShDT0NPQSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eT4gbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5OwogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAwOWUzMjYyOGJlNWRhYTQ4YTFkZGM0Nzc1OTc2N2Qy
MWI0YzJiZWVhLi5jOThiYjMyOTZjMDdhYzQxZGE2N2M5NTE0NzVlYzJkZjUwNzRhMThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAiV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKENPQ09BKQogI2lu
Y2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjZW5kaWYKIApAQCAtODQyLDgg
Kzg0MiwxMCBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6bGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigp
IGNvbnN0CiBQYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBXZWJDaHJvbWVDbGllbnQ6
OmNyZWF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqIHBhZ2UpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fcGFnZS0+Y29yZVBhZ2UoKSA9PSBwYWdlKTsKKyNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT50eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlUmVt
b3RlTGF5ZXJUcmVlKQogICAgICAgICByZXR1cm4gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmNyZWF0ZShtX3BhZ2UpOworI2VuZGlmCiAKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1Ro
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcAppbmRleCAyNzQxMDU5ZDM3MzE4ZDAwNzQyNTc3YmU0YjQ5ZTI4ZGJkZjQx
YTA5Li45NDlmODYwOWYzZjA1Y2M5NDM0NmZhMjNkM2RlNjNmYmJmZDYwOGFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwCkBAIC0yOTYsNiArMjk2LDE4IEBAIHZvaWQgVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBHcmFwaGljc0xh
eWVyKiwKIHsKIH0KIAorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCit2b2lkIFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVy
SUQsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbV9jb21wb3NpdG9yLT5zZXRMYXllclBv
c2l0aW9uKGxheWVySUQsIHApOworfQorCitGbG9hdFBvaW50IFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpsYXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVySUQpCit7CisgICAgcmV0
dXJuIG1fY29tcG9zaXRvci0+bGF5ZXJQb3NpdGlvbihsYXllcklEKTsKK30KKyNlbmRpZgorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDc3ZTJlMTIwNTMyYjdmZDAwMjEwOGQ3Mzlm
ZmNiMWIxNDkxOWRkNTcuLjJmZTU2M2FkMDFlNGFiNDBiOWFkMTlmMGE1MDc1MTZjOWE1NzhkYjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMTI2LDYgKzEyNiwxMCBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TGF5ZXJDb250ZW50
cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpIG92ZXJyaWRlOworI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyUG9zaXRpb24odWlu
dDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRQb2ludCBsYXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVy
SUQpIG92ZXJyaWRlOworI2VuZGlmCiAKICAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVl
Q29udGV4dDsKICAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwu
aAppbmRleCA1MmEzMzM0MTIxZDhiODU0YjVhNTY2ZWFjNmM3NDBjMjYxNDBmYzA4Li40MjNmMDAx
OTk1YjdjNDg5OTM3MzRiODYwYzEzNWY2NWU0ZmVjZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03NSw2ICs3NSwx
MCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRs
ZUZvckNvbXBvc2l0aW5nKGJvb2wmKSBvdmVycmlkZTsKICNlbmRpZgogCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FzeW5j
U2Nyb2xsaW5nKCkgeyByZXR1cm4gdHJ1ZTsgfQorI2VuZGlmCisKICAgICAvLyBJUEMgbWVzc2Fn
ZSBoYW5kbGVycy4KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWlu
dDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgYm9vbCByZXNwb25kSW1tZWRpYXRlbHksIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
VXBkYXRlKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGI5NjM5OGVkMzVjM2IwNzgyNGYyNGM5
YzUwZThmMzIzZmExMTQwYWQuLjBmODNiYWU3ZDgyZDBlNWVlNDkxMTcxZmIyZjc4YjhhYmNhYTc1
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERp
c3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVu
dERpc3BhdGNoZXIuY3BwCkBAIC0xMTQsNiArMTE0LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6
OndoZWVsRXZlbnQodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2
ZW4KICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
c2Nyb2xsaW5nVHJlZXNNdXRleCk7CiAgICAgaWYgKFJlZlB0cjxUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWU+IHNjcm9sbGluZ1RyZWUgPSBtX3Njcm9sbGluZ1RyZWVzLmdldChwYWdlSUQpKSB7CisjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHByZXR0eSBob3JyaWJsZSB0
aGF0IHdlJ3JlIHVwZGF0aW5nIHRoZSBiYWNrL2ZvcndhcmQgc3RhdGUgaGVyZS4KICAgICAgICAg
Ly8gV2ViQ29yZSBzaG91bGQgYWx3YXlzIGtub3cgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGtub3cg
d2hlbiBpdCBjaGFuZ2VzIHNvIHRoZQogICAgICAgICAvLyBzY3JvbGxpbmcgdHJlZSBjYW4gYmUg
bm90aWZpZWQuCkBAIC0xMjMsNiArMTI0LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVs
RXZlbnQodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW4KICAg
ICAgICAgICAgICAgICBzY3JvbGxpbmdUcmVlLT5zZXRDYW5SdWJiZXJCYW5kU3RhdGUoY2FuUnVi
YmVyQmFuZEF0TGVmdCwgY2FuUnViYmVyQmFuZEF0UmlnaHQsIGNhblJ1YmJlckJhbmRBdFRvcCwg
Y2FuUnViYmVyQmFuZEF0Qm90dG9tKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisjZW5k
aWYKIAogICAgICAgICBTY3JvbGxpbmdUcmVlOjpFdmVudFJlc3VsdCByZXN1bHQgPSBzY3JvbGxp
bmdUcmVlLT50cnlUb0hhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1XaGVlbEV2ZW50KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0
aW9uc0dUSy5jbWFrZQppbmRleCBmYmQzYzdmYjVmNTc0OTljODBiMTMyMGVhZWIxOWZjNDVhYmEw
ZjQ0Li4yNDRlOGE0MjdiMmI2MTc2NzI3OGJhODdmMDFkYjJkZThjNmVmZTE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c0dUSy5jbWFrZQpAQCAtOTcsNiArOTcsNyBAQCBXRUJLSVRfT1BUSU9OX0NPTkZMSUNUKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMgRU5BQkxFX0dMRVMyKQogCiBXRUJLSVRfT1BUSU9OX0RF
UEVORChFTkFCTEVfM0RfVFJBTlNGT1JNUyBFTkFCTEVfT1BFTkdMKQogV0VCS0lUX09QVElPTl9E
RVBFTkQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBFTkFCTEVfT1BFTkdMKQorV0VCS0lU
X09QVElPTl9ERVBFTkQoRU5BQkxFX0FTWU5DX1NDUk9MTElORyBFTkFCTEVfVEhSRUFERURfQ09N
UE9TSVRPUikKIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9HTEVTMiBFTkFCTEVfT1BFTkdM
KQogV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkgRU5BQkxF
X1gxMV9UQVJHRVQpCiBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfUExVR0lOX1BST0NFU1Nf
R1RLMiBFTkFCTEVfWDExX1RBUkdFVCkKQEAgLTE0OCw2ICsxNDksNyBAQCBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShVU0VfU1lTVEVNX01BTExPQyBQVUJMSUMgT0ZGKQogIyBDaGFu
Z2luZyB0aGVzZSBvcHRpb25zIGlzIGNvbXBsZXRlbHkgdW5zdXBwb3J0ZWQuCiBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfM0RfVFJBTlNGT1JNUyBQUklWQVRFIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VTU0lCSUxJVFkgUFJJ
VkFURSBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BU1lOQ19T
Q1JPTExJTkcgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DQU5WQVNfUEFUSCBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JU
X1ZBTFVFKEVOQUJMRV9DU1NfSU1BR0VfU0VUIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1JFR0lPTlMgUFJJVkFURSBPTikKZGlmZiAtLWdp
dCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlYjFkMzBlZTI1M2M4OWI0OTEyNWRiYTgw
YzVmMzYwM2Q0MDNkNDgzLi5jNGQwOTkxYjFhNmVlNmE3MDJmNTI0NjJmZThhM2VmYzRjMDY1NzA3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTYtMDItMDQgIENoYW5nU2VvayBPaCAgPGNoYW5nc2Vvay5vaEBjb2xsYWJvcmEuY29tPgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBBU1lOQ19TQ1JPTExJTkcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTQzNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2U6IEFkZCBhIHByaXZhdGUgZmxhZywgRU5BQkxFX0FTWU5DX1NDUk9MTElORy4KKwog
MjAxNi0wMS0zMSAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgW0VGTF0gQWxsIEFQSSB0ZXN0cyBhcmUgYnJva2VuIG9uIDE1LjEwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271050</attachid>
            <date>2016-02-11 00:45:40 -0800</date>
            <delta_ts>2016-02-16 21:12:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151436-20160211174517.patch</filename>
            <type>text/plain</type>
            <size>115258</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRlMGM2NzY3ZDJlOTUw
NjY0NjFmNTllMWM0N2FjNzc2NTlmZTExNi4uMTdiNmFhNGVjZDZkODg4NDM2Nzk5NTIxMjQ1NDcw
NjIxYWFlY2Y2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxNi0wMi0xMSAgQ2hh
bmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9oQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10g
SW1wbGVtZW50IGluaXRpYWwgc3VwcG9ydCBvZiBhc3luY2hyb25vdXMgc2Nyb2xsaW5nLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDM2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
YnJpbmdzIHRoZSBhc3luY2hyb25vdXMgc2Nyb2xsaW5nIGZlYXR1cmUgdG8gdGhlIGd0ayBwb3J0
LiBCYXNpYyBpZGVhIGlzIHRvIGhhbmRsZQorICAgICAgICBzY3JvbGwgZXZlbnRzIGluIGEgc2Vw
YXJhdGUgdGhyZWFkIGNhbGxlZCAnc2Nyb2xsaW5nIHRocmVhZCcsIG5vdCB0aGUgbWFpbiB0aHJl
YWQuCisgICAgICAgIFRoZSBzY3JvbGwgZXZlbnRzIGFyZSBwcm9jZXNzZWQgYW5kIG5ldyBwb3Np
dGlvbiBvZiByZWxldmFudCBsYXllcnMgaXMgY2FsY3VsYXRlZCBhbmQgdGhlbiBtb3ZlCisgICAg
ICAgIHBsYXRmb3JtTGF5ZXJzIGFjY29yZGluZyB0byB0aGUgcG9zdGlvbnMgaW4gdGhlIHNjcm9s
bGluZyB0aHJlYWQuIFZpc2libGUgcmVjdCBpcyB1cGRhdGVkCisgICAgICAgIGFmdGVyIHRoYXQg
aW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gc3luY2hyb25pemluZyB0aGUgY2FsY3VsYXRlZCBwb3Np
dGlvbiB3aXRoIEdyYXBoaWNzTGF5ZXIncyBwb3NpdGlvbi4KKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIG5vdCBmdWxseSBzdXBwb3J0IGZpeGVkLCBzdGlja3kgYW5kIG92ZXJmbG93IGVsZW1lbnQg
eWV0LiBUaGV5IHdpbGwgYmUgY292ZXJlZCBieSBmb2xsb3dpbmcKKyAgICAgICAgcGF0Y2hlcy4g
QWxzbywgdGhlIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gdGhlIHRocmVhZGVkIGNv
bXBvc2l0b3IuIE90aGVyIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlci4KKworICAgICAgICBO
byBuZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdGF0ZVNjcm9sbGlu
Z05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvcjo6dXBkYXRlRnJhbWVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9s
bGluZ05vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5n
U3RhdGVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Y29tcG9zaXRpbmdDb29y
ZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2Rl
OjpsYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6flNjcm9sbGluZ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rp
b25zRnJvbVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJl
YWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6
OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUaHJlYWQuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnNob3VsZEhhbmRsZVdoZWVsRXZlbnRT
eW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnNldE9yQ2xl
YXJMYXRjaGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjp3aWxsV2hl
ZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9UaHJl
YWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkZWRTY3JvbGxp
bmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSk6CisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ckNvb3JkaW5hdGVkR3JhcGhpY3MpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6On5Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljcyk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6cGFnZURlc3Ryb3llZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6Y29t
bWl0VHJlZVN0YXRlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRUcmVlU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhp
Y3M6OnVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9jb29yZGluYXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGlu
YXRlZEdyYXBoaWNzLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3Jv
bGxpbmdDb29yZGluYXRvckd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JHdGs6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OnBhZ2VEZXN0cm95
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNvbW1pdFRy
ZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
R3RrOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdDb29yZGluYXRvckd0azo6Y29tbWl0VHJlZVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjp1cGRhdGVUaWxlZFNjcm9sbGluZ0luZGljYXRv
cik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3Rr
Lmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdTdGF0ZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9s
bGJhcnMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUaHJlYWRHdGsu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nUnVuTG9vcDo6U2Nyb2xsaW5n
UnVuTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdSdW5Mb29wOjpjYWxsT25TY3Jv
bGxpbmdSdW5Mb29wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1J1bkxvb3A6OnJ1bkxv
b3ApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjp+U2Nyb2xsaW5nVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjp0ZXJtaW5hdGVTY3JvbGxpbmdUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaCk6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpTY3JvbGxpbmdUcmVlRml4
ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3Jv
bGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVGaXhlZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlR3RrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0
ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3Rr
Ojp+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ayk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVw
ZGF0ZUJlZm9yZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpp
c0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzY3JvbGxCeSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3Rr
OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVHdGs6OnNldFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBkYXRlTGF5ZXJzQWZ0ZXJWaWV3cG9y
dENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0
ZU1haW5GcmFtZVBpblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGs6OmxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEpOgorICAgICAgICAoV2Vi
Q29yZTo6bG9nVGhyZWFkZWRTY3JvbGxpbmdNb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUd0ay5jcHA6IEFkZGVkLgorICAg
ICAgICAoU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRlKToKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVH
dGs6OlNjcm9sbGluZ1RyZWVHdGspOgorICAgICAgICAoU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRl
U2Nyb2xsaW5nVHJlZU5vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxp
bmdUcmVlR3RrLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
U3RpY2t5Tm9kZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6On5TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9u
U2Vjb25kYXJ5VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6
OnBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpjb21taXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jUG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29vcmRpbmF0b3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9TY3JvbGxDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9TY3JvbGxDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Q29udHJvbGxlckNsaWVudDo6flNjcm9sbENvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQ29udHJvbGxlckNsaWVudDo6ZGVmZXJUZXN0c0ZvclJlYXNvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjpyZW1vdmVUZXN0RGVmZXJyYWxG
b3JSZWFzb24pOgorCiAyMDE2LTAyLTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBUb2dnbGUgYnV0dG9ucyBhcmUgYmx1cnJ5IHdp
dGggR1RLKyAzLjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzYxNGY4ODljZmMwNTNhZjk3OWUxZjE2MDA2NTIw
ZjY4YWM1YTUwZi4uNmQ2N2YxYTFmNzc4Y2UyZGRkYmY3ODg4YWY1NGI3YjZiZGU2NmU0OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE2LTAyLTExICBDaGFuZ1Nlb2sgT2ggIDxjaGFu
Z3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgaW5pdGlh
bCBzdXBwb3J0IG9mIGFzeW5jaHJvbm91cyBzY3JvbGxpbmcuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE0MzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IG9mIGNoYW5nZXMgaW4gV2ViS2l0MiBs
YXllciBpcyByZWxhdGVkIHRvIGFkZGluZyBhbiBpbnRlcmZhY2UgdG8gc2V0IFRleHR1cmVNYXBw
ZXJMYXllciBhIHBvc2l0aW9uCisgICAgICAgIGZyb20gQ29tcG9zaXRpbmdDb29yZGluYXRvci4K
KworICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Z2V0TGF5ZXJCeUlESWZFeGlzdHMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnNldExheWVyUG9zaXRpb24pOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAgICAgICAqIFNoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvbXBvc2l0b3I6OmNvbW1pdExheWVyUG9z
aXRpb24pOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29t
cG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2Vi
UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkU3RhcnRUcmFja2luZ1RvdWNo
RXZlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzdXBwb3J0c0FzeW5j
U2Nyb2xsaW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KToKKwog
MjAxNi0wMi0wOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTihyMTk2MTgzKTogW0dUS10gQnJva2UgVGVzdEluc3BlY3Rvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4Njg4MjVmNTEyZTgyOWRlODk4MWRlNjExNThjYWQzYjk4
NWE1MjQ0Li41ZWJkOTU3ZjA0NzAxNTlkODNlNmMwZmNiZTAxOThhYjk1OGEwYjQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtMjA4MCw2ICsyMDgwLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwog
ICAgIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwCiAgICAgcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5jcHAKIAorICAg
IHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCiAgICAgcGFnZS9z
Y3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAogICAgIHBhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbExhdGNoaW5nU3RhdGUuY3BwCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29uc3Ry
YWludHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDcyZDUxNmVlYzIyMGVhNjFk
NjUzOTAwMjIzYzlmOTY4OTIyMDcyNDguLjBmNTRiOGM2Zjc1Njk3ZjU5MGZiMmYyNmIyZjNhMTNk
N2Y4OWI4ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNSw2ICsyNSw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9hY2Nlc3NpYmlsaXR5L2F0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vZWRpdGluZy9hdGsiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZ3RrIgorICAgICIke1dFQkNPUkVfRElSfS9wYWdlL3Nj
cm9sbGluZy9ndGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2NhaXJvIgogICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9nZW9jbHVlIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ndGsiCkBAIC0yMzIsNiArMjMzLDE0IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9y
bUdUS19TT1VSQ0VTCiAgICAgcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCiAgICAgcGFn
ZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAogCisgICAgcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdT
dGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKKyAgICBwYWdlL3Njcm9sbGluZy9ndGsvU2Ny
b2xsaW5nVGhyZWFkR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVl
Rml4ZWROb2RlLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVl
R3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5j
cHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKQEAg
LTI1Niw2ICsyNjUsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlUGxhdGZvcm1HVEtfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCiAgICAgcGxhdGZvcm0v
Z3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVs
RXZlbnRHdGsuY3BwCisgICAgcGxhdGZvcm0vZ3RrL1Njcm9sbENvbnRyb2xsZXIuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9Tb3Vu
ZEd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcAppbmRleCAwMjkxYTRmZDA2OTFmMGI4ODk3N2Y5ZmUxYjE2OTg3YTUzMjY0ZmRmLi43YWE3
ODVlNWMzOWMxOWJmZWEzYmIxZWU5NTYxYzZlZWU4NmRlYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcApAQCAtNDQsNiArNDQsMTAgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIK
ICNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKIAorI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OkFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSkKQEAgLTcxLDEwICs3NSwxNiBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaQogICAgICAgICBmb3IgKGF1dG8mIG9mZnNldCA6ICpzbmFw
T2Zmc2V0cykKICAgICAgICAgICAgIHNuYXBPZmZzZXRzQXNGbG9hdC51bmNoZWNrZWRBcHBlbmQo
cm91bmRUb0RldmljZVBpeGVsKG9mZnNldCwgZGV2aWNlU2NhbGVGYWN0b3IsIGZhbHNlKSk7CiAg
ICAgfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBpZiAoYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwpCiAgICAgICAgIG5vZGUuc2V0SG9yaXpvbnRhbFNuYXBP
ZmZzZXRzKHNuYXBPZmZzZXRzQXNGbG9hdCk7CiAgICAgZWxzZQogICAgICAgICBub2RlLnNldFZl
cnRpY2FsU25hcE9mZnNldHMoc25hcE9mZnNldHNBc0Zsb2F0KTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGF4aXMpOworICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyNlbmRpZgogfQogCiB2b2lk
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRGly
dHkoKQpAQCAtNDUxLDYgKzQ2MSwxMCBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlELAogICAgIG5v
ZGUtPnNldEluc2V0Q2xpcExheWVyKGluc2V0Q2xpcExheWVyKTsKICAgICBub2RlLT5zZXRTY3Jv
bGxlZENvbnRlbnRzTGF5ZXIoc2Nyb2xsZWRDb250ZW50c0xheWVyKTsKICAgICBub2RlLT5zZXRD
b3VudGVyU2Nyb2xsaW5nTGF5ZXIoY291bnRlclNjcm9sbGluZ0xheWVyKTsKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgbm9kZS0+c2V0Q29tcG9zaXRpbmdDb29yZGluYXRvcihk
b3duY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+KGxheWVyKS0+Y29vcmRpbmF0b3IoKSk7
CisgICAgbm9kZS0+c2V0TGF5ZXJQb3NpdGlvbihsYXllci0+cG9zaXRpb24oKSk7CisjZW5kaWYK
IAogICAgIGlmIChzY3JvbGxpbmdHZW9tZXRyeSkgewogICAgICAgICBub2RlLT5zZXRTY3JvbGxP
cmlnaW4oc2Nyb2xsaW5nR2VvbWV0cnktPnNjcm9sbE9yaWdpbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXgg
NTNiOThjMTQ1YTM3MjllYzhkMjUxZmNlMjdlYjY2ZTRmNzk3YjAwYS4uNjU1NTViNWZmMjUwNmY5
MGYyYWFmNmVkYjdlNGY2OGZkY2QzMmMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtNDQsNyArNDQsOSBA
QAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFBMQVRGT1JN
KEdUSykgJiYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTX1RIUkVBREVEKQorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmgiCisjZWxp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDb29yZGluYXRlZEdyYXBoaWNzLmgiCiAjZW5kaWYKIApAQCAtNTgsNyArNjAsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAjaWYgIVBMQVRGT1JNKENPQ09BKQogUmVmPFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCiB7Ci0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrKHBhZ2UpKTsKKyNl
bGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
Y3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MocGFnZSkpOwogI2VuZGlmCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCA4NTAzOTM2YTFhNTFhNTU3
MjVlNWRjMjMzYjFmN2NlZTY2NGYzNDdkLi4wNWQwNTc5N2ExZmExZWViOWZlZjA2YzE0ZjI1ZGI1
MzQ0ZGM4MmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCkBAIC00OCw2
ICs0OCw5IEBAIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZShjb25zdCBTY3JvbGxpCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
ICwgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIoc3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFy
UGFpbnRlcigpKQogICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcihzdGF0ZU5vZGUu
aG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXIoKSkKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAs
IG1fdmVydGljYWxTY3JvbGxiYXIoc3RhdGVOb2RlLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAg
LCBtX2hvcml6b250YWxTY3JvbGxiYXIoc3RhdGVOb2RlLmhvcml6b250YWxTY3JvbGxiYXIoKSkK
ICNlbmRpZgogICAgICwgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihzdGF0ZU5vZGUubm9uRmFz
dFNjcm9sbGFibGVSZWdpb24oKSkKICAgICAsIG1fcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc3Rh
dGVOb2RlLnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpCkBAIC0yMTUsNyArMjE4LDcgQEAgdm9p
ZCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0Rml4ZWRFbGVtZW50c0xheW91
dFJlbGF0aXZlVG9GcmFtZShib28KICAgICBzZXRQcm9wZXJ0eUNoYW5nZWQoRml4ZWRFbGVtZW50
c0xheW91dFJlbGF0aXZlVG9GcmFtZSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oTUFDKQorI2lmICFQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspCiB2b2lkIFNjcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxiYXJQYWludGVyc0Zyb21TY3JvbGxiYXJzKFNjcm9sbGJh
ciosIFNjcm9sbGJhciopCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaAppbmRl
eCBkNTdkMWZkOWY3MGE4NmM5MmE5MGFlMzFjNzVhNzk1MmZjZDY5Y2FhLi4zYTJhYzM5MWYzZjYy
MjZiZDQ2NzBiZGQ0OWQ5MDM3YzVkNDI2ODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlLmgKQEAgLTExNiw2ICsxMTYsOSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IFNjcm9sbGJhclBhaW50ZXIgdmVydGljYWxTY3JvbGxiYXJQYWludGVyKCkgY29uc3QgeyByZXR1
cm4gbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIuZ2V0KCk7IH0KICAgICBTY3JvbGxiYXJQYWlu
dGVyIGhvcml6b250YWxTY3JvbGxiYXJQYWludGVyKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyUGFpbnRlci5nZXQoKTsgfQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIFNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOyB9CisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyBy
ZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOyB9CiAjZW5kaWYKICAgICB2b2lkIHNldFNjcm9s
bGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnMoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciwg
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKTsKIApAQCAtMTM1LDYgKzEzOCw5IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYWludGVy
PiBtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlcjsKICAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFp
bnRlcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykK
KyAgICBTY3JvbGxiYXIqIG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyKiBtX2hv
cml6b250YWxTY3JvbGxiYXI7CiAjZW5kaWYKIAogICAgIFJlZ2lvbiBtX25vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlTm9kZS5jcHAKaW5kZXggZDNlNGY3NmZjMDViOGM3MGFhNjAxNWM1YjhkNTI0ZDky
NWMxNDIxNS4uM2FjODU1ZWJlNTE5MWI4NjIwNTc3N2Q0MWY4NTVhZmE3MGQ3MTNiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUu
Y3BwCkBAIC00Miw2ICs0Miw5IEBAIFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlKFNjcm9sbGluZ05vZGVUeXBlIG5vZGVUeXBlLCBTY3JvbGxpbmdTdGF0CiAgICAgLCBtX2No
YW5nZWRQcm9wZXJ0aWVzKDApCiAgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZShzY3JvbGxpbmdT
dGF0ZVRyZWUpCiAgICAgLCBtX3BhcmVudChudWxscHRyKQorI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyAgICAsIG1fY29tcG9zaXRpbmdDb29yZGluYXRvcihudWxscHRyKQorI2VuZGlm
CiB7CiB9CiAKQEAgLTUzLDYgKzU2LDkgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUsIFNjcm8KICAgICAs
IG1fY2hhbmdlZFByb3BlcnRpZXMoc3RhdGVOb2RlLmNoYW5nZWRQcm9wZXJ0aWVzKCkpCiAgICAg
LCBtX3Njcm9sbGluZ1N0YXRlVHJlZShhZG9wdGl2ZVRyZWUpCiAgICAgLCBtX3BhcmVudChudWxs
cHRyKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICAsIG1fY29tcG9zaXRpbmdD
b29yZGluYXRvcihzdGF0ZU5vZGUuY29tcG9zaXRpbmdDb29yZGluYXRvcigpKQorI2VuZGlmCiB7
CiAgICAgaWYgKGhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxMYXllcikpCiAgICAgICAgIHNldExh
eWVyKHN0YXRlTm9kZS5sYXllcigpLnRvUmVwcmVzZW50YXRpb24oYWRvcHRpdmVUcmVlLnByZWZl
cnJlZExheWVyUmVwcmVzZW50YXRpb24oKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAppbmRleCBhY2I2MDFjOWU4ODZkNmZmYzJj
MDY4MWEwZDExYmIyOTZkZTUyZjJhLi5jNGMxNTlmZDUyZGIzOGI2YTk1OGQxYTQ0ZjA0YWQ1OWUy
NTM3NGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZU5vZGUuaApAQCAtNDAsNiArNDAsMTAgQEAgY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNs
YXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIGNsYXNzIFRleHRTdHJlYW07CiAKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQ7
CisjZW5kaWYKKwogLy8gVXNlZCB0byBhbGxvdyBTY3JvbGxpbmdTdGF0ZU5vZGVzIHRvIHJlZmVy
IHRvIGxheWVycyBpbiB2YXJpb3VzIGNvbnRleHRzOgogLy8gYSkgQXN5bmMgc2Nyb2xsaW5nLCBt
YWluIHRocmVhZDogU2Nyb2xsaW5nU3RhdGVOb2RlIGhvbGRzIG9udG8gYSBHcmFwaGljc0xheWVy
LCBhbmQgdXNlcyBtX2xheWVySUQKIC8vICAgIHRvIGRldGVjdCB3aGV0aGVyIHRoYXQgR3JhcGhp
Y3NMYXllcidzIHVuZGVybHlpbmcgUGxhdGZvcm1MYXllciBjaGFuZ2VkLgpAQCAtMjM0LDYgKzIz
OCwxMyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkg
Y29uc3Q7CiAKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50KiBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogY29tcG9zaXRpbmdDb29y
ZGluYXRvcikgeyBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3IgPSBjb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOyB9CisgICAgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9s
YXllclBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKSB7IG1fbGF5ZXJQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CisjZW5kaWYKKwog
cHJvdGVjdGVkOgogICAgIFNjcm9sbGluZ1N0YXRlTm9kZShjb25zdCBTY3JvbGxpbmdTdGF0ZU5v
ZGUmLCBTY3JvbGxpbmdTdGF0ZVRyZWUmKTsKIApAQCAtMjUyLDYgKzI2MywxMSBAQCBwcml2YXRl
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4+
PiBtX2NoaWxkcmVuOwogCiAgICAgTGF5ZXJSZXByZXNlbnRhdGlvbiBtX2xheWVyOworCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCogbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yOworICAgIEZsb2F0UG9pbnQgbV9sYXllclBv
c2l0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAppbmRleCA0NjY5
YTE5OTI4N2E2Y2FmMGFlYmM2YmJiYTVhN2VlZTVjNWViZDZiLi44OWI1NmU2ZjQzMGMzYTMyMDUw
MDFjMDk0NjBjMDM0MDU3NjkwNTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTM0LDE1ICszNCwxNCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiAhUExBVEZPUk0oR1RLKQogU2Nyb2xsaW5nVGhyZWFkOjpTY3Jv
bGxpbmdUaHJlYWQoKQogICAgIDogbV90aHJlYWRJZGVudGlmaWVyKDApCiB7CiB9CiAKLWJvb2wg
U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQorU2Nyb2xsaW5nVGhyZWFkOjp+U2Ny
b2xsaW5nVGhyZWFkKCkKIHsKLSAgICBhdXRvIHRocmVhZElkZW50aWZpZXIgPSBTY3JvbGxpbmdU
aHJlYWQ6OnNpbmdsZXRvbigpLm1fdGhyZWFkSWRlbnRpZmllcjsKLSAgICByZXR1cm4gdGhyZWFk
SWRlbnRpZmllciAmJiBjdXJyZW50VGhyZWFkKCkgPT0gdGhyZWFkSWRlbnRpZmllcjsKIH0KIAog
dm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVu
Y3Rpb24pCkBAIC01OCw2ICs1NywyNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2go
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKICAgICBzY3JvbGxpbmdUaHJlYWQud2Fr
ZVVwUnVuTG9vcCgpOwogfQogCit2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tU2Nyb2xsaW5nVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkp
OworCisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IGZ1bmN0aW9uczsKKyAgICB7
CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fZnVuY3Rpb25zTXV0ZXgpOwor
ICAgICAgICBmdW5jdGlvbnMgPSBXVEZNb3ZlKG1fZnVuY3Rpb25zKTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQorICAgICAgICBmdW5jdGlvbigpOworfQor
I2VuZGlmCisKK2Jvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQoreworICAg
IGF1dG8gdGhyZWFkSWRlbnRpZmllciA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkubV90
aHJlYWRJZGVudGlmaWVyOworICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJlbnRU
aHJlYWQoKSA9PSB0aHJlYWRJZGVudGlmaWVyOworfQorCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6
ZGlzcGF0Y2hCYXJyaWVyKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiB7CiAgICAg
ZGlzcGF0Y2goW2Z1bmN0aW9uXSgpIG11dGFibGUgewpAQCAtODUsNiArMTA1LDggQEAgdm9pZCBT
Y3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKICAgICAgICAgCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJs
ZS53YWl0KGxvY2ssIFt0aGlzXXsgcmV0dXJuIG1fdGhyZWFkUnVuTG9vcDsgfSk7CisjZWxpZiBQ
TEFURk9STShHVEspCisgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJs
ZS53YWl0KGxvY2spOwogI2VuZGlmCiAgICAgfQogfQpAQCAtMTAwLDIxICsxMjIsNiBAQCB2b2lk
IFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkQm9keSgpCiAgICAgaW5pdGlhbGl6ZVJ1bkxvb3AoKTsK
IH0KIAotdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25zRnJvbVNjcm9sbGlu
Z1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzQ3VycmVudFRocmVhZCgpKTsKLQotICAgIFZlY3Rv
cjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBmdW5jdGlvbnM7Ci0gICAgCi0gICAgewotICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2Z1bmN0aW9uc011dGV4KTsKLSAgICAgICAg
ZnVuY3Rpb25zID0gV1RGTW92ZShtX2Z1bmN0aW9ucyk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRv
JiBmdW5jdGlvbiA6IGZ1bmN0aW9ucykKLSAgICAgICAgZnVuY3Rpb24oKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXgg
YTcwOWNjZDhlNzg2MzYyOWRlOGEyODNjNDYzY2E5Yzc3MDUxYzcxNS4uYjhmZjI5N2E2ZWE1ODM2
MjljM2Y4ZTE3YWU5OTkxYjJmMmRiZTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKQEAgLTQyLDEwICs0MiwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiBQTEFURk9STShHVEspCitjbGFzcyBTY3JvbGxpbmdSdW5Mb29w
OworI2VuZGlmCisKIGNsYXNzIFNjcm9sbGluZ1RocmVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2Nyb2xsaW5nVGhyZWFkKTsKLQogcHVibGljOgorICAgIHZpcnR1YWwgflNjcm9sbGlu
Z1RocmVhZCgpOworCiAgICAgc3RhdGljIGJvb2wgaXNDdXJyZW50VGhyZWFkKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPik7
CiAKQEAgLTYzLDI4ICs2OCwzMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlVGhyZWFkSWZO
ZWVkZWQoKTsKICAgICBzdGF0aWMgdm9pZCB0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdU
aHJlYWQpOwogICAgIHZvaWQgdGhyZWFkQm9keSgpOwotICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tU2Nyb2xsaW5nVGhyZWFkKCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVSdW5Mb29wKCk7
Ci0gICAgdm9pZCB3YWtlVXBSdW5Mb29wKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2
b2lkIGRpc3BhdGNoRnVuY3Rpb25zRnJvbVNjcm9sbGluZ1RocmVhZCgpOworICAgIHZvaWQgd2Fr
ZVVwUnVuTG9vcCgpOwogICAgIHN0YXRpYyB2b2lkIHRocmVhZFJ1bkxvb3BTb3VyY2VDYWxsYmFj
ayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpOwogICAgIHZvaWQgdGhyZWFkUnVuTG9vcFNvdXJjZUNh
bGxiYWNrKCk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgdm9pZCB0ZXJtaW5hdGVTY3JvbGxp
bmdUaHJlYWQoKTsKICNlbmRpZgogCiAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50
aWZpZXI7CiAKICAgICBDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlh
YmxlOwogICAgIExvY2sgbV9pbml0aWFsaXplUnVuTG9vcE11dGV4OwotCiAgICAgTG9jayBtX2Z1
bmN0aW9uc011dGV4OwotICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2Z1bmN0
aW9uczsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+PiBtX2Z1bmN0aW9uczsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBXZWJDb3Jl
OjpSdW5Mb29wIGhlcmUuCiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV90aHJlYWRSdW5M
b29wOwogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BTb3VyY2VSZWY+IG1fdGhyZWFkUnVuTG9vcFNv
dXJjZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBDb25kaXRpb24gbV90ZXJtaW5hdGVSdW5M
b29wQ29uZGl0aW9uOworICAgIExvY2sgbV90ZXJtaW5hdGVSdW5Mb29wTXV0ZXg7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjcm9sbGluZ1J1bkxvb3A+IG1fdGhyZWFkUnVuTG9vcDsKICNlbmRpZgog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNw
cAppbmRleCA0NzZiNGMyNzFkOWJhYTE1NDkwNTI0NzQ2OWE1Y2FmZjdlZjRmM2Q0Li5hOWU1NjJj
ZjI1OGI0OTYzMDg0YzM2NmU4Y2QzY2VkMWEwYzQ2ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcApAQCAtNTAsNiArNTAsNyBAQCBTY3Jv
bGxpbmdUcmVlOjp+U2Nyb2xsaW5nVHJlZSgpCiAKIGJvb2wgU2Nyb2xsaW5nVHJlZTo6c2hvdWxk
SGFuZGxlV2hlZWxFdmVudFN5bmNocm9ub3VzbHkoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQogeworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIFRoaXMgbWV0aG9kIGlz
IGludm9rZWQgYnkgdGhlIGV2ZW50IGhhbmRsaW5nIHRocmVhZAogICAgIExvY2tIb2xkZXIgbG9j
ayhtX211dGV4KTsKIApAQCAtNzEsMTUgKzcyLDIzIEBAIGJvb2wgU2Nyb2xsaW5nVHJlZTo6c2hv
dWxkSGFuZGxlV2hlZWxFdmVudFN5bmNocm9ub3VzbHkoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
CiAgICAgICAgIGlmIChtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLmNvbnRhaW5zKHJvdW5kZWRJ
bnRQb2ludChwb3NpdGlvbikpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVudCk7CisjZW5kaWYKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZTo6c2V0T3JDbGVhckxhdGNoZWROb2RlKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkK
IHsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAod2hlZWxFdmVudC5zaG91bGRDb25zaWRl
ckxhdGNoaW5nKCkpCiAgICAgICAgIHNldExhdGNoZWROb2RlKG5vZGVJRCk7CiAgICAgZWxzZSBp
ZiAod2hlZWxFdmVudC5zaG91bGRSZXNldExhdGNoaW5nKCkpCiAgICAgICAgIGNsZWFyTGF0Y2hl
ZE5vZGUoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdoZWVsRXZlbnQpOworICAgIFVOVVNF
RF9QQVJBTShub2RlSUQpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZTo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCkBAIC0zMjYs
NiArMzM1LDcgQEAgU2Nyb2xsUGlubmluZ0JlaGF2aW9yIFNjcm9sbGluZ1RyZWU6OnNjcm9sbFBp
bm5pbmdCZWhhdmlvcigpCiAKIGJvb2wgU2Nyb2xsaW5nVHJlZTo6d2lsbFdoZWVsRXZlbnRTdGFy
dFN3aXBlR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCiB7Cisj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSAhPSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZUJlZ2FuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMzOSw3
ICszNDksOSBAQCBib29sIFNjcm9sbGluZ1RyZWU6OndpbGxXaGVlbEV2ZW50U3RhcnRTd2lwZUdl
c3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBpZiAod2hlZWxFdmVudC5kZWx0YVkoKSA8IDAgJiYgbV9tYWluRnJhbWVQaW5uZWRUb1Ro
ZUJvdHRvbSAmJiAhbV9ydWJiZXJCYW5kc0F0Qm90dG9tKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVudCk7CisjZW5kaWYKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCmluZGV4IDQ4Mzk4NmFmNWZiZWZmMTA1ZWY0NGMy
NTgxZWVmOGQxNDQwZjZmNWUuLmQyNmQzNjA2ZTllY2IzZDgzYmZlZTQ2YTdiMTMyN2ZiMmQ0MGVk
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Ny
b2xsaW5nVHJlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFk
ZWRTY3JvbGxpbmdUcmVlLmNwcApAQCAtMTE4LDcgKzExOCw5IEBAIHZvaWQgVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZShTY3JvbGxpbmdOb2Rl
SUQgbm9kCiAKICAgICBSZWZQdHI8QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcj4gc2Nyb2xsaW5n
Q29vcmRpbmF0b3IgPSBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yOwogICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbc2Nyb2xsaW5nQ29vcmRpbmF0b3IsIG5vZGVJRCwgaG9yaXpvbnRhbCwgdmVy
dGljYWxdIHsKKyNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlcyhub2RlSUQsIGhvcml6b250YWwsIHZlcnRpY2Fs
KTsKKyNlbmRpZgogICAgIH0pOwogfQogCkBAIC0xNjYsNyArMTY4LDYgQEAgdm9pZCBUaHJlYWRl
ZFNjcm9sbGluZ1RyZWU6OnJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihXaGVlbEV2ZW50VGVz
dFRyaWdnZXI6OlMKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlbW92ZVRlc3REZWZl
cnJhbEZvclJlYXNvbihpZGVudGlmaWVyLCByZWFzb24pOwogICAgIH0pOwogfQotCiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b29yZGluYXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YzczYmFhYmVjYjU4YzU3OGU1YWM1ZjEyNWNjOTQwY2Ew
ZDEzYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRH
cmFwaGljcy5jcHAKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5o
IgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUd0
ay5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgiCisjaW5jbHVkZSAiVGls
ZWRCYWNraW5nLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxTY3JvbGxpbmdDb29y
ZGluYXRvcj4gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQoreworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzKHBhZ2UpKTsKK30KKworQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5h
dGVkR3JhcGhpY3M6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNz
KFBhZ2UqIHBhZ2UpCisgICAgOiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UpCisgICAg
LCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyKCp0aGlzLCAmQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFRyZWVTdGF0ZSkKK3sKKyAg
ICBzZXRTY3JvbGxpbmdUcmVlKFNjcm9sbGluZ1RyZWVHdGs6OmNyZWF0ZSh0aGlzKSk7Cit9CisK
K0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjp+QXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MoKQoreworICAgIEFTU0VSVCghc2Ny
b2xsaW5nVHJlZSgpKTsKK30KKwordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRp
bmF0ZWRHcmFwaGljczo6cGFnZURlc3Ryb3llZCgpCit7CisgICAgQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21t
aXR0ZXJUaW1lci5zdG9wKCk7CisKKyAgICAvLyBJbnZhbGlkYXRpbmcgdGhlIHNjcm9sbGluZyB0
cmVlIHdpbGwgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZSBiZXR3ZWVuIHRoZSBTY3JvbGxpbmdD
b29yZGluYXRvciBhbmQgU2Nyb2xsaW5nVHJlZSBvYmplY3RzLgorICAgIFJlZlB0cjxUaHJlYWRl
ZFNjcm9sbGluZ1RyZWU+IHNjcm9sbGluZ1RyZWUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFRocmVh
ZGVkU2Nyb2xsaW5nVHJlZT4ocmVsZWFzZVNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5n
VGhyZWFkOjpkaXNwYXRjaChbc2Nyb2xsaW5nVHJlZV0geworICAgICAgICBzY3JvbGxpbmdUcmVl
LT5pbnZhbGlkYXRlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCkKK3sKKyAg
ICBjb21taXRUcmVlU3RhdGUoKTsKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRp
bWVyLnN0b3AoKTsKK30KKworYm9vbCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0
ZWRHcmFwaGljczo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcmLCBjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCktPndpbGxXaGVlbEV2
ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFJlZlB0cjxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+IHRocmVhZGVkU2Nyb2xsaW5nVHJl
ZSA9IGRvd25jYXN0PFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4oc2Nyb2xsaW5nVHJlZSgpKTsKKyAg
ICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRlZFNjcm9sbGluZ1RyZWUsIHdoZWVs
RXZlbnRdIHsKKyAgICAgICAgdGhyZWFkZWRTY3JvbGxpbmdUcmVlLT5oYW5kbGVXaGVlbEV2ZW50
KHdoZWVsRXZlbnQpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpzY2hlZHVsZVRyZWVTdGF0
ZUNvbW1pdCgpCit7CisgICAgQVNTRVJUKHNjcm9sbGluZ1N0YXRlVHJlZSgpLT5oYXNDaGFuZ2Vk
UHJvcGVydGllcygpIHx8IG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRGlydHkoKSk7CisgICAgaWYg
KG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVk
R3JhcGhpY3M6OmNvbW1pdFRyZWVTdGF0ZSgpCit7CisgICAgd2lsbENvbW1pdFRyZWUoKTsKKyAg
ICBpZiAoIXNjcm9sbGluZ1N0YXRlVHJlZSgpLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiB0aHJlYWRl
ZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHNjcm9sbGlu
Z1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKiB1bnByb3RlY3RlZFRyZWVTdGF0ZSA9
IHNjcm9sbGluZ1N0YXRlVHJlZSgpLT5jb21taXQoTGF5ZXJSZXByZXNlbnRhdGlvbjo6UGxhdGZv
cm1MYXllcklEUmVwcmVzZW50YXRpb24pLnJlbGVhc2UoKTsKKworICAgIFNjcm9sbGluZ1RocmVh
ZDo6ZGlzcGF0Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdW5wcm90ZWN0ZWRUcmVlU3RhdGVd
IHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gdHJlZVN0YXRl
KHVucHJvdGVjdGVkVHJlZVN0YXRlKTsKKyAgICAgICAgdGhyZWFkZWRTY3JvbGxpbmdUcmVlLT5j
b21taXROZXdUcmVlU3RhdGUoV1RGOjptb3ZlKHRyZWVTdGF0ZSkpOworICAgIH0pOworCisgICAg
dXBkYXRlVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoKTsKK30KKwordm9pZCBBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6dXBkYXRlVGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3IoKQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUo
KS52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIFRp
bGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gZnJhbWVWaWV3LT50aWxlZEJhY2tpbmcoKTsKKyAg
ICBpZiAoIXRpbGVkQmFja2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nTW9k
ZUluZGljYXRpb24gaW5kaWNhdG9yTW9kZTsKKyAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvblN5bmNocm9ub3VzbHkoKSkKKyAgICAgICAgaW5kaWNhdG9yTW9kZSA9IFN5bmNo
cm9ub3VzU2Nyb2xsaW5nQmVjYXVzZU9mU3R5bGVJbmRpY2F0aW9uOworICAgIGVsc2UKKyAgICAg
ICAgaW5kaWNhdG9yTW9kZSA9IEFzeW5jU2Nyb2xsaW5nSW5kaWNhdGlvbjsKKworICAgIHRpbGVk
QmFja2luZy0+c2V0U2Nyb2xsaW5nTW9kZUluZGljYXRpb24oaW5kaWNhdG9yTW9kZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRl
ZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL0FzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMy
ZDk2NGFjNTI5ODZiOTY2NzYwNTQ1MDM3ZmMyNzU1MDUxOTMwYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuaApAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3Jk
aW5hdGVkR3JhcGhpY3NfaAorI2RlZmluZSBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRp
bmF0ZWRHcmFwaGljc19oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVk
ZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlTm9kZTsKK2NsYXNzIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKK2NsYXNz
IFRocmVhZGVkU2Nyb2xsaW5nVHJlZTsKKworY2xhc3MgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ckNvb3JkaW5hdGVkR3JhcGhpY3MgOiBwdWJsaWMgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5h
dGVkR3JhcGhpY3MoUGFnZSopOworICAgIHZpcnR1YWwgfkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3JDb29yZGluYXRlZEdyYXBoaWNzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3ll
ZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgp
IG92ZXJyaWRlOworICAgIC8vIEhhbmRsZSB0aGUgd2hlZWwgZXZlbnQgb24gdGhlIHNjcm9sbGlu
ZyB0aHJlYWQuIFJldHVybnMgd2hldGhlciB0aGUgZXZlbnQgd2FzIGhhbmRsZWQgb3Igbm90Lgor
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KEZyYW1lVmlldyYsIGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBjb21taXRUcmVl
U3RhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCk7CisKKyAg
ICBUaW1lciBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKwor
I2VuZGlmIC8vIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdD
b29yZGluYXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZGU3YjVjMGE1NWQxNTNhNzJh
NWVkNDIzNzFiODkwYWU1N2U5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwCkBAIC0wLDAgKzEs
MTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxpbmdDb29yZGluYXRvckd0ay5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
KworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJT
Y3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUaHJlYWQuaCIKKyNpbmNs
dWRlICJTY3JvbGxpbmdUcmVlR3RrLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yR3RrKFBhZ2UqIHBhZ2UpCisgICAgOiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
KHBhZ2UpCisgICAgLCBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyKCp0aGlzLCAm
U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNvbW1pdFRyZWVTdGF0ZSkKK3sKKyAgICBzZXRTY3Jv
bGxpbmdUcmVlKFNjcm9sbGluZ1RyZWVHdGs6OmNyZWF0ZSh0aGlzKSk7Cit9CisKK1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yR3RrOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsoKQoreworICAgIEFTU0VS
VCghc2Nyb2xsaW5nVHJlZSgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckd0azo6
cGFnZURlc3Ryb3llZCgpCit7CisgICAgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cGFnZURl
c3Ryb3llZCgpOworCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9w
KCk7CisKKyAgICAvLyBJbnZhbGlkYXRpbmcgdGhlIHNjcm9sbGluZyB0cmVlIHdpbGwgYnJlYWsg
dGhlIHJlZmVyZW5jZSBjeWNsZSBiZXR3ZWVuIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBhbmQg
U2Nyb2xsaW5nVHJlZSBvYmplY3RzLgorICAgIFJlZlB0cjxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+
IHNjcm9sbGluZ1RyZWUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFRocmVhZGVkU2Nyb2xsaW5nVHJl
ZT4ocmVsZWFzZVNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRj
aChbc2Nyb2xsaW5nVHJlZV0geworICAgICAgICBzY3JvbGxpbmdUcmVlLT5pbnZhbGlkYXRlKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNvbW1pdFRyZWVT
dGF0ZUlmTmVlZGVkKCkKK3sKKyAgICBjb21taXRUcmVlU3RhdGUoKTsKKyAgICBtX3Njcm9sbGlu
Z1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLnN0b3AoKTsKK30KKworYm9vbCBTY3JvbGxpbmdDb29y
ZGluYXRvckd0azo6aGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcmLCBjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCktPndpbGxXaGVlbEV2
ZW50U3RhcnRTd2lwZUdlc3R1cmUod2hlZWxFdmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFJlZlB0cjxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+IHRocmVhZGVkU2Nyb2xsaW5nVHJl
ZSA9IGRvd25jYXN0PFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4oc2Nyb2xsaW5nVHJlZSgpKTsKKyAg
ICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRlZFNjcm9sbGluZ1RyZWUsIHdoZWVs
RXZlbnRdIHsKKyAgICAgICAgdGhyZWFkZWRTY3JvbGxpbmdUcmVlLT5oYW5kbGVXaGVlbEV2ZW50
KHdoZWVsRXZlbnQpOworICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yR3RrOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCit7CisgICAgQVNT
RVJUKHNjcm9sbGluZ1N0YXRlVHJlZSgpLT5oYXNDaGFuZ2VkUHJvcGVydGllcygpIHx8IG5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uRGlydHkoKSk7CisgICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVl
Q29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3Jv
bGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNvbW1pdFRyZWVTdGF0ZSgpCit7CisgICAgd2lsbENv
bW1pdFRyZWUoKTsKKyAgICBpZiAoIXNjcm9sbGluZ1N0YXRlVHJlZSgpLT5oYXNDaGFuZ2VkUHJv
cGVydGllcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxp
bmdUcmVlPiB0aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNjcm9sbGlu
Z1RyZWU+KHNjcm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKiB1bnByb3Rl
Y3RlZFRyZWVTdGF0ZSA9IHNjcm9sbGluZ1N0YXRlVHJlZSgpLT5jb21taXQoTGF5ZXJSZXByZXNl
bnRhdGlvbjo6UGxhdGZvcm1MYXllcklEUmVwcmVzZW50YXRpb24pLnJlbGVhc2UoKTsKKworICAg
IFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdW5wcm90
ZWN0ZWRUcmVlU3RhdGVdIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGluZ1N0YXRl
VHJlZT4gdHJlZVN0YXRlKHVucHJvdGVjdGVkVHJlZVN0YXRlKTsKKyAgICAgICAgdGhyZWFkZWRT
Y3JvbGxpbmdUcmVlLT5jb21taXROZXdUcmVlU3RhdGUoV1RGTW92ZSh0cmVlU3RhdGUpKTsKKyAg
ICB9KTsKKworICAgIHVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OnVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCkK
K3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygp
OworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBUaWxlZEJhY2tp
bmcqIHRpbGVkQmFja2luZyA9IGZyYW1lVmlldy0+dGlsZWRCYWNraW5nKCk7CisgICAgaWYgKCF0
aWxlZEJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ01vZGVJbmRpY2F0
aW9uIGluZGljYXRvck1vZGU7CisgICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRp
b25TeW5jaHJvbm91c2x5KCkpCisgICAgICAgIGluZGljYXRvck1vZGUgPSBTeW5jaHJvbm91c1Nj
cm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjsKKyAgICBlbHNlCisgICAgICAgIGluZGlj
YXRvck1vZGUgPSBBc3luY1Njcm9sbGluZ0luZGljYXRpb247CisKKyAgICB0aWxlZEJhY2tpbmct
PnNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKGluZGljYXRvck1vZGUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNWZhMjgzNGU3M2ExNTViZDA4MTk3YmVjZGY2
MTk1MzM1ZTZlNWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmgKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrX2gKKyNkZWZpbmUg
U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGtfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
KworI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZU5vZGU7Citj
bGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRy
ZWU7CitjbGFzcyBUaHJlYWRlZFNjcm9sbGluZ1RyZWU7CisKK2NsYXNzIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrIDogcHVibGljIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrKFBhZ2UqKTsKKyAgICB2aXJ0dWFs
IH5TY3JvbGxpbmdDb29yZGluYXRvckd0aygpOworCisgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0
cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJlZVN0YXRlSWZOZWVk
ZWQoKSBvdmVycmlkZTsKKyAgICAvLyBIYW5kbGUgdGhlIHdoZWVsIGV2ZW50IG9uIHRoZSBzY3Jv
bGxpbmcgdGhyZWFkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBoYW5kbGVkIG9yIG5v
dC4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChGcmFtZVZpZXcmLCBjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY29tbWl0
VHJlZVN0YXRlKCk7CisgICAgdm9pZCB1cGRhdGVUaWxlZFNjcm9sbGluZ0luZGljYXRvcigpOwor
CisgICAgVGltZXIgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGluYXRvckd0a19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTZmNTk1MTIwYTI0
ZmU5MDlmNzQ4OThhYWRmNDQ5ZmZiNTU3YzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
R3RrLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxh
Ym9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIgorCisj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6c2V0U2Nyb2xsYmFyUGFpbnRlcnNGcm9tU2Nyb2xsYmFycyhTY3JvbGxiYXIq
IHZTY3JvbGxiYXIsIFNjcm9sbGJhciogaFNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxiYXJUaGVt
ZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKKyAgICBpZiAoc2Ny
b2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xs
YmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHZTY3JvbGxiYXIgJiYgdlNjcm9sbGJhci0+c3VwcG9y
dHNVcGRhdGVPblNlY29uZGFyeVRocmVhZCgpCisgICAgICAgID8gdlNjcm9sbGJhciA6IG51bGxw
dHI7CisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gaFNjcm9sbGJhciAmJiBo
U2Nyb2xsYmFyLT5zdXBwb3J0c1VwZGF0ZU9uU2Vjb25kYXJ5VGhyZWFkKCkKKyAgICAgICAgPyBo
U2Nyb2xsYmFyIDogbnVsbHB0cjsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyID09IHZl
cnRpY2FsU2Nyb2xsYmFyICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gdlNj
cm9sbGJhcjsKKyAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBoU2Nyb2xsYmFyOworCisgICAg
c2V0UHJvcGVydHlDaGFuZ2VkKFBhaW50ZXJGb3JTY3JvbGxiYXIpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFU
Rk9STShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsv
U2Nyb2xsaW5nVGhyZWFkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0
ay9TY3JvbGxpbmdUaHJlYWRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwOTFhMGEyNTI3YWJmMzRmMThm
NzFhYjlkMzIwYzk1OGY1OGZkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3RrLmNwcApAQCAtMCwwICsxLDExMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xs
aW5nVGhyZWFkLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdS
dW5Mb29wIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxpbmdSdW5Mb29wKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTY3JvbGxpbmdSdW5Mb29w
KCkKKyAgICAgICAgOiBtX3J1bkxvb3AoUnVuTG9vcDo6Y3VycmVudCgpKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGNhbGxPblNjcm9sbGluZ1J1bkxvb3Aoc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCZtX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1
cnJlbnQoKSkgeworICAgICAgICAgICAgZnVuY3Rpb24oKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIG1fcnVuTG9vcC5kaXNwYXRjaChXVEZNb3ZlKGZ1bmN0aW9u
KSk7CisgICAgfQorCisgICAgUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9vcDsg
fQorcHJpdmF0ZToKKyAgICBSdW5Mb29wJiBtX3J1bkxvb3A7Cit9OworCitTY3JvbGxpbmdUaHJl
YWQ6OlNjcm9sbGluZ1RocmVhZCgpCisgICAgOiBtX3RocmVhZElkZW50aWZpZXIoMCkKKyAgICAs
IG1fdGhyZWFkUnVuTG9vcChudWxscHRyKQoreworfQorCitTY3JvbGxpbmdUaHJlYWQ6On5TY3Jv
bGxpbmdUaHJlYWQoKQoreworICAgIHRlcm1pbmF0ZVNjcm9sbGluZ1RocmVhZCgpOworfQorCit2
b2lkIFNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3AoKQoreworICAgIHsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcE11dGV4KTsKKyAgICAgICAg
bV90aHJlYWRSdW5Mb29wID0gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxpbmdSdW5Mb29wPigpOwor
CisgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKKyAgICB9CisKKyAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkpOworICAgIG1fdGhyZWFk
UnVuTG9vcC0+cnVuTG9vcCgpLnJ1bigpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3Rlcm1pbmF0ZVJ1bkxvb3BNdXRleCk7CisgICAgICAgIG1fdGhyZWFkUnVuTG9vcCA9
IG51bGxwdHI7CisgICAgICAgIG1fdGVybWluYXRlUnVuTG9vcENvbmRpdGlvbi5ub3RpZnlPbmUo
KTsKKyAgICB9CisKKyAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJZGVudGlmaWVyKTsKK30KKwor
dm9pZCBTY3JvbGxpbmdUaHJlYWQ6OnRlcm1pbmF0ZVNjcm9sbGluZ1RocmVhZCgpCit7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIobV90ZXJtaW5hdGVSdW5Mb29wTXV0ZXgpOworICAgIG1fdGhyZWFk
UnVuTG9vcC0+cnVuTG9vcCgpLnN0b3AoKTsKKyAgICBtX3Rlcm1pbmF0ZVJ1bkxvb3BDb25kaXRp
b24ud2FpdChtX3Rlcm1pbmF0ZVJ1bkxvb3BNdXRleCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVGhy
ZWFkOjpkaXNwYXRjaChzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQoreworICAgIGF1
dG8mIHNjcm9sbGluZ1RocmVhZCA9IFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCk7CisgICAg
c2Nyb2xsaW5nVGhyZWFkLmNyZWF0ZVRocmVhZElmTmVlZGVkKCk7CisKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKHNpbmdsZXRvbigpLm1fZnVuY3Rpb25zTXV0ZXgpOworICAgICAg
ICBzY3JvbGxpbmdUaHJlYWQubV90aHJlYWRSdW5Mb29wLT5jYWxsT25TY3JvbGxpbmdSdW5Mb29w
KGZ1bmN0aW9uKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmY0MzhhM2JhMmQ3NmEzN2E1ODIxNmI5NDI4ODcwOThmMTg1MTc5MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVl
Rml4ZWROb2RlLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgiCisKKyNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1Ry
ZWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8U2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZT4gU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGlu
Z1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpKTsKK30KKwor
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZShTY3JvbGxpbmdU
cmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQorICAgIDogU2Nyb2xs
aW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSwgRml4ZWROb2RlLCBub2RlSUQpCit7Cit9CisKK1Nj
cm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCkKK3sKK30KKwor
dm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZU5vZGUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShj
b25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6
ZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY2Y2ZmNGVlMDZkMzllY2Y1ZDBhMDlkMzY3ZmViODQzYTQ5ZmQ1MWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJlZUZpeGVk
Tm9kZV9oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0NvbnN0cmFpbnRzLmgiCisjaW5jbHVkZSAi
U2Nyb2xsaW5nVHJlZU5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaXhl
ZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKKworY2xhc3MgU2Nyb2xsaW5nVHJlZUZpeGVk
Tm9kZSA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZjxTY3JvbGxpbmdUcmVlRml4ZWROb2RlPiBjcmVhdGUoU2Nyb2xsaW5n
VHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlRml4
ZWROb2RlKCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZShTY3JvbGxp
bmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCZWZv
cmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdU
cmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3Qs
IGNvbnN0IEZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKSBvdmVycmlkZTsKKworICAgIEZpeGVk
UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIG1fY29uc3RyYWludHM7CisgICAgR3JhcGhpY3NM
YXllcjo6UGxhdGZvcm1MYXllcklEIG1fbGF5ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfU0NST0xMSU5HX05PREUoU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZSwgaXNGaXhlZE5vZGUoKSkKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlRml4ZWROb2RlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTYzM2VkZTI3
ODY3NjMxMTEwYzM0NGIyYjY1NjRlYWI0N2NmNzhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVHdGsuY3BwCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgi
CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVU
cmVlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIHZvaWQgbG9nVGhyZWFkZWRTY3JvbGxpbmdNb2RlKHVuc2lnbmVkIHN5bmNocm9u
b3VzU2Nyb2xsaW5nUmVhc29ucyk7CisKK1JlZjxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlPiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpjcmVhdGUoU2Nyb2xsaW5n
VHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKHNjcm9s
bGluZ1RyZWUsIG5vZGVJRCkpOworfQorCitTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
R3RrOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrKFNjcm9sbGluZ1RyZWUmIHNj
cm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCisgICAgOiBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlKHNjcm9sbGluZ1RyZWUsIG5vZGVJRCkKKyAgICAsIG1fc2Nyb2xs
Q29udHJvbGxlcigqdGhpcykKKyAgICAsIG1fc2Nyb2xsTGF5ZXIoMCkKKyAgICAsIG1fc2Nyb2xs
ZWRDb250ZW50c0xheWVyKDApCisgICAgLCBtX2NvdW50ZXJTY3JvbGxpbmdMYXllcigwKQorICAg
ICwgbV9pbnNldENsaXBMYXllcigwKQorICAgICwgbV9jb250ZW50U2hhZG93TGF5ZXIoMCkKKyAg
ICAsIG1faGVhZGVyTGF5ZXIoMCkKKyAgICAsIG1fZm9vdGVyTGF5ZXIoMCkKKyAgICAsIG1fY29t
cG9zaXRpbmdDb29yZGluYXRvcihudWxscHRyKQorICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhcihu
dWxscHRyKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKG51bGxwdHIpCit7Cit9CisKK1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6On5TY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlR3RrKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrOjpzZXRMYXllclBvc2l0aW9uKEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBp
ZCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisgICAgQVNTRVJUKG1fY29tcG9zaXRpbmdDb29yZGluYXRvcik7CisgICAgbV9jb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLT5jb21taXRMYXllclBvc2l0aW9uKGlkLCBwKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGlkKTsKKyAgICBVTlVTRURfUEFSQU0ocCk7CisjZW5kaWYKK30KKwordm9pZCBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihj
b25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUpOworICAg
IGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogY29tcG9zaXRpbmdD
b29yZGluYXRvciA9IHN0YXRlTm9kZS5jb21wb3NpdGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYg
KGNvbXBvc2l0aW5nQ29vcmRpbmF0b3IgJiYgY29tcG9zaXRpbmdDb29yZGluYXRvciAhPSBtX2Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IpCisgICAgICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvciA9
IGNvbXBvc2l0aW5nQ29vcmRpbmF0b3I7CisjZW5kaWYKKworICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIp
KSB7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXJQb3Np
dGlvbiA9IHNjcm9sbGluZ1N0YXRlTm9kZS5sYXllclBvc2l0aW9uKCk7CisjZW5kaWYKKyAgICB9
CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKKyAgICAg
ICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuc2Nyb2xsZWRD
b250ZW50c0xheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGlu
Z0xheWVyKSkKKyAgICAgICAgbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIgPSBzY3JvbGxpbmdTdGF0
ZU5vZGUuY291bnRlclNjcm9sbGluZ0xheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6
SW5zZXRDbGlwTGF5ZXIpKQorICAgICAgICBtX2luc2V0Q2xpcExheWVyID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLmluc2V0Q2xpcExheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q29udGVu
dFNoYWRvd0xheWVyKSkKKyAgICAgICAgbV9jb250ZW50U2hhZG93TGF5ZXIgPSBzY3JvbGxpbmdT
dGF0ZU5vZGUuY29udGVudFNoYWRvd0xheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6
SGVhZGVyTGF5ZXIpKQorICAgICAgICBtX2hlYWRlckxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2Rl
LmhlYWRlckxheWVyKCk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVyTGF5ZXIpKQor
ICAgICAgICBtX2Zvb3RlckxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmZvb3RlckxheWVyKCk7
CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6UGFpbnRlckZvclNjcm9sbGJhcikpIHsKKyAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGluZ1N0YXRlTm9kZS52ZXJ0aWNhbFNjcm9s
bGJhcigpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxpbmdTdGF0ZU5v
ZGUuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0KKworICAgIGJvb2wgbG9nU2Nyb2xsaW5n
TW9kZSA9ICFtX2hhZEZpcnN0VXBkYXRlOworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpSZWFzb25z
Rm9yU3luY2hyb25vdXNTY3JvbGxpbmcpKSB7CisgICAgICAgIGlmIChzaG91bGRVcGRhdGVTY3Jv
bGxMYXllclBvc2l0aW9uU3luY2hyb25vdXNseSgpKSB7CisgICAgICAgICAgICAvLyBXZSdyZSB0
cmFuc2l0aW9uaW5nIHRvIHRoZSBzbG93ICJ1cGRhdGUgc2Nyb2xsIGxheWVyIHBvc2l0aW9uIG9u
IHRoZSBtYWluIHRocmVhZCIgbW9kZS4KKyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHBy
b2JhYmxlIG1haW4gdGhyZWFkIHNjcm9sbCBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjcm9s
bCBsYXllciBwb3NpdGlvbi4KKyAgICAgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFz
Q2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Ny
b2xsUG9zaXRpb24pKQorICAgICAgICAgICAgICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xs
UG9zaXRpb24gPSBzY3JvbGxpbmdTdGF0ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHNj
cm9sbExheWVyUG9zaXRpb24gPSBtX3Njcm9sbExheWVyUG9zaXRpb247CisgICAgICAgICAgICAg
ICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbiA9IEZsb2F0UG9pbnQoLXNjcm9s
bExheWVyUG9zaXRpb24ueCgpLCAtc2Nyb2xsTGF5ZXJQb3NpdGlvbi55KCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgbG9nU2Nyb2xsaW5nTW9kZSA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKGxvZ1Njcm9sbGluZ01vZGUpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ1Ry
ZWUoKS5zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpCisgICAgICAgICAgICBs
b2dUaHJlYWRlZFNjcm9sbGluZ01vZGUoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKCkpOwor
ICAgIH0KKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6RXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcikp
CisgICAgICAgIG1fZXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5leHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyKCk7CisKKyAgICBtX2hhZEZpcnN0VXBk
YXRlID0gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3Rr
Ojp1cGRhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2Rl
KQoreworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnVwZGF0ZUFmdGVyQ2hp
bGRyZW4oc3RhdGVOb2RlKTsKKworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9
IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKKworICAg
IC8vIFVwZGF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFmdGVyIGNoaWxkIG5vZGVzIGhhdmUgYmVl
biB1cGRhdGVkLCBiZWNhdXNlIHRoZXkgbmVlZCB0byBoYXZlIHVwZGF0ZWQgdGhlaXIgY29uc3Ry
YWludHMgYmVmb3JlIGFueSBzY3JvbGxpbmcgaGFwcGVucy4KKyAgICBpZiAoc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uKSkKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xs
aW5nU3RhdGVOb2RlLnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3Jv
bGxMYXllcikKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplKQorICAgICAg
ICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFyZWFTaXplKSkKKyAgICAgICAgdXBkYXRlTWFpbkZy
YW1lUGluU3RhdGUoc2Nyb2xsUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0azo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKCFjYW5IYXZlU2Nyb2xsYmFycygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIuaGFuZGxlV2hlZWxFdmVudCh3
aGVlbEV2ZW50KTsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3Rr
Ojppc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpcyBheGlzKQoreworICAgIHN3aXRjaCAo
YXhpcykgeworICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDoKKyAgICAgICAgcmV0
dXJuICh3aGVlbEV2ZW50LmRlbHRhWSgpID4gMCAmJiBzY3JvbGxQb3NpdGlvbigpLnkoKSA8PSBt
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpIHx8ICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAm
JiBzY3JvbGxQb3NpdGlvbigpLnkoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwor
ICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOgorICAgICAgICByZXR1cm4gKHdo
ZWVsRXZlbnQuZGVsdGFYKCkgPiAwICYmIHNjcm9sbFBvc2l0aW9uKCkueCgpIDw9IG1pbmltdW1T
Y3JvbGxQb3NpdGlvbigpLngoKSkgfHwgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAwICYmIHNjcm9s
bFBvc2l0aW9uKCkueCgpID49IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0KQoreworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNj
cm9sbEJ5KG9mZnNldCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUd0azo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGlmIChzaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uU3luY2hyb25vdXNseSgpKQorICAgICAgICByZXR1cm4gbV9w
cm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbjsKKworICAgIHJldHVybiAtbV9zY3JvbGxM
YXllclBvc2l0aW9uOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVH
dGs6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQor
eworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsUG9zaXRpb24gIiA8PCBzY3JvbGxQb3Np
dGlvbiA8PCAiIHNjcm9sbFBvc2l0aW9uKCk6ICIgPDwgdGhpcy0+c2Nyb2xsUG9zaXRpb24oKSA8
PCAiIG1pbjogIiA8PCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSA8PCAiIG1heDogIiA8PCBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICAvLyBTY3JvbGwgZGVsdGFzIGNhbiBiZSBub24t
aW50ZWdyYWwgd2l0aCBzb21lIGlucHV0IGRldmljZXMsIHNvIHNjcm9sbFBvc2l0aW9uIG1heSBu
b3QgYmUgaW50ZWdyYWwuCisgICAgLy8gRklYTUU6IHdoZW4gd2Ugc3VwcG9ydCBoYWxmLXBpeGVs
IHNjcm9sbCBwb3NpdGlvbnMgb24gUmV0aW5hIGRpc3BsYXlzLCB0aGlzIHdpbGwgbmVlZCB0byBy
b3VuZCB0byBoYWxmIHBpeGVscy4KKyAgICBGbG9hdFBvaW50IHJvdW5kZWRQb3NpdGlvbihyb3Vu
ZGYoc2Nyb2xsUG9zaXRpb24ueCgpKSwgcm91bmRmKHNjcm9sbFBvc2l0aW9uLnkoKSkpOworCisg
ICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsUG9zaXRpb24ocm91
bmRlZFBvc2l0aW9uKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nUGVyZm9y
bWFuY2VMb2dnaW5nRW5hYmxlZCgpKQorICAgICAgICBsb2dFeHBvc2VkVW5maWxsZWRBcmVhKCk7
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0U2Nyb2xs
UG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFBvaW50JiBz
Y3JvbGxQb3NpdGlvbikKK3sKKyAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3Np
dGlvbik7CisKKyAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5bmNocm9u
b3VzbHkoKSkgeworICAgICAgICBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uID0g
c2Nyb2xsUG9zaXRpb247CisgICAgICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9k
ZURpZFNjcm9sbChzY3JvbGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIFNldFNjcm9sbGlu
Z0xheWVyUG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0U2Nyb2xs
TGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9s
bGluZ1RyZWVOb2RlRGlkU2Nyb2xsKHNjcm9sbGluZ05vZGVJRCgpLCBzY3JvbGxQb3NpdGlvbik7
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0U2Nyb2xs
TGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBBU1NFUlQo
IXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpOworCisgICAg
bV9zY3JvbGxMYXllclBvc2l0aW9uID0gLXBvc2l0aW9uOworICAgIHNldExheWVyUG9zaXRpb24o
bV9zY3JvbGxMYXllciwgbV9zY3JvbGxMYXllclBvc2l0aW9uKTsKKworICAgIFNjcm9sbEJlaGF2
aW9yRm9yRml4ZWRFbGVtZW50cyBiZWhhdmlvckZvckZpeGVkID0gc2Nyb2xsQmVoYXZpb3JGb3JG
aXhlZEVsZW1lbnRzKCk7CisgICAgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdChwb3NpdGlvbiwgc2Ny
b2xsYWJsZUFyZWFTaXplKCkpOworCisgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbkZvckZp
eGVkQ2hpbGRyZW4gPSBGcmFtZVZpZXc6OnNjcm9sbFBvc2l0aW9uRm9yRml4ZWRQb3NpdGlvbihl
bmNsb3NpbmdMYXlvdXRSZWN0KHZpZXdwb3J0UmVjdCksIExheW91dFNpemUodG90YWxDb250ZW50
c1NpemUoKSksIExheW91dFBvaW50KHBvc2l0aW9uKSwgc2Nyb2xsT3JpZ2luKCksIGZyYW1lU2Nh
bGVGYWN0b3IoKSwKKyAgICAgICAgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgp
LCBiZWhhdmlvckZvckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkpOworCisg
ICAgaWYgKG1fY291bnRlclNjcm9sbGluZ0xheWVyKQorICAgICAgICBzZXRMYXllclBvc2l0aW9u
KG1fY291bnRlclNjcm9sbGluZ0xheWVyLCBGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uRm9yRml4
ZWRDaGlsZHJlbikpOworCisgICAgZmxvYXQgdG9wQ29udGVudEluc2V0ID0gdGhpcy0+dG9wQ29u
dGVudEluc2V0KCk7CisgICAgaWYgKG1faW5zZXRDbGlwTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXIgJiYgdG9wQ29udGVudEluc2V0KSB7CisgICAgICAgIHNldExheWVyUG9zaXRpb24o
bV9pbnNldENsaXBMYXllciwgRmxvYXRQb2ludCgwLCBGcmFtZVZpZXc6OnlQb3NpdGlvbkZvcklu
c2V0Q2xpcExheWVyKHBvc2l0aW9uLCB0b3BDb250ZW50SW5zZXQpKSk7CisKKyAgICAgICAgY29u
c3QgRmxvYXRQb2ludCBzY3JvbGxlZENvbnRlbnRzTGF5ZXJQb3NpdGlvbiA9IEZyYW1lVmlldzo6
cG9zaXRpb25Gb3JSb290Q29udGVudExheWVyKHBvc2l0aW9uLCBzY3JvbGxPcmlnaW4oKSwgdG9w
Q29udGVudEluc2V0LCBoZWFkZXJIZWlnaHQoKSk7CisgICAgICAgIHNldExheWVyUG9zaXRpb24o
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIsIHNjcm9sbGVkQ29udGVudHNMYXllclBvc2l0aW9uKTsK
KyAgICAgICAgaWYgKG1fY29udGVudFNoYWRvd0xheWVyKQorICAgICAgICAgICAgc2V0TGF5ZXJQ
b3NpdGlvbihtX2NvbnRlbnRTaGFkb3dMYXllciwgc2Nyb2xsZWRDb250ZW50c0xheWVyUG9zaXRp
b24pOworICAgIH0KKworICAgIGlmIChtX2hlYWRlckxheWVyIHx8IG1fZm9vdGVyTGF5ZXIpIHsK
KyAgICAgICAgLy8gR2VuZXJhbGx5IHRoZSBiYW5uZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGhv
cml6b250YWwtcG9zaXRpb24gY29tcHV0YXRpb24gYXMgYSBmaXhlZCBlbGVtZW50LiBIb3dldmVy
LAorICAgICAgICAvLyB0aGUgYmFubmVycyBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoZSBmcmFtZVNj
YWxlRmFjdG9yKCksIHNvIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIG5vbi0xIGZyYW1lU2NhbGVG
YWN0b3IoKQorICAgICAgICAvLyB0aGVuIHdlIHNob3VsZCByZWNvbXB1dGUgc2Nyb2xsUG9zaXRp
b25Gb3JGaXhlZENoaWxkcmVuIGZvciB0aGUgYmFubmVyIHdpdGggYSBzY2FsZSBmYWN0b3Igb2Yg
MS4KKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciA9IHNjcm9s
bFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJlbi54KCk7CisgICAgICAgIGlmIChmcmFtZVNjYWxlRmFj
dG9yKCkgIT0gMSkKKyAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIg
PSBGcmFtZVZpZXc6OnNjcm9sbFBvc2l0aW9uRm9yRml4ZWRQb3NpdGlvbihlbmNsb3NpbmdMYXlv
dXRSZWN0KHZpZXdwb3J0UmVjdCksIExheW91dFNpemUodG90YWxDb250ZW50c1NpemUoKSksIExh
eW91dFBvaW50KHBvc2l0aW9uKSwgc2Nyb2xsT3JpZ2luKCksIDEsIGZpeGVkRWxlbWVudHNMYXlv
dXRSZWxhdGl2ZVRvRnJhbWUoKSwgYmVoYXZpb3JGb3JGaXhlZCwgaGVhZGVySGVpZ2h0KCksIGZv
b3RlckhlaWdodCgpKS54KCk7CisKKyAgICAgICAgaWYgKG1faGVhZGVyTGF5ZXIpCisgICAgICAg
ICAgICBzZXRMYXllclBvc2l0aW9uKG1faGVhZGVyTGF5ZXIsIEZsb2F0UG9pbnQoaG9yaXpvbnRh
bFNjcm9sbE9mZnNldEZvckJhbm5lciwgRnJhbWVWaWV3Ojp5UG9zaXRpb25Gb3JIZWFkZXJMYXll
cihwb3NpdGlvbiwgdG9wQ29udGVudEluc2V0KSkpOworCisgICAgICAgIGlmIChtX2Zvb3Rlckxh
eWVyKSB7CisgICAgICAgICAgICBzZXRMYXllclBvc2l0aW9uKG1fZm9vdGVyTGF5ZXIsIEZsb2F0
UG9pbnQoaG9yaXpvbnRhbFNjcm9sbE9mZnNldEZvckJhbm5lciwKKyAgICAgICAgICAgICAgICBG
cmFtZVZpZXc6OnlQb3NpdGlvbkZvckZvb3RlckxheWVyKHBvc2l0aW9uLCB0b3BDb250ZW50SW5z
ZXQsIHRvdGFsQ29udGVudHNTaXplKCkuaGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisK
KyAgICB2aWV3cG9ydFJlY3Quc2V0TG9jYXRpb24oc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZENoaWxk
cmVuKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKKyAgICAgICAgY2hp
bGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRoaXMsIHZpZXdwb3J0UmVjdCwg
RmxvYXRTaXplKCkpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVH
dGs6OnVwZGF0ZUxheWVyc0FmdGVyVmlld3BvcnRDaGFuZ2UoY29uc3QgRmxvYXRSZWN0JiwgZG91
YmxlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitGbG9hdFBvaW50IFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNv
bnN0Cit7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQ
b3NpdGlvbkZyb21PZmZzZXQoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShzY3JvbGxPcmlnaW4o
KSkpOworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkucm9vdE5vZGUoKSA9PSB0aGlzICYmIHNjcm9s
bGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKSA9PSBQaW5Ub0JvdHRvbSkKKyAgICAg
ICAgcG9zaXRpb24uc2V0WShtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOworCisgICAgcmV0
dXJuIHBvc2l0aW9uOworfQorCitGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVHdGs6Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgRmxvYXRQb2lu
dCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoRmxv
YXRQb2ludCh0b3RhbENvbnRlbnRzU2l6ZUZvclJ1YmJlckJhbmQoKSAtIHNjcm9sbGFibGVBcmVh
U2l6ZSgpKSwgdG9GbG9hdFNpemUoc2Nyb2xsT3JpZ2luKCkpKTsKKyAgICBwb3NpdGlvbiA9IHBv
c2l0aW9uLmV4cGFuZGVkVG8oRmxvYXRQb2ludCgpKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVl
KCkucm9vdE5vZGUoKSA9PSB0aGlzICYmIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxQaW5uaW5nQmVo
YXZpb3IoKSA9PSBQaW5Ub1RvcCkKKyAgICAgICAgcG9zaXRpb24uc2V0WShtaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKS55KCkpOworCisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCit2b2lkIFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKGNv
bnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIGJvb2wgcGlubmVkVG9UaGVM
ZWZ0ID0gc2Nyb2xsUG9zaXRpb24ueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsK
KyAgICBib29sIHBpbm5lZFRvVGhlUmlnaHQgPSBzY3JvbGxQb3NpdGlvbi54KCkgPj0gbWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkueCgpOworICAgIGJvb2wgcGlubmVkVG9UaGVUb3AgPSBzY3JvbGxQ
b3NpdGlvbi55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpOworICAgIGJvb2wgcGlu
bmVkVG9UaGVCb3R0b20gPSBzY3JvbGxQb3NpdGlvbi55KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkueSgpOworCisgICAgc2Nyb2xsaW5nVHJlZSgpLnNldE1haW5GcmFtZVBpblN0YXRlKHBp
bm5lZFRvVGhlTGVmdCwgcGlubmVkVG9UaGVSaWdodCwgcGlubmVkVG9UaGVUb3AsIHBpbm5lZFRv
VGhlQm90dG9tKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3Rr
Ojpsb2dFeHBvc2VkVW5maWxsZWRBcmVhKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitzdGF0aWMgdm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWduZWQgc3luY2hyb25v
dXNTY3JvbGxpbmdSZWFzb25zKQoreworICAgIGlmIChzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNv
bnMpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciByZWFzb25zRGVzY3JpcHRpb247CisKKyAgICAg
ICAgaWYgKHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpGb3JjZWRPbk1haW5UaHJlYWQpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBw
ZW5kTGl0ZXJhbCgiZm9yY2VkLCIpOworICAgICAgICBpZiAoc3luY2hyb25vdXNTY3JvbGxpbmdS
ZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Okhhc1Nsb3dSZXBhaW50T2JqZWN0cykKKyAg
ICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmRMaXRlcmFsKCJzbG93LXJlcGFpbnQg
b2JqZWN0cywiKTsKKyAgICAgICAgaWYgKHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c1dpdGhvdXRT
dXBwb3J0aW5nRml4ZWRMYXllcnMpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBw
ZW5kTGl0ZXJhbCgidmlld3BvcnQtY29uc3RyYWluZWQgb2JqZWN0cywiKTsKKyAgICAgICAgaWYg
KHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNO
b25MYXllclZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKQorICAgICAgICAgICAgcmVhc29uc0Rl
c2NyaXB0aW9uLmFwcGVuZExpdGVyYWwoIm5vbi1sYXllciB2aWV3cG9ydC1jb25zdHJhaW5lZCBv
YmplY3RzLCIpOworICAgICAgICBpZiAoc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zICYgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OklzSW1hZ2VEb2N1bWVudCkKKyAgICAgICAgICAgIHJlYXNvbnNE
ZXNjcmlwdGlvbi5hcHBlbmRMaXRlcmFsKCJpbWFnZSBkb2N1bWVudCwiKTsKKworICAgICAgICAv
LyBTdHJpcCB0aGUgdHJhaWxpbmcgY29tbWEuCisgICAgICAgIFN0cmluZyByZWFzb25zRGVzY3Jp
cHRpb25UcmltbWVkID0gcmVhc29uc0Rlc2NyaXB0aW9uLnRvU3RyaW5nKCkubGVmdChyZWFzb25z
RGVzY3JpcHRpb24ubGVuZ3RoKCkgLSAxKTsKKworICAgICAgICBXVEZMb2dBbHdheXMoIlNDUk9M
TElORzogU3dpdGNoaW5nIHRvIG1haW4tdGhyZWFkIHNjcm9sbGluZyBtb2RlLiBUaW1lOiAlZiBS
ZWFzb24ocyk6ICVzXG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCByZWFz
b25zRGVzY3JpcHRpb25UcmltbWVkLmFzY2lpKCkuZGF0YSgpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IFN3aXRjaGluZyB0byB0aHJlYWRlZCBzY3JvbGxp
bmcgbW9kZS4gVGltZTogJWZcbiIsIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3Rr
L1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTRiYzExZmNiMTIyYWE5NmFiNzU1YzZlNDVkM2FjOTJjOGU4YmFhYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrX2gKKyNkZWZp
bmUgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0a19oCisKKyNpZiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNj
cm9sbENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorI2luY2x1
ZGUgIlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQ7CitjbGFzcyBUZXh0
dXJlTWFwcGVyTGF5ZXI7CisKK2NsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVH
dGsgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3Jv
bGxDb250cm9sbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVl
JiwgU2Nyb2xsaW5nTm9kZUlEKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlR3RrKCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUd0ayhTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIC8vIFNj
cm9sbGluZ1RyZWVOb2RlIG1lbWJlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9k
ZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOworCisgICAgLy8gU2Nyb2xsY29udHJvbGxlckNs
aWVudCBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBG
bG9hdFNpemUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOyB9CisgICAgdmly
dHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBt
X2hvcml6b250YWxTY3JvbGxiYXI7IH0KKworICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24o
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRl
bnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB1cGRhdGVMYXllcnNBZnRlclZpZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQ
b3NpdGlvblJlY3QsIGRvdWJsZSBzY2FsZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFNjcm9s
bExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworCisgICAgRmxvYXRQ
b2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFBv
aW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCB1
cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbik7
CisKKyAgICBib29sIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYsIFNjcm9sbEV2ZW50QXhpcyk7CisKKyAgICB2b2lkIGxvZ0V4cG9z
ZWRVbmZpbGxlZEFyZWEoKTsKKworICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbihHcmFwaGljc0xh
eWVyOjpQbGF0Zm9ybUxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIFNjcm9sbENv
bnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOworCisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIG1fc2Nyb2xsTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCBtX2NvdW50ZXJTY3JvbGxpbmdMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQgbV9pbnNldENsaXBMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQgbV9jb250ZW50U2hhZG93TGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIG1faGVhZGVyTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIG1fZm9vdGVyTGF5ZXI7CisKKyAgICBGbG9hdFBvaW50IG1fc2Nyb2xsTGF5ZXJQb3NpdGlv
bjsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogbV9jb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOworCisgICAgU2Nyb2xsYmFyKiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIFNj
cm9sbGJhciogbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworCisgICAgRmxvYXRQb2ludCBtX3Byb2Jh
YmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOworICAgIGJvb2wgbV9sYXN0U2Nyb2xsSGFkVW5m
aWxsZWRQaXhlbHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYWRGaXJzdFVwZGF0ZSB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdnZXIgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGtf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1RyZWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1RyZWVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYTZlMWI0YzczMGYzMjUzM2I5OWUzZTlkZWUxZjlm
ZDljMTdiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9ndGsvU2Nyb2xsaW5nVHJlZUd0ay5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUd0ay5oIgor
CisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZS5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1JlZjxTY3JvbGxpbmdUcmVlR3RrPiBTY3JvbGxpbmdUcmVlR3RrOjpj
cmVhdGUoQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZUd0ayhzY3JvbGxpbmdDb29y
ZGluYXRvcikpOworfQorCitTY3JvbGxpbmdUcmVlR3RrOjpTY3JvbGxpbmdUcmVlR3RrKEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAgIDogVGhyZWFk
ZWRTY3JvbGxpbmdUcmVlKHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQoreworfQorCitQYXNzUmVmUHRy
PFNjcm9sbGluZ1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlR3RrOjpjcmVhdGVTY3JvbGxpbmdUcmVl
Tm9kZShTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkK
K3sKKyAgICBzd2l0Y2ggKG5vZGVUeXBlKSB7CisgICAgY2FzZSBGcmFtZVNjcm9sbGluZ05vZGU6
CisgICAgICAgIHJldHVybiBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpjcmVh
dGUoKnRoaXMsIG5vZGVJRCk7CisgICAgY2FzZSBPdmVyZmxvd1Njcm9sbGluZ05vZGU6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBj
YXNlIEZpeGVkTm9kZToKKyAgICAgICAgcmV0dXJuIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNy
ZWF0ZSgqdGhpcywgbm9kZUlEKTsKKyAgICBjYXNlIFN0aWNreU5vZGU6CisgICAgICAgIHJldHVy
biBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y3JlYXRlKCp0aGlzLCBub2RlSUQpOworICAgIH0K
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xs
aW5nVHJlZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1RyZWVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYThiNmJjZTcyNWQ5N2NhYzQ3YWVkZjIzYjlkNDc5Zjli
Y2VkMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Z3RrL1Njcm9sbGluZ1RyZWVHdGsuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgU2Nyb2xsaW5nVHJlZUd0a19oCisjZGVmaW5lIFNjcm9sbGluZ1RyZWVHdGtfaAor
CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIlRocmVhZGVkU2Nyb2xs
aW5nVHJlZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGluZ1RyZWVH
dGsgOiBwdWJsaWMgVGhyZWFkZWRTY3JvbGxpbmdUcmVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFNjcm9sbGluZ1RyZWVHdGs+IGNyZWF0ZShBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKik7
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IGNyZWF0ZVNjcm9s
bGluZ1RyZWVOb2RlKFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQpIG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFNjcm9sbGluZ1RyZWVHdGsoQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvciopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ1RyZWVHdGtf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1RyZWVTdGlja3lOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlmNmJhYTFkYjMxODk3MThm
M2NmMzQ2YzAxM2I3NTAwMzIyYWJiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRl
U3RpY2t5Tm9kZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWY8U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU+IFNjcm9sbGluZ1RyZWVTdGlj
a3lOb2RlOjpjcmVhdGUoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5nTm9k
ZUlEIG5vZGVJRCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpKTsKK30KKworU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGU6OlNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1Ry
ZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCisgICAgOiBTY3JvbGxpbmdUcmVlTm9kZShzY3Jv
bGxpbmdUcmVlLCBTdGlja3lOb2RlLCBub2RlSUQpCit7Cit9CisKK1Njcm9sbGluZ1RyZWVTdGlj
a3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKQoreworfQorCit2b2lkIFNjcm9sbGlu
Z1RyZWVTdGlja3lOb2RlOjp1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0
ZU5vZGUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xs
aW5nVHJlZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcyYmUwNjIyYTUxMDM3YmUxMTE1MmQwOWY0MjFkY2M4MGVlOGQ3ZWYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
b2xsaW5nVHJlZVN0aWNreU5vZGVfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZV9o
CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzOworCitjbGFzcyBT
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CitwdWJs
aWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTY3JvbGxpbmdUcmVlU3RpY2t5Tm9k
ZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQpOworCisgICAgdmlydHVh
bCB+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKTsKKworcHJpdmF0ZToKKyAgICBTY3JvbGxpbmdU
cmVlU3RpY2t5Tm9kZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUm
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNo
YW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVj
dCYgZml4ZWRQb3NpdGlvblJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKSBv
dmVycmlkZTsKKworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1ND
Uk9MTElOR19OT0RFKFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLCBpc1N0aWNreU5vZGUoKSkKKwor
I2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdU
cmVlU3RpY2t5Tm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCA0
YjcwMWM3ODFmYWQxMGIwMTQ2Yjk0ZGQyODgzNjJmYzU5YTBjZTAzLi43ZDVkODk1ZTNmZjUzYjA5
MWY4YmY3ZjE4YjFiN2Q4YzQ3NzU2MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5jcHAKQEAgLTQ4Miw2ICs0ODIsOSBAQCBib29sIFNjcm9sbGJhcjo6c3VwcG9ydHNVcGRhdGVP
blNlY29uZGFyeVRocmVhZCgpIGNvbnN0CiAgICAgcmV0dXJuICFtX3Njcm9sbGFibGVBcmVhLmZv
cmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpCiAg
ICAgICAgICYmIChtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSB8fCBtX3Njcm9sbGFibGVBcmVhLmhhc0xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQog
ICAgICAgICAmJiBtX3Njcm9sbGFibGVBcmVhLnVzZXNBc3luY1Njcm9sbGluZygpOworI2VsaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oR1RLKQorICAgIHJldHVybiAhbV9z
Y3JvbGxhYmxlQXJlYS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3Jt
YW5jZVRlc3RpbmcoKQorICAgICAgICAmJiBtX3Njcm9sbGFibGVBcmVhLnVzZXNBc3luY1Njcm9s
bGluZygpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuaAppbmRleCA2YWRiNjU0YzgxMzRjNTE4N2VhOTY3ZjgyMGNhZWNkMzY3ZDQ4ZDQ4Li45
NTFjYWIyZjU5YmFjNDA1Mjg1NjBlYTg0NGI0Y2EzZjhlYmFhZmVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5oCkBAIC0xMzEsNiArMTMxLDggQEAgcHVibGljOgogICAgIHZvaWQgYXBwbHlBbmlt
YXRpb25zUmVjdXJzaXZlbHkoKTsKICAgICB2b2lkIGFkZENoaWxkKFRleHR1cmVNYXBwZXJMYXll
ciopOwogCisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGFkanVzdGVk
UG9zaXRpb24oKTsgfQorCiBwcml2YXRlOgogICAgIGNvbnN0IFRleHR1cmVNYXBwZXJMYXllciYg
cm9vdExheWVyKCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXggNGJmZGRmZDZjYmJkNzgzNTAwNDg3YTc5
MjBiM2VmMmI1N2E3ZGYxOS4uMTA4MDc4ODA2ZTk0MjFkOGU5MGNmMmNhZGI1Zjk3MTIyNzZlZjNi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmNwcApAQCAtMTkxLDYgKzE5MSwxMyBAQCB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29vcmRpbmF0ZWRHcgogICAg
IG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkp
OwogfQogCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKK3ZvaWQgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Y29tbWl0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
Y29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBtX2NsaWVudC0+Y29tbWl0TGF5ZXJQb3NpdGlv
bihsYXllcklELCBwKTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRl
ZChJbWFnZSogaW1hZ2UpCiB7CiAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
ID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQo
aW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmgKaW5kZXggYTgxYjQ1MmU5Y2Y0Njc0ZmEyY2NlMTVlNGQ0OWMzOTI3NWIxZGQ4MS4uZTFk
ODczOTQ2YjhkOWJmODc0YmJiZmZhZTI2MjQzZTVkNGU0NGY3YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC01OSw2ICs1OSw5IEBA
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSA9IDA7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NTdGF0ZSYpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50TGF5ZXJDb250
ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpID0gMDsKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgICAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0
IEZsb2F0UG9pbnQmKSA9IDA7CisjZW5kaWYKICAgICB9OwogCiAgICAgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcihQYWdlKiwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Kik7CkBAIC0xMDgs
NiArMTExLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50VG9T
dXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZh
Y2U6OkZsYWdzLCB1aW50MzJfdCYgLyogYXRsYXNJRCAqLywgV2ViQ29yZTo6SW50UG9pbnQmLCBX
ZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVudCopIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlJikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
KyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgLy8gVXBkYXRlQXRs
YXM6OkNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApp
bmRleCBjYjk0YTk2NTIyYTFlNGU3MGNmODFjYzE3NDc2NTU2NDcyNDU3MGI5Li43NzdiMGZhN2Qx
YzY1ZDBkN2UyNzNiMjZkMDI1ZmNlMmJmYWJmMTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMzk1LDYgKzM5NSwx
NSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkoKQogICAgIGFkZFJlcGFpbnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsKIH0KIAordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQor
eworICAgIGlmIChwb3NpdGlvbigpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBo
aWNzTGF5ZXI6OnN5bmNQb3NpdGlvbihwKTsKKyAgICBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVj
dCgpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1Bs
YXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgQ29udGVudHNMYXllclB1
cnBvc2UpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggOGE0NWMzNTY1ODU3
MDQzNTcxYjJlMzU5Zjc2NmVmOTFiZDQwY2NjYS4uN2I1NWZmY2FkNjZkOWE5Njk1NDMyOTk4Yjdj
OWQzODQ4MmJiMjZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNl
OjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiwgQ29vcmRpbmF0ZWRTdXJmYWNl
OjpDbGllbnQqKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKKworI2lm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdExheWVyUG9z
aXRpb24oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpID0gMDsK
KyNlbmRpZgogfTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdy
YXBoaWNzTGF5ZXIKQEAgLTEwMiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIgPSBDbGlwVG9M
YXllcikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3Rh
dGUoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoYm9vbCkgb3ZlcnJpZGU7CkBAIC0x
NDIsNiArMTQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShj
b25zdCBJbnRTaXplJiwgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIEludFBvaW50JiwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpDbGllbnQqKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0Q29vcmRpbmF0
b3IoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50KiBjb29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0
b3I7IH0KIAogICAgIHZvaWQgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKICAgICB2
b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmOTBmZmEwM2E3OTBhY2I3MmFm
ODZhODVkMTI2MzlhNTU2OTQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2Nyb2xsQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxl
ci5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxD
b250cm9sbGVyQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisK
K2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyID0gbV9jbGllbnQuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9sbGJhciogdmVy
dGljYWxTY3JvbGxiYXIgPSBtX2NsaWVudC52ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgZmxv
YXQgZGVsdGFYID0gaG9yaXpvbnRhbFNjcm9sbGJhciA/IC13aGVlbEV2ZW50LmRlbHRhWCgpIDog
MDsKKyAgICBmbG9hdCBkZWx0YVkgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IC13aGVlbEV2ZW50LmRl
bHRhWSgpIDogMDsKKworICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxs
eSBieSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQorICAgIGlmIChmYWJzZihkZWx0YVkp
ID49IGZhYnNmKGRlbHRhWCkpCisgICAgICAgIGRlbHRhWCA9IDA7CisgICAgZWxzZQorICAgICAg
ICBkZWx0YVkgPSAwOworCisgICAgaWYgKGRlbHRhWCB8fCBkZWx0YVkpIHsKKyAgICAgICAgaWYg
KGRlbHRhWSkgeworICAgICAgICAgICAgZGVsdGFZICo9IHZlcnRpY2FsU2Nyb2xsYmFyLT5waXhl
bFN0ZXAoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCBkZWx0
YVkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVsdGFYKSB7CisgICAgICAgICAgICBkZWx0
YVggKj0gaG9yaXpvbnRhbFNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7CisgICAgICAgICAgICBtX2Ns
aWVudC5zY3JvbGxCeShGbG9hdFNpemUoZGVsdGFYLCAwKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2Nyb2xsQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjYWRmOTUzZjBiYzJlMWQ3MDgyYjZh
OWQyZjgwMGMyMGJmYjRhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTY3JvbGxDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsQ29udHJvbGxl
cl9oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdFRy
aWdnZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBTY3JvbGxiYXI7CitjbGFz
cyBXaGVlbEV2ZW50VGVzdFRyaWdnZXI7CisKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQg
eworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xsZXJDbGllbnQoKSB7IH0K
KworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSA9
IDA7CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgPSAwOworICAg
IHZpcnR1YWwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIGRlZmVyVGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3Jv
bGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJp
Z2dlclJlYXNvbikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdn
ZXJSZWFzb24pIGNvbnN0IHsgLyogRG8gbm90aGluZyAqLyB9CisKK307CisKK2NsYXNzIFNjcm9s
bENvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbENvbnRyb2xsZXIp
OworCitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9s
bGVyQ2xpZW50Jik7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsQ29udHJvbGxlckNsaWVudCYgbV9j
bGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsQ29udHJvbGxlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCAxYjc4ZmQ4ZWZhMjA3OGY0
Yzg4MWQ5Y2EzOWJkMzljZGU0MGY5M2E5Li4yYzUxOTFkOGYwOTYxYjhjNTU0MmFiMTYxOGNiMWYw
MTZiN2I0YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAK
QEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5
ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaQogCiBUZXh0dXJlTWFw
cGVyTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkKQogewotICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3Jk
aW5hdGVkTGF5ZXJJRCkgPyBsYXllckJ5SUQoaWQpIDogMDsKKyAgICByZXR1cm4gKGlkICE9IElu
dmFsaWRDb29yZGluYXRlZExheWVySUQpID8gbGF5ZXJCeUlEKGlkKSA6IG51bGxwdHI7CiB9CiAK
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQpAQCAtNjk2LDYgKzY5NiwxNCBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0U2Nyb2xsT2Zmc2V0KHVpbnQzMl90IGxh
eWVySUQsIGNvbnN0IEludFNpegogICAgIH0pOwogfQogCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclBvc2l0aW9uKHVp
bnQzMl90IGxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgaWYgKFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCkpCisgICAgICAgIGxheWVyLT5z
ZXRQb3NpdGlvbihwKTsKK30KKyNlbmRpZgorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBpZiAobV9jbGllbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IDY4YWFiZmU0MGM0ZGY4MTk3ZDE2ZmJk
NjJiOGFmZmE1ZTljMjc5NjAuLjQyNDczNGY4YmQ1ZGM5MTkzMzNjYWYyMmRmODBmYTZiOGRiOWU4
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC03NSw2ICs3
NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0
ZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOwogCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
KyAgICB2b2lkIHNldExheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYpOworI2VuZGlmCisKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXIqIGZpbmRTY3JvbGxhYmxlQ29udGVudHNMYXllckF0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3QgbGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9U
aHJlYWRlZENvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKaW5kZXgg
ZmVjNWY2OTE1ZDMxMGUwZDQ1OTczYTEyNWM3OTRmMDkzYjRmMjA4NC4uNjU1MzBiNzBkMDA1YmJk
Yjg0MTljMjY0ZTVhMzhlYWQyMjZjODQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9z
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
dGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKQEAgLTIxMyw2ICsyMTMs
MTcgQEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJf
dCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmYKICAgICBtX2NsaWVudC0+Y29tbWl0U2Nyb2xs
T2Zmc2V0KGxheWVySUQsIG9mZnNldCk7CiB9CiAKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQordm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OmNvbW1pdExheWVyUG9zaXRpb24odWludDMyX3Qg
bGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgUmVmUHRyPENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZT4gc2NlbmUgPSBtX3NjZW5lOworICAgIG1fc2NlbmUtPmFwcGVu
ZFVwZGF0ZShbc2NlbmUsIGxheWVySUQsIHBvc2l0aW9uXSB7CisgICAgICAgIHNjZW5lLT5zZXRM
YXllclBvc2l0aW9uKGxheWVySUQsIHBvc2l0aW9uKTsKKyAgICB9KTsKKyAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKK30KKyNlbmRpZgorCiBib29sIFRocmVhZGVkQ29tcG9zaXRvcjo6ZW5zdXJlR0xD
b250ZXh0KCkKIHsKICAgICBpZiAoIWdsQ29udGV4dCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVh
ZGVkQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCmluZGV4IDRhNzg5ZmQx
NDNmNDgxYjNlY2NkMTIxOTllNTQ1MjYzYzczZjgwNTMuLmRhY2QxYTU1ZWVmNzI5MDlmMjQxNWE1
MWM3Y2Q2MjZlYjk3NjA0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNv
bXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKQEAgLTc3LDYgKzc3LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdm9pZCBz
Y3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQorICAgIHZvaWQgY29tbWl0TGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklELCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBUaHJl
YWRlZENvbXBvc2l0b3IoQ2xpZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKaW5kZXggNmVjZGUxODZjNDI3NDQ1YWM4YWZmYWZiNTY3YmIxMDRjNzgwZGFi
Yi4uYjUzZWU3MmM5OThiMzI2NDlmYjU1ZWUyYzljYjAyN2YzZGQ4ZDA3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTEyMyw3ICsxMjMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Zp
ZXcuaD4KIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eS5oIgogI2VuZGlmCiAKQEAgLTc4Miw3ICs3ODIsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UoKQogICAgIG1fZHJhd2luZ0FyZWEgPSBtX3BhZ2VD
bGllbnQuY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwogICAgIEFTU0VSVChtX2RyYXdpbmdBcmVh
KTsKIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKG1fZHJhd2luZ0FyZWEtPnR5cGUoKSA9
PSBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWUpIHsKICAgICAgICAgbV9zY3JvbGxpbmdD
b29yZGluYXRvclByb3h5ID0gc3RkOjptYWtlX3VuaXF1ZTxSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclByb3h5PigqdGhpcyk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTc3OSw3ICsxNzc5LDcg
QEAgc3RhdGljIFdlYldoZWVsRXZlbnQgY29hbGVzY2VkV2hlZWxFdmVudChEZXF1ZTxOYXRpdmVX
ZWJXaGVlbEV2ZW50PiYgcXVldWUsIFZlY3QKIAogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiB7Ci0jaWYgRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAobV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5ICYmIG1fc2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eS0+aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybShldmVudCkpKQog
ICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTE5MTEsNyArMTkxMSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQzMl90IHByb2Nl
c3NUeXBlLCBjb25zCiAKIGJvb2wgV2ViUGFnZVByb3h5OjpzaG91bGRTdGFydFRyYWNraW5nVG91
Y2hFdmVudHMoY29uc3QgV2ViVG91Y2hFdmVudCYgdG91Y2hTdGFydEV2ZW50KSBjb25zdAogewot
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
JiYgUExBVEZPUk0oSU9TKQogICAgIGZvciAoYXV0byYgdG91Y2hQb2ludCA6IHRvdWNoU3RhcnRF
dmVudC50b3VjaFBvaW50cygpKSB7CiAgICAgICAgIGlmIChtX3Njcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHktPmlzUG9pbnRJbk5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHRvdWNoUG9pbnQubG9jYXRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAppbmRleCBmODQyMzU4MTg0MGM1ZmMyMTlmNzdkMjRkZjZkN2RhZWI0MGZl
M2RiLi4wNTBjZmJjMmQ2NWM4MWYwNWYxNTkyMjAyNmNiY2U3YWFkYjJkNmQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zMDAsNyArMzAwLDcgQEAgcHVibGlj
OgogICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgeyByZXR1cm4gbV9kYXRhRGV0
ZWN0aW9uUmVzdWx0cy5nZXQoKTsgfQogI2VuZGlmCiAgICAgICAgIAotI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oQ09D
T0EpCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSogc2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5n
ZXQoKTsgfQogI2VuZGlmCiAKQEAgLTE1MDksNyArMTUwOSw3IEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fZmFpbGluZ1Byb3Zpc2lvbmFsTG9hZFVSTDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxE
cmF3aW5nQXJlYVByb3h5PiBtX2RyYXdpbmdBcmVhOwotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk+IG1fc2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5k
ZXggMDllMzI2MjhiZTVkYWE0OGExZGRjNDc3NTk3NjdkMjFiNGMyYmVlYS4uYzk4YmIzMjk2YzA3
YWM0MWRhNjdjOTUxNDc1ZWMyZGY1MDc0YTE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApA
QCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIK
ICNlbmRpZgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNf
U0NST0xMSU5HKSAmJiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvci5oIgogI2VuZGlmCiAKQEAgLTg0Miw4ICs4NDIsMTAgQEAgYm9vbCBXZWJDaHJv
bWVDbGllbnQ6OmxheWVyVHJlZVN0YXRlSXNGcm96ZW4oKSBjb25zdAogUGFzc1JlZlB0cjxTY3Jv
bGxpbmdDb29yZGluYXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTY3JvbGxpbmdDb29yZGlu
YXRvcihQYWdlKiBwYWdlKSBjb25zdAogewogICAgIEFTU0VSVChtX3BhZ2UtPmNvcmVQYWdlKCkg
PT0gcGFnZSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0Fy
ZWEoKS0+dHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSkKICAgICAgICAg
cmV0dXJuIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUobV9wYWdlKTsKKyNlbmRp
ZgogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjc0
MTA1OWQzNzMxOGQwMDc0MjU3N2JlNGI0OWUyOGRiZGY0MWEwOS4uNTI1YjQzZGI3YTQ3MmQ1ZjMz
M2RjY2RhOWY5MDhmZjQ4MzU1NDczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAt
Mjk2LDYgKzI5NiwxMyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpw
YWludExheWVyQ29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosCiB7CiB9CiAKKyNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQordm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0TGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklELCBjb25zdCBGbG9hdFBvaW50
JiBwKQoreworICAgIG1fY29tcG9zaXRvci0+Y29tbWl0TGF5ZXJQb3NpdGlvbihsYXllcklELCBw
KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDc3ZTJlMTIw
NTMyYjdmZDAwMjEwOGQ3MzlmZmNiMWIxNDkxOWRkNTcuLjI2Y2ZlYzg1ZjQ1YjllZTFiMzc5MzQw
NzRjZDllNzI4NWQ5Y2RhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMTI2LDYgKzEy
Niw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkgb3Zl
cnJpZGU7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0TGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50Jikgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRy
ZWVDb250ZXh0OwogICAgIHVpbnQ2NF90IG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
SW1wbC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1w
bC5oCmluZGV4IDUyYTMzMzQxMjFkOGI4NTRiNWE1NjZlYWM2Yzc0MGMyNjE0MGZjMDguLjQyM2Yw
MDE5OTViN2M0ODk5MzczNGI4NjBjMTM1ZjY1ZTRmZWNmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKQEAgLTc1LDYgKzc1
LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcoYm9vbCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQXN5
bmNTY3JvbGxpbmcoKSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKwogICAgIC8vIElQQyBtZXNz
YWdlIGhhbmRsZXJzLgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1
aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBib29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRVcGRhdGUoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggYjk2Mzk4ZWQzNWMzYjA3ODI0ZjI0
YzljNTBlOGYzMjNmYTExNDBhZC4uMGY4M2JhZTdkODJkMGU1ZWU0OTExNzFmYjJmNzhiOGFiY2Fh
NzVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2
ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTExNCw2ICsxMTQsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6d2hlZWxFdmVudCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVs
RXZlbgogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9zY3JvbGxpbmdUcmVlc011dGV4KTsKICAgICBpZiAoUmVmUHRyPFRocmVhZGVkU2Nyb2xsaW5n
VHJlZT4gc2Nyb2xsaW5nVHJlZSA9IG1fc2Nyb2xsaW5nVHJlZXMuZ2V0KHBhZ2VJRCkpIHsKKyNp
ZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gRklYTUU6IEl0J3MgcHJldHR5IGhvcnJpYmxl
IHRoYXQgd2UncmUgdXBkYXRpbmcgdGhlIGJhY2svZm9yd2FyZCBzdGF0ZSBoZXJlLgogICAgICAg
ICAvLyBXZWJDb3JlIHNob3VsZCBhbHdheXMga25vdyB0aGUgY3VycmVudCBzdGF0ZSBhbmQga25v
dyB3aGVuIGl0IGNoYW5nZXMgc28gdGhlCiAgICAgICAgIC8vIHNjcm9sbGluZyB0cmVlIGNhbiBi
ZSBub3RpZmllZC4KQEAgLTEyMyw2ICsxMjQsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hl
ZWxFdmVudCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbgog
ICAgICAgICAgICAgICAgIHNjcm9sbGluZ1RyZWUtPnNldENhblJ1YmJlckJhbmRTdGF0ZShjYW5S
dWJiZXJCYW5kQXRMZWZ0LCBjYW5SdWJiZXJCYW5kQXRSaWdodCwgY2FuUnViYmVyQmFuZEF0VG9w
LCBjYW5SdWJiZXJCYW5kQXRCb3R0b20pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KKyNl
bmRpZgogCiAgICAgICAgIFNjcm9sbGluZ1RyZWU6OkV2ZW50UmVzdWx0IHJlc3VsdCA9IHNjcm9s
bGluZ1RyZWUtPnRyeVRvSGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybVdoZWVsRXZlbnQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9P
cHRpb25zR1RLLmNtYWtlCmluZGV4IDRjMGZjNzk1OGVmM2U5NTI5ODU3YmM2MDU1ZGFkZGFhMjk4
NDQyYzIuLjVhNzE1NGU1M2JlNjY2NmM3Mjg5NWZiYWE0Y2U2YmYzOWUwNzkyOGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlCkBAIC05Nyw2ICs5Nyw3IEBAIFdFQktJVF9PUFRJT05fQ09ORkxJQ1QoRU5B
QkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBFTkFCTEVfR0xFUzIpCiAKIFdFQktJVF9PUFRJT05f
REVQRU5EKEVOQUJMRV8zRF9UUkFOU0ZPUk1TIEVOQUJMRV9PUEVOR0wpCiBXRUJLSVRfT1BUSU9O
X0RFUEVORChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIEVOQUJMRV9PUEVOR0wpCitXRUJL
SVRfT1BUSU9OX0RFUEVORChFTkFCTEVfQVNZTkNfU0NST0xMSU5HIEVOQUJMRV9USFJFQURFRF9D
T01QT1NJVE9SKQogV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX0dMRVMyIEVOQUJMRV9PUEVO
R0wpCiBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSBFTkFC
TEVfWDExX1RBUkdFVCkKIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9QTFVHSU5fUFJPQ0VT
U19HVEsyIEVOQUJMRV9YMTFfVEFSR0VUKQpAQCAtMTQ4LDYgKzE0OSw3IEBAIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKFVTRV9TWVNURU1fTUFMTE9DIFBVQkxJQyBPRkYpCiAjIENo
YW5naW5nIHRoZXNlIG9wdGlvbnMgaXMgY29tcGxldGVseSB1bnN1cHBvcnRlZC4KIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9UUkFOU0ZPUk1TIFBSSVZBVEUgT04p
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRVNTSUJJTElUWSBQ
UklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FTWU5D
X1NDUk9MTElORyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0NBTlZBU19QQVRIIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0NTU19JTUFHRV9TRVQgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05f
REVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfUkVHSU9OUyBQUklWQVRFIE9OKQpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDFjNTg4ZWU1YjlhZTVkZGQ2M2Q4Y2Jl
OWNjODZlYWIwNWI1MzY4MmQuLmE2M2FkMGRiYzA1ZGZjNGUwYTM2YTY5NjYzNGI5N2IxZGY4MmVm
YmMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBA
QAorMjAxNi0wMi0xMSAgQ2hhbmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9oQGNvbGxhYm9yYS5jb20+
CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IGluaXRpYWwgc3VwcG9ydCBvZiBhc3luY2hyb25v
dXMgc2Nyb2xsaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUxNDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZTogQWRkIGEgcHJpdmF0ZSBmbGFn
LCBFTkFCTEVfQVNZTkNfU0NST0xMSU5HLgorCiAyMDE2LTAyLTA5ICBDc2FiYSBPc3p0cm9nb27D
oWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0dUS11bRUZMXSBGaXggc2V2ZXJhbCBi
dWlsZCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gU2FtcGxpbmdQcm9maWxlciBhZnRlciByMTk2
MjQ1Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271530</attachid>
            <date>2016-02-16 21:12:21 -0800</date>
            <delta_ts>2017-04-30 17:44:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151436-20160217141200.patch</filename>
            <type>text/plain</type>
            <size>114765</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzY5ZGUyNjNkMTgyMjY3
YjEwMWYwZmMxOTkyODdjYjcxZTIwYjNhOC4uOTljYzZjNWRiN2E3NGExMjdlNzI2YmUyYjg0YjNl
ODNlYTQwYWY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAxNi0wMi0xNiAgQ2hh
bmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9oQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10g
SW1wbGVtZW50IGluaXRpYWwgc3VwcG9ydCBvZiBhc3luY2hyb25vdXMgc2Nyb2xsaW5nLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDM2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
YnJpbmdzIHRoZSBhc3luY2hyb25vdXMgc2Nyb2xsaW5nIGZlYXR1cmUgdG8gdGhlIGd0ayBwb3J0
LiBCYXNpYyBpZGVhIGlzIHRvIGhhbmRsZQorICAgICAgICBzY3JvbGwgZXZlbnRzIGluIGEgc2Vw
YXJhdGUgdGhyZWFkIGNhbGxlZCAnc2Nyb2xsaW5nIHRocmVhZCcsIG5vdCB0aGUgbWFpbiB0aHJl
YWQuCisgICAgICAgIFRoZSBzY3JvbGwgZXZlbnRzIGFyZSBwcm9jZXNzZWQgYW5kIG5ldyBwb3Np
dGlvbiBvZiByZWxldmFudCBsYXllcnMgaXMgY2FsY3VsYXRlZCBhbmQgdGhlbiBtb3ZlCisgICAg
ICAgIHBsYXRmb3JtTGF5ZXJzIGFjY29yZGluZyB0byB0aGUgcG9zdGlvbnMgaW4gdGhlIHNjcm9s
bGluZyB0aHJlYWQuIFZpc2libGUgcmVjdCBpcyB1cGRhdGVkCisgICAgICAgIGFmdGVyIHRoYXQg
aW4gdGhlIG1haW4gdGhyZWFkIHdoZW4gc3luY2hyb25pemluZyB0aGUgY2FsY3VsYXRlZCBwb3Np
dGlvbiB3aXRoIEdyYXBoaWNzTGF5ZXIncyBwb3NpdGlvbi4KKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIG5vdCBmdWxseSBzdXBwb3J0IGZpeGVkLCBzdGlja3kgYW5kIG92ZXJmbG93IGVsZW1lbnQg
eWV0LiBUaGV5IHdpbGwgYmUgY292ZXJlZCBieSBmb2xsb3dpbmcKKyAgICAgICAgcGF0Y2hlcy4g
QWxzbywgdGhlIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gdGhlIHRocmVhZGVkIGNv
bXBvc2l0b3IuIE90aGVyIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlci4KKworICAgICAgICBO
byBuZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTdGF0ZVNjcm9sbGlu
Z05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvcjo6dXBkYXRlRnJhbWVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9s
bGluZ05vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlLmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsaW5n
U3RhdGVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Y29tcG9zaXRpbmdDb29y
ZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2Rl
OjpsYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
c2V0TGF5ZXJQb3NpdGlvbik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhy
ZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6flNjcm9sbGluZ1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rp
b25zRnJvbVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJl
YWQ6OmlzQ3VycmVudFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6
OmNyZWF0ZVRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUaHJlYWQuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnNob3VsZEhhbmRsZVdoZWVsRXZlbnRT
eW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnNldE9yQ2xl
YXJMYXRjaGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjp3aWxsV2hl
ZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9UaHJl
YWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkZWRTY3JvbGxp
bmdUcmVlOjpjdXJyZW50U25hcFBvaW50SW5kaWNlc0RpZENoYW5nZSk6CisgICAgICAgICogcGFn
ZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
ckNvb3JkaW5hdGVkR3JhcGhpY3MpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6On5Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljcyk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6cGFnZURlc3Ryb3llZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljczo6Y29t
bWl0VHJlZVN0YXRlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRUcmVlU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhp
Y3M6OnVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9jb29yZGluYXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGlu
YXRlZEdyYXBoaWNzLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3Jv
bGxpbmdDb29yZGluYXRvckd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3JHdGs6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjp+U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OnBhZ2VEZXN0cm95
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmNvbW1pdFRy
ZWVTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
R3RrOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yR3RrOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdDb29yZGluYXRvckd0azo6Y29tbWl0VHJlZVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjp1cGRhdGVUaWxlZFNjcm9sbGluZ0luZGljYXRv
cik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3Rr
Lmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdTdGF0ZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9s
bGJhcnMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUaHJlYWRHdGsu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nUnVuTG9vcDo6U2Nyb2xsaW5n
UnVuTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdSdW5Mb29wOjpjYWxsT25TY3Jv
bGxpbmdSdW5Mb29wKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1J1bkxvb3A6OnJ1bkxv
b3ApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjp+U2Nyb2xsaW5nVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjp0ZXJtaW5hdGVTY3JvbGxpbmdUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaCk6CisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpTY3JvbGxpbmdUcmVlRml4
ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3Jv
bGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUJlZm9yZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVGaXhlZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlR3RrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0
ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3Rr
Ojp+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ayk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVw
ZGF0ZUJlZm9yZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0ZUFmdGVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpp
c0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzY3JvbGxCeSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3Rr
OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVHdGs6OnNldFNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBkYXRlTGF5ZXJzQWZ0ZXJWaWV3cG9y
dENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlR3RrOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnVwZGF0
ZU1haW5GcmFtZVBpblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVHdGs6OmxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEpOgorICAgICAgICAoV2Vi
Q29yZTo6bG9nVGhyZWFkZWRTY3JvbGxpbmdNb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUd0ay5jcHA6IEFkZGVkLgorICAg
ICAgICAoU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRlKToKKyAgICAgICAgKFNjcm9sbGluZ1RyZWVH
dGs6OlNjcm9sbGluZ1RyZWVHdGspOgorICAgICAgICAoU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRl
U2Nyb2xsaW5nVHJlZU5vZGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxp
bmdUcmVlR3RrLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVl
U3RpY2t5Tm9kZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6On5TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzdXBwb3J0c1VwZGF0ZU9u
U2Vjb25kYXJ5VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjb21taXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29vcmRpbmF0b3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9TY3JvbGxDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQ29udHJvbGxlckNsaWVudDo6flNjcm9sbENvbnRyb2xsZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlckNsaWVudDo6ZGVmZXJUZXN0c0ZvclJlYXNvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjpyZW1vdmVUZXN0RGVm
ZXJyYWxGb3JSZWFzb24pOgorCiAyMDE2LTAyLTE1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEdhdGhlciBzb21lIHJ1ZGltZW50YXJ5IHN0YXRp
c3RpY3MgZHVyaW5nIHJlc291cmNlIGxvYWQgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWMwMDc4MDg5Mzk4Y2Ey
NGFkMTRmZGU2OGI5ZWU2MGVmMzU4NTk1My4uNGQ3ODk4MmZkZGUzNGJlM2Y5MzRhZTQwOWQyZjBm
ZTlkOGMxZmJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE2LTAyLTE2ICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXSBJ
bXBsZW1lbnQgaW5pdGlhbCBzdXBwb3J0IG9mIGFzeW5jaHJvbm91cyBzY3JvbGxpbmcuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE0MzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3N0IG9mIGNoYW5n
ZXMgaW4gV2ViS2l0MiBsYXllciBpcyByZWxhdGVkIHRvIGFkZGluZyBhbiBpbnRlcmZhY2UgdG8g
c2V0IFRleHR1cmVNYXBwZXJMYXllciBhIHBvc2l0aW9uCisgICAgICAgIGZyb20gQ29tcG9zaXRp
bmdDb29yZGluYXRvci4KKworICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUG9zaXRpb24pOgorICAgICAgICAqIFNo
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAg
ICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJl
YWRlZENvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvbXBvc2l0b3I6
OmNvbW1pdExheWVyUG9zaXRpb24pOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojppbml0aWFsaXplV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFu
ZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkU3Rh
cnRUcmFja2luZ1RvdWNoRXZlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRMYXllclBvc2l0aW9u
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBs
OjpzdXBwb3J0c0FzeW5jU2Nyb2xsaW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp3
aGVlbEV2ZW50KToKKwogMjAxNi0wMi0xNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZWQgdW51c2VkIGZpbGVzIGFmdGVyIHIxOTY0NzguCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IGQ2NTE1NmU0NjE4ODcyZDhmNTU5NDMxMWViNTNjOGI3MmE4ODY5MjYu
LjBmZmRiYTI0YzViZjAzMTkwOWYwZDRmNjc0YTIwMmI0ZDI0MWM2ZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0yMDgwLDYgKzIwODAsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKICAgICBwYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlLmNwcAogCisgICAgcGFnZS9z
Y3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKICAgICBwYWdlL3Njcm9sbGlu
Zy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCiAgICAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0
Y2hpbmdTdGF0ZS5jcHAKICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZGQ0ZmE4NDhiN2RmMWJmM2M3YTFmYTI5
ZTkyNGQ0MzEyNzc4MTc3NC4uNmJlZTg0MTY4MjM3MTQxMGMwMDk3OWQ5ZGQzZmU3ZTNhOGU3MGY1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTMwLDYgKzMwLDcgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vz
c2liaWxpdHkvYXRrIgogICAgICIke1dFQkNPUkVfRElSfS9lZGl0aW5nL2F0ayIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGFnZS9ndGsiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5n
L2d0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vY2Fpcm8iCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL2dlb2NsdWUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0
ayIKQEAgLTE5Miw2ICsxOTMsMTQgQEAgbGlzdChBUFBFTkQgV2ViQ29yZVBsYXRmb3JtR1RLX1NP
VVJDRVMKICAgICBwYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAKICAgICBwYWdlL2d0ay9F
dmVudEhhbmRsZXJHdGsuY3BwCiAKKyAgICBwYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nQ29v
cmRpbmF0b3JHdGsuY3BwCisgICAgcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrLmNwcAorICAgIHBhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdU
aHJlYWRHdGsuY3BwCisgICAgcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5v
ZGUuY3BwCisgICAgcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVHdGsuY3BwCisgICAgcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVHdGsuY3Bw
CisgICAgcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmNwcAorCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAtMjE2LDYg
KzIyNSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvUGxh
dGZvcm1TY3JlZW5HdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0
ay5jcHAKKyAgICBwbGF0Zm9ybS9ndGsvU2Nyb2xsQ29udHJvbGxlci5jcHAKICAgICBwbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNw
cAogICAgIHBsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmlu
ZGV4IDAyOTFhNGZkMDY5MWYwYjg4OTc3ZjlmZTFiMTY5ODdhNTMyNjRmZGYuLjdhYTc4NWU1YzM5
YzE5YmZlYTNiYjFlZTk1NjFjNmVlZTg2ZGVjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBA
IC00NCw2ICs0NCwxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1
ZGUgIldoZWVsRXZlbnRUZXN0VHJpZ2dlci5oIgogCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6QXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlKQpAQCAtNzEsMTAgKzc1LDE2IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRTdGF0ZVNjcm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpCiAgICAgICAgIGZvciAoYXV0byYgb2Zmc2V0IDogKnNuYXBPZmZzZXRz
KQogICAgICAgICAgICAgc25hcE9mZnNldHNBc0Zsb2F0LnVuY2hlY2tlZEFwcGVuZChyb3VuZFRv
RGV2aWNlUGl4ZWwob2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3RvciwgZmFsc2UpKTsKICAgICB9CisK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGlmIChheGlzID09IFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCkKICAgICAgICAgbm9kZS5zZXRIb3Jpem9udGFsU25hcE9mZnNldHMo
c25hcE9mZnNldHNBc0Zsb2F0KTsKICAgICBlbHNlCiAgICAgICAgIG5vZGUuc2V0VmVydGljYWxT
bmFwT2Zmc2V0cyhzbmFwT2Zmc2V0c0FzRmxvYXQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
YXhpcyk7CisgICAgVU5VU0VEX1BBUkFNKG5vZGUpOworI2VuZGlmCiB9CiAKIHZvaWQgQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25EaXJ0eSgpCkBA
IC00NTEsNiArNDYxLDEwIEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRl
RnJhbWVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsCiAgICAgbm9kZS0+c2V0
SW5zZXRDbGlwTGF5ZXIoaW5zZXRDbGlwTGF5ZXIpOwogICAgIG5vZGUtPnNldFNjcm9sbGVkQ29u
dGVudHNMYXllcihzY3JvbGxlZENvbnRlbnRzTGF5ZXIpOwogICAgIG5vZGUtPnNldENvdW50ZXJT
Y3JvbGxpbmdMYXllcihjb3VudGVyU2Nyb2xsaW5nTGF5ZXIpOworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICBub2RlLT5zZXRDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKGRvd25jYXN0
PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4obGF5ZXIpLT5jb29yZGluYXRvcigpKTsKKyAgICBu
b2RlLT5zZXRMYXllclBvc2l0aW9uKGxheWVyLT5wb3NpdGlvbigpKTsKKyNlbmRpZgogCiAgICAg
aWYgKHNjcm9sbGluZ0dlb21ldHJ5KSB7CiAgICAgICAgIG5vZGUtPnNldFNjcm9sbE9yaWdpbihz
Y3JvbGxpbmdHZW9tZXRyeS0+c2Nyb2xsT3JpZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCA1M2I5OGMx
NDVhMzcyOWVjOGQyNTFmY2UyN2ViNjZlNGY3OTdiMDBhLi42NTU1NWI1ZmYyNTA2ZjkwZjJhYWY2
ZWRiN2U0ZjY4ZmRjZDMyYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC00NCw3ICs0NCw5IEBACiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgUExBVEZPUk0oR1RLKSAm
JiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhS
RUFERUQpCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuaCIKKyNlbGlmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNvb3Jk
aW5hdGVkR3JhcGhpY3MuaCIKICNlbmRpZgogCkBAIC01OCw3ICs2MCw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNpZiAhUExBVEZPUk0oQ09DT0EpCiBSZWY8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoUGFnZSogcGFnZSkKIHsKLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsocGFnZSkpOworI2VsaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcyhwYWdlKSk7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuY3BwCmluZGV4IDg1MDM5MzZhMWE1MWE1NTcyNWU1ZGMy
MzNiMWY3Y2VlNjY0ZjM0N2QuLjA1ZDA1Nzk3YTFmYTFlZWI5ZmVmMDZjMTRmMjVkYjUzNDRkYzgy
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHAKQEAgLTQ4LDYgKzQ4LDkg
QEAgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlNjcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlKGNvbnN0IFNjcm9sbGkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX3Zl
cnRpY2FsU2Nyb2xsYmFyUGFpbnRlcihzdGF0ZU5vZGUudmVydGljYWxTY3JvbGxiYXJQYWludGVy
KCkpCiAgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyKHN0YXRlTm9kZS5ob3Jpem9u
dGFsU2Nyb2xsYmFyUGFpbnRlcigpKQorI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICwgbV92ZXJ0
aWNhbFNjcm9sbGJhcihzdGF0ZU5vZGUudmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAsIG1faG9y
aXpvbnRhbFNjcm9sbGJhcihzdGF0ZU5vZGUuaG9yaXpvbnRhbFNjcm9sbGJhcigpKQogI2VuZGlm
CiAgICAgLCBtX25vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHN0YXRlTm9kZS5ub25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbigpKQogICAgICwgbV9yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzdGF0ZU5vZGUu
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSkKQEAgLTIxNSw3ICsyMTgsNyBAQCB2b2lkIFNjcm9s
bGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpzZXRGaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRp
dmVUb0ZyYW1lKGJvbwogICAgIHNldFByb3BlcnR5Q2hhbmdlZChGaXhlZEVsZW1lbnRzTGF5b3V0
UmVsYXRpdmVUb0ZyYW1lKTsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKEdUSykKIHZvaWQgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNjcm9sbGJhcnMoU2Nyb2xsYmFyKiwgU2Ny
b2xsYmFyKikKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oCmluZGV4IGQ1N2Qx
ZmQ5ZjcwYTg2YzkyYTkwYWUzMWM3NWE3OTUyZmNkNjljYWEuLjNhMmFjMzkxZjNmNjIyNmJkNDY3
MGJkZDQ5ZDkwMzdjNWQ0MjY4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaApA
QCAtMTE2LDYgKzExNiw5IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAgU2Nyb2xs
YmFyUGFpbnRlciB2ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3Zl
cnRpY2FsU2Nyb2xsYmFyUGFpbnRlci5nZXQoKTsgfQogICAgIFNjcm9sbGJhclBhaW50ZXIgaG9y
aXpvbnRhbFNjcm9sbGJhclBhaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxTY3Jv
bGxiYXJQYWludGVyLmdldCgpOyB9CisjZWxpZiBQTEFURk9STShHVEspCisgICAgU2Nyb2xsYmFy
KiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXI7
IH0KKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBt
X2hvcml6b250YWxTY3JvbGxiYXI7IH0KICNlbmRpZgogICAgIHZvaWQgc2V0U2Nyb2xsYmFyUGFp
bnRlcnNGcm9tU2Nyb2xsYmFycyhTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyLCBTY3JvbGxi
YXIqIGhvcml6b250YWxTY3JvbGxiYXIpOwogCkBAIC0xMzUsNiArMTM4LDkgQEAgcHJpdmF0ZToK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXI+IG1fdmVy
dGljYWxTY3JvbGxiYXJQYWludGVyOwogICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYWludGVyPiBt
X2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIFNj
cm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBTY3JvbGxiYXIqIG1faG9yaXpvbnRh
bFNjcm9sbGJhcjsKICNlbmRpZgogCiAgICAgUmVnaW9uIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVOb2RlLmNwcAppbmRleCBkM2U0Zjc2ZmMwNWI4YzcwYWE2MDE1YzViOGQ1MjRkOTI1YzE0MjE1
Li4zYWM4NTVlYmU1MTkxYjg2MjA1Nzc3ZDQxZjg1NWFmYTcwZDcxM2JjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKQEAg
LTQyLDYgKzQyLDkgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxpbmdTdGF0ZU5vZGUoU2Ny
b2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9sbGluZ1N0YXQKICAgICAsIG1fY2hhbmdlZFBy
b3BlcnRpZXMoMCkKICAgICAsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlKHNjcm9sbGluZ1N0YXRlVHJl
ZSkKICAgICAsIG1fcGFyZW50KG51bGxwdHIpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgICwgbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yKG51bGxwdHIpCisjZW5kaWYKIHsKIH0K
IApAQCAtNTMsNiArNTYsOSBAQCBTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbGluZ1N0YXRlTm9k
ZShjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSwgU2NybwogICAgICwgbV9jaGFu
Z2VkUHJvcGVydGllcyhzdGF0ZU5vZGUuY2hhbmdlZFByb3BlcnRpZXMoKSkKICAgICAsIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlKGFkb3B0aXZlVHJlZSkKICAgICAsIG1fcGFyZW50KG51bGxwdHIpCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgICwgbV9jb21wb3NpdGluZ0Nvb3JkaW5h
dG9yKHN0YXRlTm9kZS5jb21wb3NpdGluZ0Nvb3JkaW5hdG9yKCkpCisjZW5kaWYKIHsKICAgICBp
ZiAoaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbExheWVyKSkKICAgICAgICAgc2V0TGF5ZXIoc3Rh
dGVOb2RlLmxheWVyKCkudG9SZXByZXNlbnRhdGlvbihhZG9wdGl2ZVRyZWUucHJlZmVycmVkTGF5
ZXJSZXByZXNlbnRhdGlvbigpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCmluZGV4IGFjYjYwMWM5ZTg4NmQ2ZmZjMmMwNjgxYTBk
MTFiYjI5NmRlNTJmMmEuLmM0YzE1OWZkNTJkYjM4YjZhOTU4ZDFhNDRmMDRhZDU5ZTI1Mzc0YzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
Tm9kZS5oCkBAIC00MCw2ICs0MCwxMCBAQCBjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgU2Ny
b2xsaW5nU3RhdGVUcmVlOwogY2xhc3MgVGV4dFN0cmVhbTsKIAorI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudDsKKyNlbmRp
ZgorCiAvLyBVc2VkIHRvIGFsbG93IFNjcm9sbGluZ1N0YXRlTm9kZXMgdG8gcmVmZXIgdG8gbGF5
ZXJzIGluIHZhcmlvdXMgY29udGV4dHM6CiAvLyBhKSBBc3luYyBzY3JvbGxpbmcsIG1haW4gdGhy
ZWFkOiBTY3JvbGxpbmdTdGF0ZU5vZGUgaG9sZHMgb250byBhIEdyYXBoaWNzTGF5ZXIsIGFuZCB1
c2VzIG1fbGF5ZXJJRAogLy8gICAgdG8gZGV0ZWN0IHdoZXRoZXIgdGhhdCBHcmFwaGljc0xheWVy
J3MgdW5kZXJseWluZyBQbGF0Zm9ybUxheWVyIGNoYW5nZWQuCkBAIC0yMzQsNiArMjM4LDEzIEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBzY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoKSBjb25zdDsK
IAorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQqIGNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3I7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0aW5nQ29vcmRpbmF0
b3IoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBjb21wb3NpdGluZ0Nvb3JkaW5hdG9y
KSB7IG1fY29tcG9zaXRpbmdDb29yZGluYXRvciA9IGNvbXBvc2l0aW5nQ29vcmRpbmF0b3I7IH0K
KyAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xheWVyUG9z
aXRpb247IH0KKyAgICB2b2lkIHNldExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pIHsgbV9sYXllclBvc2l0aW9uID0gcG9zaXRpb247IH0KKyNlbmRpZgorCiBwcm90ZWN0
ZWQ6CiAgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYsIFNj
cm9sbGluZ1N0YXRlVHJlZSYpOwogCkBAIC0yNTIsNiArMjYzLDExIEBAIHByaXZhdGU6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZWZQdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPj4+IG1fY2hp
bGRyZW47CiAKICAgICBMYXllclJlcHJlc2VudGF0aW9uIG1fbGF5ZXI7CisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBt
X2NvbXBvc2l0aW5nQ29vcmRpbmF0b3I7CisgICAgRmxvYXRQb2ludCBtX2xheWVyUG9zaXRpb247
CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IDQ2NjlhMTk5Mjg3
YTZjYWYwYWViYzZiYmJhNWE3ZWVlNWM1ZWJkNmIuLjg5YjU2ZTZmNDMwYzNhMzIwNTAwMWMwOTQ2
MGMwMzQwNTc2OTA1MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtMzQsMTUgKzM0LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmICFQTEFURk9STShHVEspCiBTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1Ro
cmVhZCgpCiAgICAgOiBtX3RocmVhZElkZW50aWZpZXIoMCkKIHsKIH0KIAotYm9vbCBTY3JvbGxp
bmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCitTY3JvbGxpbmdUaHJlYWQ6On5TY3JvbGxpbmdU
aHJlYWQoKQogewotICAgIGF1dG8gdGhyZWFkSWRlbnRpZmllciA9IFNjcm9sbGluZ1RocmVhZDo6
c2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlmaWVyOwotICAgIHJldHVybiB0aHJlYWRJZGVudGlm
aWVyICYmIGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWRJZGVudGlmaWVyOwogfQogCiB2b2lkIFNj
cm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikK
QEAgLTU4LDYgKzU3LDI3IEBAIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQogICAgIHNjcm9sbGluZ1RocmVhZC53YWtlVXBSdW5M
b29wKCk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21T
Y3JvbGxpbmdUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7CisKKyAg
ICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gZnVuY3Rpb25zOworICAgIHsKKyAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAg
IGZ1bmN0aW9ucyA9IFdURk1vdmUobV9mdW5jdGlvbnMpOworICAgIH0KKworICAgIGZvciAoYXV0
byYgZnVuY3Rpb24gOiBmdW5jdGlvbnMpCisgICAgICAgIGZ1bmN0aW9uKCk7Cit9CisjZW5kaWYK
KworYm9vbCBTY3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCit7CisgICAgYXV0byB0
aHJlYWRJZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZElk
ZW50aWZpZXI7CisgICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRocmVhZCgp
ID09IHRocmVhZElkZW50aWZpZXI7Cit9CisKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRj
aEJhcnJpZXIoc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKIHsKICAgICBkaXNwYXRj
aChbZnVuY3Rpb25dKCkgbXV0YWJsZSB7CkBAIC04NSw2ICsxMDUsOCBAQCB2b2lkIFNjcm9sbGlu
Z1RocmVhZDo6Y3JlYXRlVGhyZWFkSWZOZWVkZWQoKQogICAgICAgICAKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICAgICAgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQo
bG9jaywgW3RoaXNdeyByZXR1cm4gbV90aHJlYWRSdW5Mb29wOyB9KTsKKyNlbGlmIFBMQVRGT1JN
KEdUSykKKyAgICAgICAgbV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvblZhcmlhYmxlLndhaXQo
bG9jayk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xMDAsMjEgKzEyMiw2IEBAIHZvaWQgU2Nyb2xs
aW5nVGhyZWFkOjp0aHJlYWRCb2R5KCkKICAgICBpbml0aWFsaXplUnVuTG9vcCgpOwogfQogCi12
b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFk
KCkKLXsKLSAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkpOwotCi0gICAgVmVjdG9yPHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4+IGZ1bmN0aW9uczsKLSAgICAKLSAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fZnVuY3Rpb25zTXV0ZXgpOwotICAgICAgICBmdW5jdGlv
bnMgPSBXVEZNb3ZlKG1fZnVuY3Rpb25zKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uIDogZnVuY3Rpb25zKQotICAgICAgICBmdW5jdGlvbigpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaAppbmRleCBhNzA5Y2Nk
OGU3ODYzNjI5ZGU4YTI4M2M0NjNjYTljNzcwNTFjNzE1Li5iOGZmMjk3YTZlYTU4MzYyOWMzZjhl
MTdhZTk5OTFiMmYyZGJlNzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUaHJlYWQuaApAQCAtNDIsMTAgKzQyLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmIFBMQVRGT1JNKEdUSykKK2NsYXNzIFNjcm9sbGluZ1J1bkxvb3A7CisjZW5k
aWYKKwogY2xhc3MgU2Nyb2xsaW5nVGhyZWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
Y3JvbGxpbmdUaHJlYWQpOwotCiBwdWJsaWM6CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nVGhyZWFk
KCk7CisKICAgICBzdGF0aWMgYm9vbCBpc0N1cnJlbnRUaHJlYWQoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBkaXNwYXRjaChzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KTsKIApAQCAt
NjMsMjggKzY4LDMzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVUaHJlYWRJZk5lZWRlZCgp
OwogICAgIHN0YXRpYyB2b2lkIHRocmVhZENhbGxiYWNrKHZvaWQqIHNjcm9sbGluZ1RocmVhZCk7
CiAgICAgdm9pZCB0aHJlYWRCb2R5KCk7Ci0gICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21T
Y3JvbGxpbmdUaHJlYWQoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVJ1bkxvb3AoKTsKLSAgICB2
b2lkIHdha2VVcFJ1bkxvb3AoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgZGlz
cGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFkKCk7CisgICAgdm9pZCB3YWtlVXBSdW5M
b29wKCk7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkUnVuTG9vcFNvdXJjZUNhbGxiYWNrKHZvaWQq
IHNjcm9sbGluZ1RocmVhZCk7CiAgICAgdm9pZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2so
KTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHRlcm1pbmF0ZVNjcm9sbGluZ1RocmVh
ZCgpOwogI2VuZGlmCiAKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSWRlbnRpZmllcjsK
IAogICAgIENvbmRpdGlvbiBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uVmFyaWFibGU7CiAg
ICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wTXV0ZXg7Ci0KICAgICBMb2NrIG1fZnVuY3Rpb25z
TXV0ZXg7Ci0gICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1fZnVuY3Rpb25zOwog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+
IG1fZnVuY3Rpb25zOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIFdlYkNvcmU6OlJ1bkxv
b3AgaGVyZS4KICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3RocmVhZFJ1bkxvb3A7CiAg
ICAgUmV0YWluUHRyPENGUnVuTG9vcFNvdXJjZVJlZj4gbV90aHJlYWRSdW5Mb29wU291cmNlOwor
I2VsaWYgUExBVEZPUk0oR1RLKQorICAgIENvbmRpdGlvbiBtX3Rlcm1pbmF0ZVJ1bkxvb3BDb25k
aXRpb247CisgICAgTG9jayBtX3Rlcm1pbmF0ZVJ1bkxvb3BNdXRleDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2Nyb2xsaW5nUnVuTG9vcD4gbV90aHJlYWRSdW5Mb29wOwogI2VuZGlmCiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCmluZGV4
IDQ3NmI0YzI3MWQ5YmFhMTU0OTA1MjQ3NDY5YTVjYWZmN2VmNGYzZDQuLmE5ZTU2MmNmMjU4YjQ5
NjMwODRjMzY2ZThjZDNjZWQxYTBjNDZkMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCkBAIC01MCw2ICs1MCw3IEBAIFNjcm9sbGluZ1Ry
ZWU6On5TY3JvbGxpbmdUcmVlKCkKIAogYm9vbCBTY3JvbGxpbmdUcmVlOjpzaG91bGRIYW5kbGVX
aGVlbEV2ZW50U3luY2hyb25vdXNseShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCiB7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgaW52b2tl
ZCBieSB0aGUgZXZlbnQgaGFuZGxpbmcgdGhyZWFkCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0
ZXgpOwogCkBAIC03MSwxNSArNzIsMjMgQEAgYm9vbCBTY3JvbGxpbmdUcmVlOjpzaG91bGRIYW5k
bGVXaGVlbEV2ZW50U3luY2hyb25vdXNseShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQKICAgICAg
ICAgaWYgKG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24uY29udGFpbnMocm91bmRlZEludFBvaW50
KHBvc2l0aW9uKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh3aGVlbEV2ZW50KTsKKyNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBTY3JvbGxpbmdUcmVlOjpzZXRPckNsZWFyTGF0Y2hlZE5vZGUoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQogeworI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIGlmICh3aGVlbEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hp
bmcoKSkKICAgICAgICAgc2V0TGF0Y2hlZE5vZGUobm9kZUlEKTsKICAgICBlbHNlIGlmICh3aGVl
bEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hpbmcoKSkKICAgICAgICAgY2xlYXJMYXRjaGVkTm9kZSgp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0od2hlZWxFdmVudCk7CisgICAgVU5VU0VEX1BBUkFN
KG5vZGVJRCk7CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKQEAgLTMyNiw2ICszMzUs
NyBAQCBTY3JvbGxQaW5uaW5nQmVoYXZpb3IgU2Nyb2xsaW5nVHJlZTo6c2Nyb2xsUGlubmluZ0Jl
aGF2aW9yKCkKIAogYm9vbCBTY3JvbGxpbmdUcmVlOjp3aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVH
ZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKKyNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpICE9IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQmVnYW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzM5LDcgKzM0OSw5
IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZTo6d2lsbFdoZWVsRXZlbnRTdGFydFN3aXBlR2VzdHVyZShj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlm
ICh3aGVlbEV2ZW50LmRlbHRhWSgpIDwgMCAmJiBtX21haW5GcmFtZVBpbm5lZFRvVGhlQm90dG9t
ICYmICFtX3J1YmJlckJhbmRzQXRCb3R0b20pCiAgICAgICAgIHJldHVybiB0cnVlOwotCisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTSh3aGVlbEV2ZW50KTsKKyNlbmRpZgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFk
ZWRTY3JvbGxpbmdUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVh
ZGVkU2Nyb2xsaW5nVHJlZS5jcHAKaW5kZXggNDgzOTg2YWY1ZmJlZmYxMDVlZjQ0YzI1ODFlZWY4
ZDE0NDBmNmY1ZS4uNDU5OGZhYTFjYTRjNDk4ZmIxYmQ3N2MwOGE4YzM3OGQwN2JkYmFmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdU
cmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9s
bGluZ1RyZWUuY3BwCkBAIC0xMTMsNiArMTEzLDcgQEAgdm9pZCBUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWU6OnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIGMK
IAogdm9pZCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmN1cnJlbnRTbmFwUG9pbnRJbmRpY2VzRGlk
Q2hhbmdlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWwsIHVuc2ln
bmVkIHZlcnRpY2FsKQogeworI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIW1fc2Nyb2xsaW5n
Q29vcmRpbmF0b3IpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIwLDYgKzEyMSwxMSBAQCB2b2lk
IFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6Y3VycmVudFNuYXBQb2ludEluZGljZXNEaWRDaGFuZ2Uo
U2Nyb2xsaW5nTm9kZUlEIG5vZAogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2Nyb2xs
aW5nQ29vcmRpbmF0b3IsIG5vZGVJRCwgaG9yaXpvbnRhbCwgdmVydGljYWxdIHsKICAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzKG5vZGVJRCwg
aG9yaXpvbnRhbCwgdmVydGljYWwpOwogICAgIH0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
bm9kZUlEKTsKKyAgICBVTlVTRURfUEFSQU0oaG9yaXpvbnRhbCk7CisgICAgVU5VU0VEX1BBUkFN
KHZlcnRpY2FsKTsKKyNlbmRpZgogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTY2LDcgKzE3
Miw2IEBAIHZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JS
ZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTCiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5yZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oaWRlbnRpZmllciwgcmVhc29uKTsKICAg
ICB9KTsKIH0KLQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWM3M2JhYWJlY2I1OGM1
NzhlNWFjNWYxMjVjYzk0MGNhMGQxM2E4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcy5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNs
dWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKKyNpbmNsdWRl
ICJTY3JvbGxpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgi
CisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5oIgorI2luY2x1
ZGUgIlNjcm9sbGluZ1RyZWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU3RpY2t5Tm9k
ZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWY8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUo
UGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBc3luY1Njcm9sbGluZ0Nv
b3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcyhwYWdlKSk7Cit9CisKK0FzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljcyhQYWdlKiBwYWdlKQorICAgIDogQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcigq
dGhpcywgJkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21t
aXRUcmVlU3RhdGUpCit7CisgICAgc2V0U2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdUcmVlR3RrOjpj
cmVhdGUodGhpcykpOworfQorCitBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRH
cmFwaGljczo6fkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzKCkK
K3sKKyAgICBBU1NFUlQoIXNjcm9sbGluZ1RyZWUoKSk7Cit9CisKK3ZvaWQgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OnBhZ2VEZXN0cm95ZWQoKQoreworICAg
IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKworICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RvcCgpOworCisgICAgLy8gSW52YWxpZGF0
aW5nIHRoZSBzY3JvbGxpbmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0
d2VlbiB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4K
KyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiBzY3JvbGxpbmdUcmVlID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHJlbGVhc2VTY3JvbGxpbmdUcmVl
KCkpOworICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWVdIHsKKyAg
ICAgICAgc2Nyb2xsaW5nVHJlZS0+aW52YWxpZGF0ZSgpOworICAgIH0pOworfQorCit2b2lkIEFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRUcmVlU3Rh
dGVJZk5lZWRlZCgpCit7CisgICAgY29tbWl0VHJlZVN0YXRlKCk7CisgICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Cit9CisKK2Jvb2wgQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OmhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3
JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoc2Nyb2xsaW5n
VHJlZSgpLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiB0
aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHNj
cm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbdGhyZWFkZWRT
Y3JvbGxpbmdUcmVlLCB3aGVlbEV2ZW50XSB7CisgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJl
ZS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGlj
czo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQoreworICAgIEFTU0VSVChzY3JvbGxpbmdTdGF0
ZVRyZWUoKS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSB8fCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bkRpcnR5KCkpOworICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29t
bWl0dGVyVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRUcmVlU3RhdGUoKQoreworICAgIHdp
bGxDb21taXRUcmVlKCk7CisgICAgaWYgKCFzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+aGFzQ2hhbmdl
ZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFRocmVhZGVkU2Ny
b2xsaW5nVHJlZT4gdGhyZWFkZWRTY3JvbGxpbmdUcmVlID0gZG93bmNhc3Q8VGhyZWFkZWRTY3Jv
bGxpbmdUcmVlPihzY3JvbGxpbmdUcmVlKCkpOworICAgIFNjcm9sbGluZ1N0YXRlVHJlZSogdW5w
cm90ZWN0ZWRUcmVlU3RhdGUgPSBzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+Y29tbWl0KExheWVyUmVw
cmVzZW50YXRpb246OlBsYXRmb3JtTGF5ZXJJRFJlcHJlc2VudGF0aW9uKS5yZWxlYXNlKCk7CisK
KyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRlZFNjcm9sbGluZ1RyZWUsIHVu
cHJvdGVjdGVkVHJlZVN0YXRlXSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdT
dGF0ZVRyZWU+IHRyZWVTdGF0ZSh1bnByb3RlY3RlZFRyZWVTdGF0ZSk7CisgICAgICAgIHRocmVh
ZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0TmV3VHJlZVN0YXRlKFdURjo6bW92ZSh0cmVlU3RhdGUp
KTsKKyAgICB9KTsKKworICAgIHVwZGF0ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCk7Cit9CisK
K3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3M6OnVwZGF0
ZVRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKCkKK3sKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAg
ICByZXR1cm47CisKKyAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGZyYW1lVmlldy0+
dGlsZWRCYWNraW5nKCk7CisgICAgaWYgKCF0aWxlZEJhY2tpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIGluZGljYXRvck1vZGU7CisgICAgaWYgKHNo
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpCisgICAgICAgIGlu
ZGljYXRvck1vZGUgPSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlv
bjsKKyAgICBlbHNlCisgICAgICAgIGluZGljYXRvck1vZGUgPSBBc3luY1Njcm9sbGluZ0luZGlj
YXRpb247CisKKyAgICB0aWxlZEJhY2tpbmctPnNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKGlu
ZGljYXRvck1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29v
cmRpbmF0ZWRHcmFwaGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRp
bmF0ZWRncmFwaGljcy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGlj
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjczMmQ5NjRhYzUyOTg2Yjk2Njc2MDU0NTAzN2ZjMjc1NTA1MTkzMGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGlu
YXRlZGdyYXBoaWNzL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNz
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzX2gKKyNkZWZpbmUgQXN5bmNTY3JvbGxp
bmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3NfaAorCisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKworI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxiYXI7CitjbGFzcyBTY3JvbGxpbmdTdGF0
ZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7CitjbGFzcyBTY3JvbGxp
bmdTdGF0ZVRyZWU7CitjbGFzcyBUaHJlYWRlZFNjcm9sbGluZ1RyZWU7CisKK2NsYXNzIEFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzIDogcHVibGljIEFzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDb29yZGluYXRlZEdyYXBoaWNzKFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5Bc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29vcmRpbmF0ZWRHcmFwaGljcygpOworCisgICAgdmlydHVh
bCB2b2lkIHBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0
VHJlZVN0YXRlSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICAvLyBIYW5kbGUgdGhlIHdoZWVsIGV2
ZW50IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2ZW50IHdh
cyBoYW5kbGVkIG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChGcmFt
ZVZpZXcmLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CisgICAgdm9pZCB1cGRhdGVUaWxlZFNjcm9sbGlu
Z0luZGljYXRvcigpOworCisgICAgVGltZXIgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJU
aW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ29v
cmRpbmF0ZWRHcmFwaGljc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ZWRlN2I1YzBhNTVkMTUzYTcyYTVlZDQyMzcxYjg5MGFlNTdlOWE1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
R3RrLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xs
YWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsuaCIKKworI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJN
YWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW5jbHVkZSAiU2Nyb2xs
aW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUd0ay5oIgorI2luY2x1ZGUgIlRp
bGVkQmFja2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGluZ0Nvb3JkaW5h
dG9yR3RrOjpTY3JvbGxpbmdDb29yZGluYXRvckd0ayhQYWdlKiBwYWdlKQorICAgIDogQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvcihwYWdlKQorICAgICwgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21t
aXR0ZXJUaW1lcigqdGhpcywgJlNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpjb21taXRUcmVlU3Rh
dGUpCit7CisgICAgc2V0U2Nyb2xsaW5nVHJlZShTY3JvbGxpbmdUcmVlR3RrOjpjcmVhdGUodGhp
cykpOworfQorCitTY3JvbGxpbmdDb29yZGluYXRvckd0azo6flNjcm9sbGluZ0Nvb3JkaW5hdG9y
R3RrKCkKK3sKKyAgICBBU1NFUlQoIXNjcm9sbGluZ1RyZWUoKSk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3JHdGs6OnBhZ2VEZXN0cm95ZWQoKQoreworICAgIEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnBhZ2VEZXN0cm95ZWQoKTsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
Q29tbWl0dGVyVGltZXIuc3RvcCgpOworCisgICAgLy8gSW52YWxpZGF0aW5nIHRoZSBzY3JvbGxp
bmcgdHJlZSB3aWxsIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0d2VlbiB0aGUgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgYW5kIFNjcm9sbGluZ1RyZWUgb2JqZWN0cy4KKyAgICBSZWZQdHI8VGhy
ZWFkZWRTY3JvbGxpbmdUcmVlPiBzY3JvbGxpbmdUcmVlID0gc3RhdGljX3BvaW50ZXJfY2FzdDxU
aHJlYWRlZFNjcm9sbGluZ1RyZWU+KHJlbGVhc2VTY3JvbGxpbmdUcmVlKCkpOworICAgIFNjcm9s
bGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWVdIHsKKyAgICAgICAgc2Nyb2xsaW5n
VHJlZS0+aW52YWxpZGF0ZSgpOworICAgIH0pOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yR3RrOjpjb21taXRUcmVlU3RhdGVJZk5lZWRlZCgpCit7CisgICAgY29tbWl0VHJlZVN0YXRl
KCk7CisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lci5zdG9wKCk7Cit9CisK
K2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGs6OmhhbmRsZVdoZWVsRXZlbnQoRnJhbWVWaWV3
JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcGFnZSk7CisKKyAgICBpZiAoc2Nyb2xsaW5n
VHJlZSgpLT53aWxsV2hlZWxFdmVudFN0YXJ0U3dpcGVHZXN0dXJlKHdoZWVsRXZlbnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPiB0
aHJlYWRlZFNjcm9sbGluZ1RyZWUgPSBkb3duY2FzdDxUaHJlYWRlZFNjcm9sbGluZ1RyZWU+KHNj
cm9sbGluZ1RyZWUoKSk7CisgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbdGhyZWFkZWRT
Y3JvbGxpbmdUcmVlLCB3aGVlbEV2ZW50XSB7CisgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJl
ZS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckd0azo6c2NoZWR1bGVUcmVlU3RhdGVD
b21taXQoKQoreworICAgIEFTU0VSVChzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+aGFzQ2hhbmdlZFBy
b3BlcnRpZXMoKSB8fCBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkRpcnR5KCkpOworICAgIGlmICht
X3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjpjb21taXRUcmVlU3Rh
dGUoKQoreworICAgIHdpbGxDb21taXRUcmVlKCk7CisgICAgaWYgKCFzY3JvbGxpbmdTdGF0ZVRy
ZWUoKS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPFRocmVhZGVkU2Nyb2xsaW5nVHJlZT4gdGhyZWFkZWRTY3JvbGxpbmdUcmVlID0gZG93bmNh
c3Q8VGhyZWFkZWRTY3JvbGxpbmdUcmVlPihzY3JvbGxpbmdUcmVlKCkpOworICAgIFNjcm9sbGlu
Z1N0YXRlVHJlZSogdW5wcm90ZWN0ZWRUcmVlU3RhdGUgPSBzY3JvbGxpbmdTdGF0ZVRyZWUoKS0+
Y29tbWl0KExheWVyUmVwcmVzZW50YXRpb246OlBsYXRmb3JtTGF5ZXJJRFJlcHJlc2VudGF0aW9u
KS5yZWxlYXNlKCk7CisKKyAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFt0aHJlYWRlZFNj
cm9sbGluZ1RyZWUsIHVucHJvdGVjdGVkVHJlZVN0YXRlXSB7CisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IHRyZWVTdGF0ZSh1bnByb3RlY3RlZFRyZWVTdGF0ZSk7
CisgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0TmV3VHJlZVN0YXRlKFdURk1v
dmUodHJlZVN0YXRlKSk7CisgICAgfSk7CisKKyAgICB1cGRhdGVUaWxlZFNjcm9sbGluZ0luZGlj
YXRvcigpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrOjp1cGRhdGVUaWxlZFNj
cm9sbGluZ0luZGljYXRvcigpCit7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJu
OworCisgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSBmcmFtZVZpZXctPnRpbGVkQmFj
a2luZygpOworICAgIGlmICghdGlsZWRCYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBT
Y3JvbGxpbmdNb2RlSW5kaWNhdGlvbiBpbmRpY2F0b3JNb2RlOworICAgIGlmIChzaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uU3luY2hyb25vdXNseSgpKQorICAgICAgICBpbmRpY2F0b3JN
b2RlID0gU3luY2hyb25vdXNTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUluZGljYXRpb247CisgICAg
ZWxzZQorICAgICAgICBpbmRpY2F0b3JNb2RlID0gQXN5bmNTY3JvbGxpbmdJbmRpY2F0aW9uOwor
CisgICAgdGlsZWRCYWNraW5nLT5zZXRTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbihpbmRpY2F0b3JN
b2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2d0ay9TY3JvbGxpbmdDb29yZGluYXRvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvZ3RrL1Njcm9sbGluZ0Nvb3JkaW5hdG9yR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDVmYTI4MzRl
NzNhMTU1YmQwODE5N2JlY2RmNjE5NTMzNWU2ZTVhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdDb29yZGluYXRvckd0ay5oCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdDb29yZGlu
YXRvckd0a19oCisjZGVmaW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yR3RrX2gKKworI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyOworY2xhc3MgU2Ny
b2xsaW5nU3RhdGVOb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOworY2xh
c3MgU2Nyb2xsaW5nU3RhdGVUcmVlOworY2xhc3MgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOworCitj
bGFzcyBTY3JvbGxpbmdDb29yZGluYXRvckd0ayA6IHB1YmxpYyBBc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvckd0ayhQ
YWdlKik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGsoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNv
bW1pdFRyZWVTdGF0ZUlmTmVlZGVkKCkgb3ZlcnJpZGU7CisgICAgLy8gSGFuZGxlIHRoZSB3aGVl
bCBldmVudCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVu
dCB3YXMgaGFuZGxlZCBvciBub3QuCisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQo
RnJhbWVWaWV3JiwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGNvbW1pdFRyZWVTdGF0ZSgpOworICAgIHZvaWQgdXBkYXRlVGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3IoKTsKKworICAgIFRpbWVyIG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0
dGVyVGltZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JHdGtf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGlu
Z1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2d0ay9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDE2ZjU5NTEyMGEyNGZlOTA5Zjc0ODk4YWFkZjQ0OWZmYjU1N2M4YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGUuaCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRl
ICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbGJhclBhaW50ZXJzRnJvbVNj
cm9sbGJhcnMoU2Nyb2xsYmFyKiB2U2Nyb2xsYmFyLCBTY3JvbGxiYXIqIGhTY3JvbGxiYXIpCit7
CisgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCk7CisgICAgaWYgKHNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSB2U2Nyb2xsYmFyICYm
IHZTY3JvbGxiYXItPnN1cHBvcnRzVXBkYXRlT25TZWNvbmRhcnlUaHJlYWQoKQorICAgICAgICA/
IHZTY3JvbGxiYXIgOiBudWxscHRyOworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJh
ciA9IGhTY3JvbGxiYXIgJiYgaFNjcm9sbGJhci0+c3VwcG9ydHNVcGRhdGVPblNlY29uZGFyeVRo
cmVhZCgpCisgICAgICAgID8gaFNjcm9sbGJhciA6IG51bGxwdHI7CisKKyAgICBpZiAobV92ZXJ0
aWNhbFNjcm9sbGJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhciAmJiBtX2hvcml6b250YWxTY3JvbGxi
YXIgPT0gaG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhciA9IHZTY3JvbGxiYXI7CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0g
aFNjcm9sbGJhcjsKKworICAgIHNldFByb3BlcnR5Q2hhbmdlZChQYWludGVyRm9yU2Nyb2xsYmFy
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5D
X1NDUk9MTElORykgJiYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RocmVhZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVGhyZWFkR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MDkxYTBhMjUyN2FiZjM0ZjE4ZjcxYWI5ZDMyMGM5NThmNThmZDQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RocmVhZEd0ay5j
cHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKworI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2Nyb2xsaW5nUnVuTG9vcCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Ny
b2xsaW5nUnVuTG9vcCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgU2Nyb2xsaW5nUnVuTG9vcCgpCisgICAgICAgIDogbV9ydW5Mb29wKFJ1bkxvb3A6OmN1cnJl
bnQoKSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjYWxsT25TY3JvbGxpbmdSdW5Mb29wKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmICgmbV9ydW5M
b29wID09ICZSdW5Mb29wOjpjdXJyZW50KCkpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3J1bkxvb3AuZGlzcGF0
Y2goV1RGTW92ZShmdW5jdGlvbikpOworICAgIH0KKworICAgIFJ1bkxvb3AmIHJ1bkxvb3AoKSB7
IHJldHVybiBtX3J1bkxvb3A7IH0KK3ByaXZhdGU6CisgICAgUnVuTG9vcCYgbV9ydW5Mb29wOwor
fTsKKworU2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQoKQorICAgIDogbV90aHJlYWRJ
ZGVudGlmaWVyKDApCisgICAgLCBtX3RocmVhZFJ1bkxvb3AobnVsbHB0cikKK3sKK30KKworU2Ny
b2xsaW5nVGhyZWFkOjp+U2Nyb2xsaW5nVGhyZWFkKCkKK3sKKyAgICB0ZXJtaW5hdGVTY3JvbGxp
bmdUaHJlYWQoKTsKK30KKwordm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmluaXRpYWxpemVSdW5Mb29w
KCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1faW5pdGlhbGl6ZVJ1bkxv
b3BNdXRleCk7CisgICAgICAgIG1fdGhyZWFkUnVuTG9vcCA9IHN0ZDo6bWFrZV91bmlxdWU8U2Ny
b2xsaW5nUnVuTG9vcD4oKTsKKworICAgICAgICBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9u
VmFyaWFibGUubm90aWZ5QWxsKCk7CisgICAgfQorCisgICAgQVNTRVJUKGlzQ3VycmVudFRocmVh
ZCgpKTsKKyAgICBtX3RocmVhZFJ1bkxvb3AtPnJ1bkxvb3AoKS5ydW4oKTsKKworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV90ZXJtaW5hdGVSdW5Mb29wTXV0ZXgpOworICAgICAg
ICBtX3RocmVhZFJ1bkxvb3AgPSBudWxscHRyOworICAgICAgICBtX3Rlcm1pbmF0ZVJ1bkxvb3BD
b25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgfQorCisgICAgZGV0YWNoVGhyZWFkKG1fdGhyZWFk
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0ZXJtaW5hdGVTY3JvbGxp
bmdUaHJlYWQoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGVybWluYXRlUnVuTG9vcE11
dGV4KTsKKyAgICBtX3RocmVhZFJ1bkxvb3AtPnJ1bkxvb3AoKS5zdG9wKCk7CisgICAgbV90ZXJt
aW5hdGVSdW5Mb29wQ29uZGl0aW9uLndhaXQobV90ZXJtaW5hdGVSdW5Mb29wTXV0ZXgpOworfQor
Cit2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBm
dW5jdGlvbikKK3sKKyAgICBhdXRvJiBzY3JvbGxpbmdUaHJlYWQgPSBTY3JvbGxpbmdUaHJlYWQ6
OnNpbmdsZXRvbigpOworICAgIHNjcm9sbGluZ1RocmVhZC5jcmVhdGVUaHJlYWRJZk5lZWRlZCgp
OworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzaW5nbGV0b24oKS5tX2Z1bmN0
aW9uc011dGV4KTsKKyAgICAgICAgc2Nyb2xsaW5nVGhyZWFkLm1fdGhyZWFkUnVuTG9vcC0+Y2Fs
bE9uU2Nyb2xsaW5nUnVuTG9vcChmdW5jdGlvbik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVG
aXhlZE5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNDM4YTNiYTJkNzZhMzdhNTgyMTZiOTQyODg3MDk4
ZjE4NTE3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9ndGsvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZS5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIKKyNp
bmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFNj
cm9sbGluZ1RyZWVGaXhlZE5vZGU+IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZShTY3Jv
bGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQoreworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUoc2Nyb2xsaW5nVHJl
ZSwgbm9kZUlEKSk7Cit9CisKK1Njcm9sbGluZ1RyZWVGaXhlZE5vZGU6OlNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUoU2Nyb2xsaW5nVHJlZSYgc2Nyb2xsaW5nVHJlZSwgU2Nyb2xsaW5nTm9kZUlEIG5v
ZGVJRCkKKyAgICA6IFNjcm9sbGluZ1RyZWVOb2RlKHNjcm9sbGluZ1RyZWUsIEZpeGVkTm9kZSwg
bm9kZUlEKQoreworfQorCitTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjp+U2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZSgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlQmVm
b3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZUxheWVyc0Fm
dGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFNpemUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9s
bGluZ1RyZWVGaXhlZE5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NmNmZjRlZTA2ZDM5ZWNmNWQwYTA5ZDM2
N2ZlYjg0M2E0OWZkNTFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZV9oCisjZGVmaW5l
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGVfaAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
KworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb25zdHJh
aW50cy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHM7CisKK2NsYXNz
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgeworcHVi
bGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUmLCBTY3JvbGxpbmdOb2RlSUQpOworCisgICAgdmlydHVh
bCB+U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSgpOworCitwcml2YXRlOgorICAgIFNjcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFu
Z2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3Qm
IGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkgb3Zl
cnJpZGU7CisKKyAgICBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBtX2NvbnN0cmFp
bnRzOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2xheWVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1NDUk9MTElO
R19OT0RFKFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUsIGlzRml4ZWROb2RlKCkpCisKKyNlbmRpZiAv
LyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZUZpeGVk
Tm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2U2MzNlZGUyNzg2NzYzMTExMGMzNDRiMmI2NTY0ZWFiNDdjZjc4ZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmNwcApAQCAtMCwwICsxLDM1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUd0ay5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgorI2luY2x1
ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGxvZ1RocmVhZGVkU2Nyb2xsaW5nTW9k
ZSh1bnNpZ25lZCBzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMpOworCitSZWY8U2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZT4gU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0
azo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJRCBu
b2RlSUQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZUd0ayhzY3JvbGxpbmdUcmVlLCBub2RlSUQpKTsKK30KKworU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0
ayhTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQor
ICAgIDogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2Rl
SUQpCisgICAgLCBtX3Njcm9sbENvbnRyb2xsZXIoKnRoaXMpCisgICAgLCBtX3Njcm9sbExheWVy
KDApCisgICAgLCBtX3Njcm9sbGVkQ29udGVudHNMYXllcigwKQorICAgICwgbV9jb3VudGVyU2Ny
b2xsaW5nTGF5ZXIoMCkKKyAgICAsIG1faW5zZXRDbGlwTGF5ZXIoMCkKKyAgICAsIG1fY29udGVu
dFNoYWRvd0xheWVyKDApCisgICAgLCBtX2hlYWRlckxheWVyKDApCisgICAgLCBtX2Zvb3Rlckxh
eWVyKDApCisgICAgLCBtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3IobnVsbHB0cikKKyAgICAsIG1f
dmVydGljYWxTY3JvbGxiYXIobnVsbHB0cikKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbGJhcihu
dWxscHRyKQoreworfQorCitTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp+U2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0aygpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6c2V0TGF5ZXJQb3NpdGlvbihHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQgaWQsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorICAgIEFTU0VSVChtX2NvbXBvc2l0aW5nQ29vcmRpbmF0b3Ip
OworICAgIG1fY29tcG9zaXRpbmdDb29yZGluYXRvci0+Y29tbWl0TGF5ZXJQb3NpdGlvbihpZCwg
cCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgVU5VU0VEX1BBUkFNKHApOwor
I2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBk
YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUpCit7
CisgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRy
ZW4oc3RhdGVOb2RlKTsKKyAgICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3du
Y2FzdDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQqIGNvbXBvc2l0aW5nQ29vcmRpbmF0b3IgPSBzdGF0ZU5vZGUuY29tcG9zaXRpbmdDb29y
ZGluYXRvcigpOworICAgIGlmIChjb21wb3NpdGluZ0Nvb3JkaW5hdG9yICYmIGNvbXBvc2l0aW5n
Q29vcmRpbmF0b3IgIT0gbV9jb21wb3NpdGluZ0Nvb3JkaW5hdG9yKQorICAgICAgICBtX2NvbXBv
c2l0aW5nQ29vcmRpbmF0b3IgPSBjb21wb3NpdGluZ0Nvb3JkaW5hdG9yOworI2VuZGlmCisKKyAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZU5vZGU6OlNjcm9sbExheWVyKSkgeworICAgICAgICBtX3Njcm9sbExheWVyID0gc2Nyb2xsaW5n
U3RhdGVOb2RlLmxheWVyKCk7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgICAg
ICBtX3Njcm9sbExheWVyUG9zaXRpb24gPSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXJQb3NpdGlv
bigpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29u
dGVudHNMYXllcikpCisgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyID0gc2Nyb2xsaW5n
U3RhdGVOb2RlLnNjcm9sbGVkQ29udGVudHNMYXllcigpOworCisgICAgaWYgKHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkNvdW50ZXJTY3JvbGxpbmdMYXllcikpCisgICAgICAgIG1fY291bnRlclNjcm9sbGluZ0xh
eWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmNvdW50ZXJTY3JvbGxpbmdMYXllcigpOworCisgICAg
aWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU6Okluc2V0Q2xpcExheWVyKSkKKyAgICAgICAgbV9pbnNldENsaXBM
YXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5pbnNldENsaXBMYXllcigpOworCisgICAgaWYgKHNj
cm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpCisgICAgICAgIG1fY29udGVudFNoYWRv
d0xheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmNvbnRlbnRTaGFkb3dMYXllcigpOworCisgICAg
aWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU6OkhlYWRlckxheWVyKSkKKyAgICAgICAgbV9oZWFkZXJMYXllciA9
IHNjcm9sbGluZ1N0YXRlTm9kZS5oZWFkZXJMYXllcigpOworCisgICAgaWYgKHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkZvb3RlckxheWVyKSkKKyAgICAgICAgbV9mb290ZXJMYXllciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5mb290ZXJMYXllcigpOworCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlBhaW50ZXJGb3JT
Y3JvbGxiYXIpKSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxpbmdTdGF0
ZU5vZGUudmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICB9CisKKyAg
ICBib29sIGxvZ1Njcm9sbGluZ01vZGUgPSAhbV9oYWRGaXJzdFVwZGF0ZTsKKyAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Ny
b2xsaW5nTm9kZTo6UmVhc29uc0ZvclN5bmNocm9ub3VzU2Nyb2xsaW5nKSkgeworICAgICAgICBp
ZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5bmNocm9ub3VzbHkoKSkgeworICAg
ICAgICAgICAgLy8gV2UncmUgdHJhbnNpdGlvbmluZyB0byB0aGUgc2xvdyAidXBkYXRlIHNjcm9s
bCBsYXllciBwb3NpdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQiIG1vZGUuCisgICAgICAgICAgICAv
LyBJbml0aWFsaXplIHRoZSBwcm9iYWJsZSBtYWluIHRocmVhZCBzY3JvbGwgcG9zaXRpb24gd2l0
aCB0aGUgY3VycmVudCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24uCisgICAgICAgICAgICBpZiAoc2Ny
b2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICBtX3Byb2Jh
YmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnJlcXVlc3Rl
ZFNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBzY3JvbGxMYXllclBvc2l0aW9uID0gbV9zY3JvbGxMYXllclBvc2l0
aW9uOworICAgICAgICAgICAgICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24g
PSBGbG9hdFBvaW50KC1zY3JvbGxMYXllclBvc2l0aW9uLngoKSwgLXNjcm9sbExheWVyUG9zaXRp
b24ueSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxvZ1Njcm9sbGlu
Z01vZGUgPSB0cnVlOworICAgIH0KKworICAgIGlmIChsb2dTY3JvbGxpbmdNb2RlKSB7CisgICAg
ICAgIGlmIChzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxl
ZCgpKQorICAgICAgICAgICAgbG9nVGhyZWFkZWRTY3JvbGxpbmdNb2RlKHN5bmNocm9ub3VzU2Ny
b2xsaW5nUmVhc29ucygpKTsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkV4cGVjdHNXaGVl
bEV2ZW50VGVzdFRyaWdnZXIpKQorICAgICAgICBtX2V4cGVjdHNXaGVlbEV2ZW50VGVzdFRyaWdn
ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuZXhwZWN0c1doZWVsRXZlbnRUZXN0VHJpZ2dlcigpOwor
CisgICAgbV9oYWRGaXJzdFVwZGF0ZSA9IHRydWU7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0azo6dXBkYXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdT
dGF0ZU5vZGUmIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlOjp1cGRhdGVBZnRlckNoaWxkcmVuKHN0YXRlTm9kZSk7CisKKyAgICBjb25zdCBhdXRvJiBz
Y3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+
KHN0YXRlTm9kZSk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBhZnRlciBj
aGlsZCBub2RlcyBoYXZlIGJlZW4gdXBkYXRlZCwgYmVjYXVzZSB0aGV5IG5lZWQgdG8gaGF2ZSB1
cGRhdGVkIHRoZWlyIGNvbnN0cmFpbnRzIGJlZm9yZSBhbnkgc2Nyb2xsaW5nIGhhcHBlbnMuCisg
ICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpCisgICAgICAgIHNldFNj
cm9sbFBvc2l0aW9uKHNjcm9sbGluZ1N0YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigp
KTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpCisgICAgICAgIHx8IHNjcm9sbGluZ1N0YXRlTm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENv
bnRlbnRzU2l6ZSkKKyAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhU2l6ZSkpCisg
ICAgICAgIHVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKHNjcm9sbFBvc2l0aW9uKCkpOworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICghY2FuSGF2
ZVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxDb250cm9sbGVy
LmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0azo6aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXMgYXhp
cykKK3sKKyAgICBzd2l0Y2ggKGF4aXMpIHsKKyAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6VmVy
dGljYWw6CisgICAgICAgIHJldHVybiAod2hlZWxFdmVudC5kZWx0YVkoKSA+IDAgJiYgc2Nyb2xs
UG9zaXRpb24oKS55KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKSB8fCAod2hlZWxF
dmVudC5kZWx0YVkoKSA8IDAgJiYgc2Nyb2xsUG9zaXRpb24oKS55KCkgPj0gbWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkueSgpKTsKKyAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbDoK
KyAgICAgICAgcmV0dXJuICh3aGVlbEV2ZW50LmRlbHRhWCgpID4gMCAmJiBzY3JvbGxQb3NpdGlv
bigpLngoKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCkpIHx8ICh3aGVlbEV2ZW50LmRl
bHRhWCgpIDwgMCAmJiBzY3JvbGxQb3NpdGlvbigpLngoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKS54KCkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpz
Y3JvbGxCeShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3sKKyAgICBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxCeShvZmZzZXQpOworfQorCitGbG9hdFBvaW50IFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGs6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sK
KyAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvblN5bmNocm9ub3VzbHkoKSkK
KyAgICAgICAgcmV0dXJuIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb247CisKKyAg
ICByZXR1cm4gLW1fc2Nyb2xsTGF5ZXJQb3NpdGlvbjsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlR3RrOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJl
YW0gPDwgIlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OnNldFNjcm9sbFBvc2l0
aW9uICIgPDwgc2Nyb2xsUG9zaXRpb24gPDwgIiBzY3JvbGxQb3NpdGlvbigpOiAiIDw8IHRoaXMt
PnNjcm9sbFBvc2l0aW9uKCkgPDwgIiBtaW46ICIgPDwgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkg
PDwgIiBtYXg6ICIgPDwgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgLy8gU2Nyb2xs
IGRlbHRhcyBjYW4gYmUgbm9uLWludGVncmFsIHdpdGggc29tZSBpbnB1dCBkZXZpY2VzLCBzbyBz
Y3JvbGxQb3NpdGlvbiBtYXkgbm90IGJlIGludGVncmFsLgorICAgIC8vIEZJWE1FOiB3aGVuIHdl
IHN1cHBvcnQgaGFsZi1waXhlbCBzY3JvbGwgcG9zaXRpb25zIG9uIFJldGluYSBkaXNwbGF5cywg
dGhpcyB3aWxsIG5lZWQgdG8gcm91bmQgdG8gaGFsZiBwaXhlbHMuCisgICAgRmxvYXRQb2ludCBy
b3VuZGVkUG9zaXRpb24ocm91bmRmKHNjcm9sbFBvc2l0aW9uLngoKSksIHJvdW5kZihzY3JvbGxQ
b3NpdGlvbi55KCkpKTsKKworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNl
dFNjcm9sbFBvc2l0aW9uKHJvdW5kZWRQb3NpdGlvbik7CisKKyAgICBpZiAoc2Nyb2xsaW5nVHJl
ZSgpLnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbG9nRXhw
b3NlZFVuZmlsbGVkQXJlYSgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVHdGs6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMo
Y29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7CisgICAgdXBkYXRlTWFpbkZyYW1l
UGluU3RhdGUoc2Nyb2xsUG9zaXRpb24pOworCisgICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbExh
eWVyUG9zaXRpb25TeW5jaHJvbm91c2x5KCkpIHsKKyAgICAgICAgbV9wcm9iYWJsZU1haW5UaHJl
YWRTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOworICAgICAgICBzY3JvbGxpbmdUcmVl
KCkuc2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoc2Nyb2xsaW5nTm9kZUlEKCksIHNjcm9sbFBv
c2l0aW9uLCBTZXRTY3JvbGxpbmdMYXllclBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNldFNjcm9sbExheWVyUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgIHNj
cm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbChzY3JvbGxpbmdOb2RlSUQo
KSwgc2Nyb2xsUG9zaXRpb24pOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVHdGs6OnNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24pCit7CisgICAgQVNTRVJUKCFzaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uU3luY2hy
b25vdXNseSgpKTsKKworICAgIG1fc2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IC1wb3NpdGlvbjsKKyAg
ICBzZXRMYXllclBvc2l0aW9uKG1fc2Nyb2xsTGF5ZXIsIG1fc2Nyb2xsTGF5ZXJQb3NpdGlvbik7
CisKKyAgICBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCA9
IHNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpOworICAgIEZsb2F0UmVjdCB2aWV3cG9y
dFJlY3QocG9zaXRpb24sIHNjcm9sbGFibGVBcmVhU2l6ZSgpKTsKKworICAgIEZsb2F0UG9pbnQg
c2Nyb2xsUG9zaXRpb25Gb3JGaXhlZENoaWxkcmVuID0gRnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlv
bkZvckZpeGVkUG9zaXRpb24oZW5jbG9zaW5nTGF5b3V0UmVjdCh2aWV3cG9ydFJlY3QpLCBMYXlv
dXRTaXplKHRvdGFsQ29udGVudHNTaXplKCkpLCBMYXlvdXRQb2ludChwb3NpdGlvbiksIHNjcm9s
bE9yaWdpbigpLCBmcmFtZVNjYWxlRmFjdG9yKCksCisgICAgICAgIGZpeGVkRWxlbWVudHNMYXlv
dXRSZWxhdGl2ZVRvRnJhbWUoKSwgYmVoYXZpb3JGb3JGaXhlZCwgaGVhZGVySGVpZ2h0KCksIGZv
b3RlckhlaWdodCgpKTsKKworICAgIGlmIChtX2NvdW50ZXJTY3JvbGxpbmdMYXllcikKKyAgICAg
ICAgc2V0TGF5ZXJQb3NpdGlvbihtX2NvdW50ZXJTY3JvbGxpbmdMYXllciwgRmxvYXRQb2ludChz
Y3JvbGxQb3NpdGlvbkZvckZpeGVkQ2hpbGRyZW4pKTsKKworICAgIGZsb2F0IHRvcENvbnRlbnRJ
bnNldCA9IHRoaXMtPnRvcENvbnRlbnRJbnNldCgpOworICAgIGlmIChtX2luc2V0Q2xpcExheWVy
ICYmIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyICYmIHRvcENvbnRlbnRJbnNldCkgeworICAgICAg
ICBzZXRMYXllclBvc2l0aW9uKG1faW5zZXRDbGlwTGF5ZXIsIEZsb2F0UG9pbnQoMCwgRnJhbWVW
aWV3Ojp5UG9zaXRpb25Gb3JJbnNldENsaXBMYXllcihwb3NpdGlvbiwgdG9wQ29udGVudEluc2V0
KSkpOworCisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQgc2Nyb2xsZWRDb250ZW50c0xheWVyUG9z
aXRpb24gPSBGcmFtZVZpZXc6OnBvc2l0aW9uRm9yUm9vdENvbnRlbnRMYXllcihwb3NpdGlvbiwg
c2Nyb2xsT3JpZ2luKCksIHRvcENvbnRlbnRJbnNldCwgaGVhZGVySGVpZ2h0KCkpOworICAgICAg
ICBzZXRMYXllclBvc2l0aW9uKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLCBzY3JvbGxlZENvbnRl
bnRzTGF5ZXJQb3NpdGlvbik7CisgICAgICAgIGlmIChtX2NvbnRlbnRTaGFkb3dMYXllcikKKyAg
ICAgICAgICAgIHNldExheWVyUG9zaXRpb24obV9jb250ZW50U2hhZG93TGF5ZXIsIHNjcm9sbGVk
Q29udGVudHNMYXllclBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBpZiAobV9oZWFkZXJMYXllciB8
fCBtX2Zvb3RlckxheWVyKSB7CisgICAgICAgIC8vIEdlbmVyYWxseSB0aGUgYmFubmVycyBzaG91
bGQgaGF2ZSB0aGUgc2FtZSBob3Jpem9udGFsLXBvc2l0aW9uIGNvbXB1dGF0aW9uIGFzIGEgZml4
ZWQgZWxlbWVudC4gSG93ZXZlciwKKyAgICAgICAgLy8gdGhlIGJhbm5lcnMgYXJlIG5vdCBhZmZl
Y3RlZCBieSB0aGUgZnJhbWVTY2FsZUZhY3RvcigpLCBzbyBpZiB0aGVyZSBpcyBjdXJyZW50bHkg
YSBub24tMSBmcmFtZVNjYWxlRmFjdG9yKCkKKyAgICAgICAgLy8gdGhlbiB3ZSBzaG91bGQgcmVj
b21wdXRlIHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJlbiBmb3IgdGhlIGJhbm5lciB3aXRo
IGEgc2NhbGUgZmFjdG9yIG9mIDEuCisgICAgICAgIGZsb2F0IGhvcml6b250YWxTY3JvbGxPZmZz
ZXRGb3JCYW5uZXIgPSBzY3JvbGxQb3NpdGlvbkZvckZpeGVkQ2hpbGRyZW4ueCgpOworICAgICAg
ICBpZiAoZnJhbWVTY2FsZUZhY3RvcigpICE9IDEpCisgICAgICAgICAgICBob3Jpem9udGFsU2Ny
b2xsT2Zmc2V0Rm9yQmFubmVyID0gRnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlvbkZvckZpeGVkUG9z
aXRpb24oZW5jbG9zaW5nTGF5b3V0UmVjdCh2aWV3cG9ydFJlY3QpLCBMYXlvdXRTaXplKHRvdGFs
Q29udGVudHNTaXplKCkpLCBMYXlvdXRQb2ludChwb3NpdGlvbiksIHNjcm9sbE9yaWdpbigpLCAx
LCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCksIGJlaGF2aW9yRm9yRml4ZWQs
IGhlYWRlckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSkueCgpOworCisgICAgICAgIGlmIChtX2hl
YWRlckxheWVyKQorICAgICAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbihtX2hlYWRlckxheWVyLCBG
bG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIsIEZyYW1lVmlldzo6eVBv
c2l0aW9uRm9ySGVhZGVyTGF5ZXIocG9zaXRpb24sIHRvcENvbnRlbnRJbnNldCkpKTsKKworICAg
ICAgICBpZiAobV9mb290ZXJMYXllcikgeworICAgICAgICAgICAgc2V0TGF5ZXJQb3NpdGlvbiht
X2Zvb3RlckxheWVyLCBGbG9hdFBvaW50KGhvcml6b250YWxTY3JvbGxPZmZzZXRGb3JCYW5uZXIs
CisgICAgICAgICAgICAgICAgRnJhbWVWaWV3Ojp5UG9zaXRpb25Gb3JGb290ZXJMYXllcihwb3Np
dGlvbiwgdG9wQ29udGVudEluc2V0LCB0b3RhbENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpLCBmb290
ZXJIZWlnaHQoKSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9jaGlsZHJlbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgdmlld3BvcnRSZWN0LnNldExvY2F0aW9uKHNjcm9sbFBv
c2l0aW9uRm9yRml4ZWRDaGlsZHJlbik7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fY2hp
bGRyZW4pCisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKCp0
aGlzLCB2aWV3cG9ydFJlY3QsIEZsb2F0U2l6ZSgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVMYXllcnNBZnRlclZpZXdwb3J0Q2hhbmdlKGNv
bnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjptaW5pbXVt
U2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KEZsb2F0UG9pbnQoKSwgdG9GbG9h
dFNpemUoc2Nyb2xsT3JpZ2luKCkpKTsKKyAgICBpZiAoc2Nyb2xsaW5nVHJlZSgpLnJvb3ROb2Rl
KCkgPT0gdGhpcyAmJiBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsUGlubmluZ0JlaGF2aW9yKCkgPT0g
UGluVG9Cb3R0b20pCisgICAgICAgIHBvc2l0aW9uLnNldFkobWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueSgpKTsKKworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworRmxvYXRQb2ludCBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dAoreworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9z
aXRpb25Gcm9tT2Zmc2V0KEZsb2F0UG9pbnQodG90YWxDb250ZW50c1NpemVGb3JSdWJiZXJCYW5k
KCkgLSBzY3JvbGxhYmxlQXJlYVNpemUoKSksIHRvRmxvYXRTaXplKHNjcm9sbE9yaWdpbigpKSk7
CisgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5leHBhbmRlZFRvKEZsb2F0UG9pbnQoKSk7CisKKyAg
ICBpZiAoc2Nyb2xsaW5nVHJlZSgpLnJvb3ROb2RlKCkgPT0gdGhpcyAmJiBzY3JvbGxpbmdUcmVl
KCkuc2Nyb2xsUGlubmluZ0JlaGF2aW9yKCkgPT0gUGluVG9Ub3ApCisgICAgICAgIHBvc2l0aW9u
LnNldFkobWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKworICAgIHJldHVybiBwb3NpdGlv
bjsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrOjp1cGRhdGVN
YWluRnJhbWVQaW5TdGF0ZShjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAg
ICBib29sIHBpbm5lZFRvVGhlTGVmdCA9IHNjcm9sbFBvc2l0aW9uLngoKSA8PSBtaW5pbXVtU2Ny
b2xsUG9zaXRpb24oKS54KCk7CisgICAgYm9vbCBwaW5uZWRUb1RoZVJpZ2h0ID0gc2Nyb2xsUG9z
aXRpb24ueCgpID49IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICBib29sIHBpbm5l
ZFRvVGhlVG9wID0gc2Nyb2xsUG9zaXRpb24ueSgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigp
LnkoKTsKKyAgICBib29sIHBpbm5lZFRvVGhlQm90dG9tID0gc2Nyb2xsUG9zaXRpb24ueSgpID49
IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKKworICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRN
YWluRnJhbWVQaW5TdGF0ZShwaW5uZWRUb1RoZUxlZnQsIHBpbm5lZFRvVGhlUmlnaHQsIHBpbm5l
ZFRvVGhlVG9wLCBwaW5uZWRUb1RoZUJvdHRvbSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUd0azo6bG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIHZvaWQgbG9nVGhyZWFkZWRTY3JvbGxpbmdNb2Rl
KHVuc2lnbmVkIHN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucykKK3sKKyAgICBpZiAoc3luY2hy
b25vdXNTY3JvbGxpbmdSZWFzb25zKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVhc29uc0Rl
c2NyaXB0aW9uOworCisgICAgICAgIGlmIChzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMgJiBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Rm9yY2VkT25NYWluVGhyZWFkKQorICAgICAgICAgICAgcmVh
c29uc0Rlc2NyaXB0aW9uLmFwcGVuZExpdGVyYWwoImZvcmNlZCwiKTsKKyAgICAgICAgaWYgKHN5
bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNTbG93
UmVwYWludE9iamVjdHMpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kTGl0
ZXJhbCgic2xvdy1yZXBhaW50IG9iamVjdHMsIik7CisgICAgICAgIGlmIChzeW5jaHJvbm91c1Nj
cm9sbGluZ1JlYXNvbnMgJiBTY3JvbGxpbmdDb29yZGluYXRvcjo6SGFzVmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHNXaXRob3V0U3VwcG9ydGluZ0ZpeGVkTGF5ZXJzKQorICAgICAgICAgICAgcmVh
c29uc0Rlc2NyaXB0aW9uLmFwcGVuZExpdGVyYWwoInZpZXdwb3J0LWNvbnN0cmFpbmVkIG9iamVj
dHMsIik7CisgICAgICAgIGlmIChzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMgJiBTY3JvbGxp
bmdDb29yZGluYXRvcjo6SGFzTm9uTGF5ZXJWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cykKKyAg
ICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmRMaXRlcmFsKCJub24tbGF5ZXIgdmll
d3BvcnQtY29uc3RyYWluZWQgb2JqZWN0cywiKTsKKyAgICAgICAgaWYgKHN5bmNocm9ub3VzU2Ny
b2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpJc0ltYWdlRG9jdW1lbnQpCisg
ICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kTGl0ZXJhbCgiaW1hZ2UgZG9jdW1l
bnQsIik7CisKKyAgICAgICAgLy8gU3RyaXAgdGhlIHRyYWlsaW5nIGNvbW1hLgorICAgICAgICBT
dHJpbmcgcmVhc29uc0Rlc2NyaXB0aW9uVHJpbW1lZCA9IHJlYXNvbnNEZXNjcmlwdGlvbi50b1N0
cmluZygpLmxlZnQocmVhc29uc0Rlc2NyaXB0aW9uLmxlbmd0aCgpIC0gMSk7CisKKyAgICAgICAg
V1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IFN3aXRjaGluZyB0byBtYWluLXRocmVhZCBzY3JvbGxp
bmcgbW9kZS4gVGltZTogJWYgUmVhc29uKHMpOiAlc1xuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKSwgcmVhc29uc0Rlc2NyaXB0aW9uVHJpbW1lZC5hc2NpaSgpLmRhdGEoKSk7
CisgICAgfSBlbHNlCisgICAgICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBTd2l0Y2hpbmcg
dG8gdGhyZWFkZWQgc2Nyb2xsaW5nIG1vZGUuIFRpbWU6ICVmXG4iLCBXVEY6Om1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1OGY3MmFlOGY4YzE5NGE0YWEzNDMyNzE5Njg4
ZDE2MjRhYWM5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9ndGsvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0ay5oCkBAIC0wLDAgKzEs
MTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUd0a19oCisjZGVmaW5lIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVHdGtf
aAorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50OworCitjbGFzcyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrIDogcHVi
bGljIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUsIHByaXZhdGUgU2Nyb2xsQ29udHJv
bGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9s
bGluZ05vZGVJRCk7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZUd0aygpOworCitwcml2YXRlOgorICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVH
dGsoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICAvLyBTY3JvbGxpbmdU
cmVlTm9kZSBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCZWZvcmVD
aGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmKSBvdmVycmlkZTsKKworICAgIC8vIFNjcm9sbGNvbnRyb2xsZXJDbGllbnQgbWVt
YmVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsQnkoY29uc3QgRmxvYXRTaXpl
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsgfQorICAgIHZpcnR1YWwgU2Ny
b2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyOyB9CisKKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJWaWV3cG9ydENoYW5nZShjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25S
ZWN0LCBkb3VibGUgc2NhbGUpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRTY3JvbGxMYXllclBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKworICAgIEZsb2F0UG9pbnQgbWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRmxvYXRQb2ludCBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgdXBkYXRlTWFp
bkZyYW1lUGluU3RhdGUoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworCisgICAg
Ym9vbCBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmLCBTY3JvbGxFdmVudEF4aXMpOworCisgICAgdm9pZCBsb2dFeHBvc2VkVW5maWxs
ZWRBcmVhKCk7CisKKyAgICB2b2lkIHNldExheWVyUG9zaXRpb24oR3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklELCBjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICBTY3JvbGxDb250cm9sbGVy
IG1fc2Nyb2xsQ29udHJvbGxlcjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCBtX3Njcm9sbExheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX3Nj
cm9sbGVkQ29udGVudHNMYXllcjsKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
bV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEIG1faW5zZXRDbGlwTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
IG1fY29udGVudFNoYWRvd0xheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCBtX2hlYWRlckxheWVyOworICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX2Zv
b3RlckxheWVyOworCisgICAgRmxvYXRQb2ludCBtX3Njcm9sbExheWVyUG9zaXRpb247CisKKyAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fY29tcG9zaXRpbmdDb29yZGluYXRv
cjsKKworICAgIFNjcm9sbGJhciogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBTY3JvbGxiYXIq
IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKworICAgIEZsb2F0UG9pbnQgbV9wcm9iYWJsZU1haW5U
aHJlYWRTY3JvbGxQb3NpdGlvbjsKKyAgICBib29sIG1fbGFzdFNjcm9sbEhhZFVuZmlsbGVkUGl4
ZWxzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFkRmlyc3RVcGRhdGUgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9leHBlY3RzV2hlZWxFdmVudFRlc3RUcmlnZ2VyIHsgZmFsc2UgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisKKyNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlR3RrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ZGE2ZTFiNGM3MzBmMzI1MzNiOTllM2U5ZGVlMWY5ZmQ5YzE3YmM4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Nj
cm9sbGluZ1RyZWVHdGsuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVHdGsuaCIKKworI2luY2x1
ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUu
aCIKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitSZWY8U2Nyb2xsaW5nVHJlZUd0az4gU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRlKEFz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNjcm9sbGluZ1RyZWVHdGsoc2Nyb2xsaW5nQ29vcmRpbmF0b3Ip
KTsKK30KKworU2Nyb2xsaW5nVHJlZUd0azo6U2Nyb2xsaW5nVHJlZUd0ayhBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvcikKKyAgICA6IFRocmVhZGVkU2Nyb2xs
aW5nVHJlZShzY3JvbGxpbmdDb29yZGluYXRvcikKK3sKK30KKworUGFzc1JlZlB0cjxTY3JvbGxp
bmdUcmVlTm9kZT4gU2Nyb2xsaW5nVHJlZUd0azo6Y3JlYXRlU2Nyb2xsaW5nVHJlZU5vZGUoU2Ny
b2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCit7CisgICAg
c3dpdGNoIChub2RlVHlwZSkgeworICAgIGNhc2UgRnJhbWVTY3JvbGxpbmdOb2RlOgorICAgICAg
ICByZXR1cm4gU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUd0azo6Y3JlYXRlKCp0aGlz
LCBub2RlSUQpOworICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBGaXhl
ZE5vZGU6CisgICAgICAgIHJldHVybiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjcmVhdGUoKnRo
aXMsIG5vZGVJRCk7CisgICAgY2FzZSBTdGlja3lOb2RlOgorICAgICAgICByZXR1cm4gU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGU6OmNyZWF0ZSgqdGhpcywgbm9kZUlEKTsKKyAgICB9CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVH
dGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlR3Rr
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmE4YjZiY2U3MjVkOTdjYWM0N2FlZGYyM2I5ZDQ3OWY5YmNlZDA5OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3Jv
bGxpbmdUcmVlR3RrLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNjcm9sbGluZ1RyZWVHdGtfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVlR3RrX2gKKworI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJUaHJlYWRlZFNjcm9sbGluZ1RyZWUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdUcmVlR3RrIDogcHVi
bGljIFRocmVhZGVkU2Nyb2xsaW5nVHJlZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTY3Jv
bGxpbmdUcmVlR3RrPiBjcmVhdGUoQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvciopOworCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBjcmVhdGVTY3JvbGxpbmdUcmVl
Tm9kZShTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlR3RrKEFzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlR3RrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2d0ay9TY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5ZjZiYWExZGIzMTg5NzE4ZjNjZjM0NmMw
MTNiNzUwMDMyMmFiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGlu
Z1RyZWVTdGlja3lOb2RlLmgiCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVN0aWNreU5v
ZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVmPFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlPiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
Y3JlYXRlKFNjcm9sbGluZ1RyZWUmIHNjcm9sbGluZ1RyZWUsIFNjcm9sbGluZ05vZGVJRCBub2Rl
SUQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUo
c2Nyb2xsaW5nVHJlZSwgbm9kZUlEKSk7Cit9CisKK1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlOjpT
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZShTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3Jv
bGxpbmdOb2RlSUQgbm9kZUlEKQorICAgIDogU2Nyb2xsaW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJl
ZSwgU3RpY2t5Tm9kZSwgbm9kZUlEKQoreworfQorCitTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
flNjcm9sbGluZ1RyZWVTdGlja3lOb2RlKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6dXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVO
b2RlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9ndGsvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmJl
MDYyMmE1MTAzN2JlMTExNTJkMDlmNDIxZGNjODBlZThkN2VmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvZ3RrL1Njcm9sbGluZ1RyZWVTdGlja3lOb2Rl
LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1Ry
ZWVTdGlja3lOb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGVfaAorCisjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKKworY2xhc3MgU2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgeworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU+IGNyZWF0
ZShTY3JvbGxpbmdUcmVlJiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIHZpcnR1YWwgflNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlKCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29u
c3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVk
UG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkgb3ZlcnJpZGU7
CisKKyAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbV9sYXllcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19TQ1JPTExJTkdf
Tk9ERShTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSwgaXNTdGlja3lOb2RlKCkpCisKKyNlbmRpZiAv
LyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZVN0aWNr
eU5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggNGI3MDFjNzgx
ZmFkMTBiMDE0NmI5NGRkMjg4MzYyZmM1OWEwY2UwMy4uN2Q1ZDg5NWUzZmY1M2IwOTFmOGJmN2Yx
OGIxYjdkOGM0Nzc1NjFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBA
IC00ODIsNiArNDgyLDkgQEAgYm9vbCBTY3JvbGxiYXI6OnN1cHBvcnRzVXBkYXRlT25TZWNvbmRh
cnlUaHJlYWQoKSBjb25zdAogICAgIHJldHVybiAhbV9zY3JvbGxhYmxlQXJlYS5mb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKQogICAgICAgICAm
JiAobV9zY3JvbGxhYmxlQXJlYS5oYXNMYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbV9z
Y3JvbGxhYmxlQXJlYS5oYXNMYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKICAgICAgICAg
JiYgbV9zY3JvbGxhYmxlQXJlYS51c2VzQXN5bmNTY3JvbGxpbmcoKTsKKyNlbGlmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKEdUSykKKyAgICByZXR1cm4gIW1fc2Nyb2xsYWJs
ZUFyZWEuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0
aW5nKCkKKyAgICAgICAgJiYgbV9zY3JvbGxhYmxlQXJlYS51c2VzQXN5bmNTY3JvbGxpbmcoKTsK
ICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXggNGJmZGRmZDZjYmJkNzgz
NTAwNDg3YTc5MjBiM2VmMmI1N2E3ZGYxOS4uMTA4MDc4ODA2ZTk0MjFkOGU5MGNmMmNhZGI1Zjk3
MTIyNzZlZjNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmNwcApAQCAtMTkxLDYgKzE5MSwxMyBAQCB2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgQ29vcmRpbmF0
ZWRHcgogICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlk
LCBzdGF0ZSkpOwogfQogCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKK3ZvaWQgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y29tbWl0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBtX2NsaWVudC0+Y29tbWl0TGF5
ZXJQb3NpdGlvbihsYXllcklELCBwKTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tp
bmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCiB7CiAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQoaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmgKaW5kZXggYTgxYjQ1MmU5Y2Y0Njc0ZmEyY2NlMTVlNGQ0OWMzOTI3NWIx
ZGQ4MS4uZTFkODczOTQ2YjhkOWJmODc0YmJiZmZhZTI2MjQzZTVkNGU0NGY3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC01OSw2
ICs1OSw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWly
ZWQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpID0gMDsKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisjZW5kaWYKICAgICB9OwogCiAgICAgQ29tcG9z
aXRpbmdDb29yZGluYXRvcihQYWdlKiwgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Kik7
CkBAIC0xMDgsNiArMTExLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5
ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50VG9TdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGlu
YXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgLyogYXRsYXNJRCAqLywgV2ViQ29yZTo6SW50
UG9pbnQmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkNsaWVudCopIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0TGF5ZXJQb3NpdGlvbihDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgLy8g
VXBkYXRlQXRsYXM6OkNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1
aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pIG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcAppbmRleCBjYjk0YTk2NTIyYTFlNGU3MGNmODFjYzE3NDc2NTU2NDcyNDU3MGI5Li43
NzdiMGZhN2QxYzY1ZDBkN2UyNzNiMjZkMDI1ZmNlMmJmYWJmMTI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMzk1
LDYgKzM5NSwxNSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNO
ZWVkc0Rpc3BsYXkoKQogICAgIGFkZFJlcGFpbnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsKIH0KIAor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwKQoreworICAgIGlmIChwb3NpdGlvbigpID09IHApCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnN5bmNQb3NpdGlvbihwKTsKKyAgICBzZXRTaG91bGRVcGRhdGVW
aXNpYmxlUmVjdCgpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb1BsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgQ29udGVu
dHNMYXllclB1cnBvc2UpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggOGE0
NWMzNTY1ODU3MDQzNTcxYjJlMzU5Zjc2NmVmOTFiZDQwY2NjYS4uN2I1NWZmY2FkNjZkOWE5Njk1
NDMyOTk4YjdjOWQzODQ4MmJiMjZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtNTQsNiArNTQsMTAgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRvU3VyZmFjZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0
ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JiwgQ29vcmRpbmF0
ZWRTdXJmYWNlOjpDbGllbnQqKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3Rh
dGUoQ29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpID0g
MDsKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgdmlydHVhbCB2b2lkIGNvbW1p
dExheWVyUG9zaXRpb24oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGbG9hdFBvaW50JiBvZmZz
ZXQpID0gMDsKKyNlbmRpZgogfTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDog
cHVibGljIEdyYXBoaWNzTGF5ZXIKQEAgLTEwMiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiwgU2hvdWxkQ2xpcFRvTGF5ZXIg
PSBDbGlwVG9MYXllcikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBv
c2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoYm9vbCkgb3ZlcnJp
ZGU7CkBAIC0xNDIsNiArMTQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFRv
U3VyZmFjZShjb25zdCBJbnRTaXplJiwgdWludDMyX3QmIC8qIGF0bGFzSUQgKi8sIEludFBvaW50
JiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpDbGllbnQqKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0
Q29vcmRpbmF0b3IoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBjb29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29vcmRpbmF0b3I7IH0KIAogICAgIHZvaWQgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQo
KTsKICAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MDNlNDlmMzEy
ZTIxNGMyMDJmYWJkNDcxOWU3Y2U2YWUxY2Q3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xs
Q29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5j
bHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RUcmlnZ2VyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxl
cihTY3JvbGxDb250cm9sbGVyQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQp
Cit7Cit9CisKK2Jvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgU2Nyb2xsYmFyKiBob3Jpem9u
dGFsU2Nyb2xsYmFyID0gbV9jbGllbnQuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIFNjcm9s
bGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX2NsaWVudC52ZXJ0aWNhbFNjcm9sbGJhcigpOwor
CisgICAgZmxvYXQgZGVsdGFYID0gaG9yaXpvbnRhbFNjcm9sbGJhciA/IC13aGVlbEV2ZW50LmRl
bHRhWCgpIDogMDsKKyAgICBmbG9hdCBkZWx0YVkgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IC13aGVl
bEV2ZW50LmRlbHRhWSgpIDogMDsKKworICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcg
dmVydGljYWxseSBieSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQorICAgIGlmIChzdGQ6
OmFicyhkZWx0YVkpID49IHN0ZDo6YWJzKGRlbHRhWCkpCisgICAgICAgIGRlbHRhWCA9IDA7Cisg
ICAgZWxzZQorICAgICAgICBkZWx0YVkgPSAwOworCisgICAgaWYgKGRlbHRhWCB8fCBkZWx0YVkp
IHsKKyAgICAgICAgaWYgKGRlbHRhWSkgeworICAgICAgICAgICAgZGVsdGFZICo9IHZlcnRpY2Fs
U2Nyb2xsYmFyLT5waXhlbFN0ZXAoKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnNjcm9sbEJ5KEZs
b2F0U2l6ZSgwLCBkZWx0YVkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVsdGFYKSB7Cisg
ICAgICAgICAgICBkZWx0YVggKj0gaG9yaXpvbnRhbFNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7Cisg
ICAgICAgICAgICBtX2NsaWVudC5zY3JvbGxCeShGbG9hdFNpemUoZGVsdGFYLCAwKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjYWRmOTUz
ZjBiYzJlMWQ3MDgyYjZhOWQyZjgwMGMyMGJmYjRhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxDb250cm9sbGVyX2gKKyNkZWZpbmUg
U2Nyb2xsQ29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJX
aGVlbEV2ZW50VGVzdFRyaWdnZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBT
Y3JvbGxiYXI7CitjbGFzcyBXaGVlbEV2ZW50VGVzdFRyaWdnZXI7CisKK2NsYXNzIFNjcm9sbENv
bnRyb2xsZXJDbGllbnQgeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xs
ZXJDbGllbnQoKSB7IH0KKworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxCeShjb25z
dCBGbG9hdFNpemUmKSA9IDA7CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xs
YmFyKCkgPSAwOworICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGRlZmVyVGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dl
cjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0
VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6
OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0IHsgLyogRG8gbm90aGluZyAqLyB9CisKK307
CisKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNj
cm9sbENvbnRyb2xsZXIpOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsQ29udHJvbGxl
cihTY3JvbGxDb250cm9sbGVyQ2xpZW50Jik7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsQ29udHJv
bGxlckNsaWVudCYgbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsQ29udHJv
bGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCAx
Yjc4ZmQ4ZWZhMjA3OGY0Yzg4MWQ5Y2EzOWJkMzljZGU0MGY5M2E5Li4yYzUxOTFkOGYwOTYxYjhj
NTU0MmFiMTYxOGNiMWYwMTZiN2I0YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5jcHAKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3Jk
aQogCiBUZXh0dXJlTWFwcGVyTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5
ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQogewotICAgIHJldHVybiAoaWQg
IT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkgPyBsYXllckJ5SUQoaWQpIDogMDsKKyAgICBy
ZXR1cm4gKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpID8gbGF5ZXJCeUlEKGlkKSA6
IG51bGxwdHI7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXll
cnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQpAQCAtNjk2LDYg
KzY5NiwxNCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0U2Nyb2xsT2Zm
c2V0KHVpbnQzMl90IGxheWVySUQsIGNvbnN0IEludFNpegogICAgIH0pOwogfQogCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRM
YXllclBvc2l0aW9uKHVpbnQzMl90IGxheWVySUQsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7Cisg
ICAgaWYgKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCkpCisg
ICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihwKTsKK30KKyNlbmRpZgorCiB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBpZiAobV9jbGll
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IDY4YWFiZmU0
MGM0ZGY4MTk3ZDE2ZmJkNjJiOGFmZmE1ZTljMjc5NjAuLjQyNDczNGY4YmQ1ZGM5MTkzMzNjYWYy
MmRmODBmYTZiOGRiOWU4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5oCkBAIC03NSw2ICs3NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2
b2lkIGFwcGVuZFVwZGF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOwogCisjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKKyAgICB2b2lkIHNldExheWVyUG9zaXRpb24odWludDMyX3QgbGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworI2VuZGlmCisKICAgICBXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGZpbmRTY3JvbGxhYmxlQ29udGVudHNMYXllckF0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY3JvbGxPZmZz
ZXQodWludDMyX3QgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgb2Zmc2V0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVh
ZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9z
aXRvci5jcHAKaW5kZXggZmVjNWY2OTE1ZDMxMGUwZDQ1OTczYTEyNWM3OTRmMDkzYjRmMjA4NC4u
NjU1MzBiNzBkMDA1YmJkYjg0MTljMjY0ZTVhMzhlYWQyMjZjODQ3MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9y
L1RocmVhZGVkQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAK
QEAgLTIxMyw2ICsyMTMsMTcgQEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OmNvbW1pdFNjcm9s
bE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJbnRTaXplJiBvZmYKICAgICBtX2NsaWVu
dC0+Y29tbWl0U2Nyb2xsT2Zmc2V0KGxheWVySUQsIG9mZnNldCk7CiB9CiAKKyNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQordm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OmNvbW1pdExheWVyUG9z
aXRpb24odWludDMyX3QgbGF5ZXJJRCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7Cisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gc2NlbmUgPSBtX3NjZW5lOworICAg
IG1fc2NlbmUtPmFwcGVuZFVwZGF0ZShbc2NlbmUsIGxheWVySUQsIHBvc2l0aW9uXSB7CisgICAg
ICAgIHNjZW5lLT5zZXRMYXllclBvc2l0aW9uKGxheWVySUQsIHBvc2l0aW9uKTsKKyAgICB9KTsK
KyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKK30KKyNlbmRpZgorCiBib29sIFRocmVhZGVkQ29tcG9z
aXRvcjo6ZW5zdXJlR0xDb250ZXh0KCkKIHsKICAgICBpZiAoIWdsQ29udGV4dCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRj
b21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5o
CmluZGV4IDRhNzg5ZmQxNDNmNDgxYjNlY2NkMTIxOTllNTQ1MjYzYzczZjgwNTMuLmRhY2QxYTU1
ZWVmNzI5MDlmMjQxNWE1MWM3Y2Q2MjZlYjk3NjA0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRl
ZENvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKQEAgLTc3LDYgKzc3
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jik7CiAgICAgdm9pZCBzY3JvbGxCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAKKyNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIHZvaWQgY29tbWl0TGF5ZXJQb3NpdGlvbih1aW50
MzJfdCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisjZW5kaWYKKwogcHJp
dmF0ZToKICAgICBUaHJlYWRlZENvbXBvc2l0b3IoQ2xpZW50Kik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZTdjYTgwNTJmYTA1Y2U3ZmZkZDYzYzRl
YjRhMjYyY2JmMTM4OGIwMC4uYmI3MGRkYmI3YTU2NDBlOWI0ZmMwMmJhMGRjNjg0MThhYjllNmI5
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTEyMyw3
ICsxMjMsNyBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIgogI2VuZGlmCiAKQEAgLTc4NCw3ICs3ODQs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UoKQogICAgIG1fZHJhd2lu
Z0FyZWEgPSBtX3BhZ2VDbGllbnQuY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwogICAgIEFTU0VS
VChtX2RyYXdpbmdBcmVhKTsKIAotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKG1fZHJhd2lu
Z0FyZWEtPnR5cGUoKSA9PSBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWUpIHsKICAgICAg
ICAgbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5ID0gc3RkOjptYWtlX3VuaXF1ZTxSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5PigqdGhpcyk7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAt
MTc4MSw3ICsxNzgxLDcgQEAgc3RhdGljIFdlYldoZWVsRXZlbnQgY29hbGVzY2VkV2hlZWxFdmVu
dChEZXF1ZTxOYXRpdmVXZWJXaGVlbEV2ZW50PiYgcXVldWUsIFZlY3QKIAogdm9pZCBXZWJQYWdl
UHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQp
CiB7Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAobV9zY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5ICYmIG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS0+aGFuZGxlV2hlZWxFdmVudChwbGF0
Zm9ybShldmVudCkpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKQEAgLTE5MTMsNyArMTkxMyw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IHVpbnQzMl90IHByb2Nlc3NUeXBlLCBjb25zCiAKIGJvb2wgV2ViUGFnZVByb3h5OjpzaG91bGRT
dGFydFRyYWNraW5nVG91Y2hFdmVudHMoY29uc3QgV2ViVG91Y2hFdmVudCYgdG91Y2hTdGFydEV2
ZW50KSBjb25zdAogewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oSU9TKQogICAgIGZvciAoYXV0byYgdG91Y2hQb2lu
dCA6IHRvdWNoU3RhcnRFdmVudC50b3VjaFBvaW50cygpKSB7CiAgICAgICAgIGlmIChtX3Njcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHktPmlzUG9pbnRJbk5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHRv
dWNoUG9pbnQubG9jYXRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAyNTU4MDIzYWY0ZDY2Njg2YjIwOTQ5
NmY4MTg1N2MzNDJiNmI0N2E5Li4xNWE5ODI1MzZjY2MyMTY0ZThjMDdmY2JkNmZlYjFiNTNlN2Fl
YjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zMDAsNyAr
MzAwLDcgQEAgcHVibGljOgogICAgIE5TQXJyYXkgKmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgeyBy
ZXR1cm4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0cy5nZXQoKTsgfQogI2VuZGlmCiAgICAgICAgIAot
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
JiYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSog
c2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eS5nZXQoKTsgfQogI2VuZGlmCiAKQEAgLTE1MTAsNyArMTUxMCw3IEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fZmFpbGluZ1Byb3Zpc2lvbmFsTG9hZFVSTDsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBtX2RyYXdpbmdBcmVhOwotI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHk+IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAKaW5kZXggMDllMzI2MjhiZTVkYWE0OGExZGRjNDc3NTk3NjdkMjFiNGMyYmVl
YS4uYzk4YmIzMjk2YzA3YWM0MWRhNjdjOTUxNDc1ZWMyZGY1MDc0YTE4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcApAQCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2VuZGlmCiAKQEAgLTg0Miw4ICs4NDIsMTAg
QEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmxheWVyVHJlZVN0YXRlSXNGcm96ZW4oKSBjb25zdAog
UGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVT
Y3JvbGxpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlKSBjb25zdAogewogICAgIEFTU0VSVChtX3Bh
Z2UtPmNvcmVQYWdlKCkgPT0gcGFnZSk7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKG1f
cGFnZS0+ZHJhd2luZ0FyZWEoKS0+dHlwZSgpID09IERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVy
VHJlZSkKICAgICAgICAgcmV0dXJuIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUo
bV9wYWdlKTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggMjc0MTA1OWQzNzMxOGQwMDc0MjU3N2JlNGI0OWUyOGRiZGY0MWEwOS4uNTI1
YjQzZGI3YTQ3MmQ1ZjMzM2RjY2RhOWY5MDhmZjQ4MzU1NDczNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmNwcApAQCAtMjk2LDYgKzI5NiwxMyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosCiB7
CiB9CiAKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQordm9pZCBUaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0TGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklELCBj
b25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG1fY29tcG9zaXRvci0+Y29tbWl0TGF5ZXJQb3Np
dGlvbihsYXllcklELCBwKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAog
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5o
CmluZGV4IDc3ZTJlMTIwNTMyYjdmZDAwMjEwOGQ3MzlmZmNiMWIxNDkxOWRkNTcuLjI2Y2ZlYzg1
ZjQ1YjllZTFiMzc5MzQwNzRjZDllNzI4NWQ5Y2RhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Qu
aApAQCAtMTI2LDYgKzEyNiw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZs
dXNoUmVxdWlyZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0
ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjbGlwUmVjdCkgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0TGF5ZXJQb3NpdGlvbih1aW50MzJfdCBsYXllcklELCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIExheWVyVHJlZUNv
bnRleHQgbV9sYXllclRyZWVDb250ZXh0OwogICAgIHVpbnQ2NF90IG1fZm9yY2VSZXBhaW50QXN5
bmNDYWxsYmFja0lEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5oCmluZGV4IDUyYTMzMzQxMjFkOGI4NTRiNWE1NjZlYWM2Yzc0MGMy
NjE0MGZjMDguLjQyM2YwMDE5OTViN2M0ODk5MzczNGI4NjBjMTM1ZjY1ZTRmZWNmNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
LmgKQEAgLTc1LDYgKzc1LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lO
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoYm9vbCYpIG92ZXJyaWRlOwogI2VuZGlm
CiAKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKwog
ICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJzLgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBib29sIHJlc3BvbmRJ
bW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRVcGRhdGUoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggYjk2Mzk4
ZWQzNWMzYjA3ODI0ZjI0YzljNTBlOGYzMjNmYTExNDBhZC4uMGY4M2JhZTdkODJkMGU1ZWU0OTEx
NzFmYjJmNzhiOGFiY2FhNzVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTExNCw2ICsxMTQsNyBAQCB2b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYldo
ZWVsRXZlbnQmIHdoZWVsRXZlbgogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9zY3JvbGxpbmdUcmVlc011dGV4KTsKICAgICBpZiAoUmVmUHRyPFRo
cmVhZGVkU2Nyb2xsaW5nVHJlZT4gc2Nyb2xsaW5nVHJlZSA9IG1fc2Nyb2xsaW5nVHJlZXMuZ2V0
KHBhZ2VJRCkpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
cHJldHR5IGhvcnJpYmxlIHRoYXQgd2UncmUgdXBkYXRpbmcgdGhlIGJhY2svZm9yd2FyZCBzdGF0
ZSBoZXJlLgogICAgICAgICAvLyBXZWJDb3JlIHNob3VsZCBhbHdheXMga25vdyB0aGUgY3VycmVu
dCBzdGF0ZSBhbmQga25vdyB3aGVuIGl0IGNoYW5nZXMgc28gdGhlCiAgICAgICAgIC8vIHNjcm9s
bGluZyB0cmVlIGNhbiBiZSBub3RpZmllZC4KQEAgLTEyMyw2ICsxMjQsNyBAQCB2b2lkIEV2ZW50
RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZl
bnQmIHdoZWVsRXZlbgogICAgICAgICAgICAgICAgIHNjcm9sbGluZ1RyZWUtPnNldENhblJ1YmJl
ckJhbmRTdGF0ZShjYW5SdWJiZXJCYW5kQXRMZWZ0LCBjYW5SdWJiZXJCYW5kQXRSaWdodCwgY2Fu
UnViYmVyQmFuZEF0VG9wLCBjYW5SdWJiZXJCYW5kQXRCb3R0b20pOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgIFNjcm9sbGluZ1RyZWU6OkV2ZW50UmVzdWx0
IHJlc3VsdCA9IHNjcm9sbGluZ1RyZWUtPnRyeVRvSGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybVdo
ZWVsRXZlbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IGMzNWIxZTE0OWVmMWQ5ZTMzNzI1
MTM5ZjIxZjQxY2I1NGY3NTdhZGIuLmU5MzQ1M2UwMzg4MWIyNjMyN2E1M2JmY2I0MDE3MTQyOTM4
NmE4NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC05Nyw2ICs5Nyw3IEBAIFdFQktJVF9PUFRJ
T05fQ09ORkxJQ1QoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBFTkFCTEVfR0xFUzIpCiAK
IFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV8zRF9UUkFOU0ZPUk1TIEVOQUJMRV9PUEVOR0wp
CiBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTIEVOQUJM
RV9PUEVOR0wpCitXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfQVNZTkNfU0NST0xMSU5HIEVO
QUJMRV9USFJFQURFRF9DT01QT1NJVE9SKQogV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX0dM
RVMyIEVOQUJMRV9PUEVOR0wpCiBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfTkVUU0NBUEVf
UExVR0lOX0FQSSBFTkFCTEVfWDExX1RBUkdFVCkKIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJM
RV9QTFVHSU5fUFJPQ0VTU19HVEsyIEVOQUJMRV9YMTFfVEFSR0VUKQpAQCAtMTQ4LDYgKzE0OSw3
IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKFVTRV9TWVNURU1fTUFMTE9DIFBV
QkxJQyBPRkYpCiAjIENoYW5naW5nIHRoZXNlIG9wdGlvbnMgaXMgY29tcGxldGVseSB1bnN1cHBv
cnRlZC4KIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV8zRF9UUkFOU0ZP
Uk1TIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
QUNDRVNTSUJJTElUWSBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0FTWU5DX1NDUk9MTElORyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NBTlZBU19QQVRIIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09Q
VElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19JTUFHRV9TRVQgUFJJVkFURSBPTikK
IFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DU1NfUkVHSU9OUyBQUklW
QVRFIE9OKQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDU3MGExZTZm
MjIwMTYxNWFmNzMyNWMwNmZhZjEzYWMzMTNiODZiMGYuLjU2YjI4YzYxMDY0NmZhYTE2NmYyOTMx
Y2MwNWVmNjY4NmFiY2I1YWUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAxNi0wMi0xNiAgQ2hhbmdTZW9rIE9oICA8Y2hhbmdzZW9rLm9o
QGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IGluaXRpYWwgc3VwcG9y
dCBvZiBhc3luY2hyb25vdXMgc2Nyb2xsaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZTogQWRk
IGEgcHJpdmF0ZSBmbGFnLCBFTkFCTEVfQVNZTkNfU0NST0xMSU5HLgorCiAyMDE2LTAyLTE1ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmUt
ZW5hYmxlIElOVEwgb24gV2luQ2Fpcm8K
</data>

          </attachment>
      

    </bug>

</bugzilla>