<?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>177633</bug_id>
          
          <creation_ts>2017-09-28 18:23:07 -0700</creation_ts>
          <short_desc>[GTK] Move to new Pasteboard API</short_desc>
          <delta_ts>2020-05-17 01:35:48 -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 Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=172526</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=177638</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>211979</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Alberto Lopez Perez">clopez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dpino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>magomez</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mifenton</cc>
    
    <cc>Ms2ger</cc>
    
    <cc>pnormand</cc>
    
    <cc>rniwa</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1354402</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-09-28 18:23:07 -0700</bug_when>
    <thetext>The tests below fail on WebKitGTK+ since they were added on r222595 &lt;https://trac.webkit.org/r222595&gt;

1) editing/pasteboard/data-transfer-get-data-on-paste-rich-text.html [ Failure ]
2) editing/pasteboard/data-transfer-get-data-on-paste-plain-text.html [ Failure ]
3) editing/pasteboard/data-transfer-get-data-on-paste-custom.html [ Failure ]

The text failures:

1) https://build.webkit.org/results/GTK%20Linux%2064-bit%20Release%20(Tests)/r222597%20(3376)/editing/pasteboard/data-transfer-get-data-on-paste-rich-text-pretty-diff.html
2) https://build.webkit.org/results/GTK%20Linux%2064-bit%20Release%20(Tests)/r222597%20(3376)/editing/pasteboard/data-transfer-get-data-on-paste-plain-text-pretty-diff.html
3) https://build.webkit.org/results/GTK%20Linux%2064-bit%20Release%20(Tests)/r222597%20(3376)/editing/pasteboard/data-transfer-get-data-on-paste-custom-pretty-diff.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354408</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-28 18:54:46 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #0)
&gt; The tests below fail on WebKitGTK+ since they were added on r222595
&gt; &lt;https://trac.webkit.org/r222595&gt;
&gt; 
&gt; 1) editing/pasteboard/data-transfer-get-data-on-paste-rich-text.html [
&gt; Failure ]
&gt; 2) editing/pasteboard/data-transfer-get-data-on-paste-plain-text.html [
&gt; Failure ]
&gt; 3) editing/pasteboard/data-transfer-get-data-on-paste-custom.html [ Failure ]
&gt; 
&gt; The text failures:
&gt; 
&gt; 1)
&gt; https://build.webkit.org/results/GTK%20Linux%2064-bit%20Release%20(Tests)/
&gt; r222597%20(3376)/editing/pasteboard/data-transfer-get-data-on-paste-rich-
&gt; text-pretty-diff.html
&gt; 2)
&gt; https://build.webkit.org/results/GTK%20Linux%2064-bit%20Release%20(Tests)/
&gt; r222597%20(3376)/editing/pasteboard/data-transfer-get-data-on-paste-plain-
&gt; text-pretty-diff.html
&gt; 3)
&gt; https://build.webkit.org/results/GTK%20Linux%2064-bit%20Release%20(Tests)/
&gt; r222597%20(3376)/editing/pasteboard/data-transfer-get-data-on-paste-custom-
&gt; pretty-diff.html

Oh -- the new custom pasteboard data codepaths have only been implemented on Cocoa platforms (iOS, macOS) so far, so this is expected. Is the standard procedure to mark these tests as [ Skip ] or [ Failure ] in GTK platform TestExpectations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354409</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-09-28 18:58:02 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #1)

&gt; Is the standard procedure to mark these tests as [ Skip ] or [ Failure ] in GTK platform TestExpectations?

Yes. 

I&apos;m doing that in bug 177635</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354414</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-28 19:31:35 -0700</bug_when>
    <thetext>It would be really good for GTK+ to move to new Pasteboard API so that copy/paste drag/drop code would be more maintainable in the long run. I&apos;m hoping to take about at the contributor&apos;s meeting as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362770</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-10-20 11:01:17 -0700</bug_when>
    <thetext>According to Ryosuke, we have to implement:

 * Pasteboard::typesSafeForBindings()
 * Pasteboard::writeCustomData(const PasteboardCustomData&amp;)
 * Pasteboard::readOrigin()
 * Pasteboard::readStringForCustomData(const String&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363659</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-10-24 05:06:40 -0700</bug_when>
    <thetext>Reading the commit message of r222595 it seems to me the problem is specific to Mac. I don&apos;t think we are exposing any private data types of other apps to the web.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363660</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-10-24 05:19:29 -0700</bug_when>
    <thetext>hmm, I&apos;m now reading https://www.w3.org/TR/clipboard-apis/ is that spec what the new API implements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363675</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-10-24 07:41:34 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #5)
&gt; Reading the commit message of r222595 it seems to me the problem is specific
&gt; to Mac. I don&apos;t think we are exposing any private data types of other apps
&gt; to the web.

For the most part, that&apos;s right: Mac has tons of weird data in the clipboard that  should not be web-exposed, which doesn&apos;t happen on Linux. But we probably want to filter out text/uri-list. E.g. if you drag file:///home/mcatanzaro/cats.png into imgur, you want it to see the bytes of the file as image data, you don&apos;t want it to actually see file:///home/mcatanzaro/cats.png and learn your private disk layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363680</commentid>
    <comment_count>8</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-10-24 07:58:25 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #6)
&gt; hmm, I&apos;m now reading https://www.w3.org/TR/clipboard-apis/ is that spec what
&gt; the new API implements?

The custom pasteboard data codepath primarily ensures that the page is able to supply arbitrary data types using the clipboard APIs (e.g., dataTransfer.setData(&apos;myCustomType&apos;, &apos;myCustomData&apos;)) without directly affecting the contents of the real platform pasteboard. 

To do this, we package all the custom pasteboard types and data supplied by web content (as well as some metadata, such as the document origin) into a separate blob of data that we refer to as &quot;custom pasteboard data&quot;. On Cocoa platforms, this is written as a separate UTI on the platform pasteboard: &quot;com.apple.WebKit.custom-pasteboard-data&quot;.

Additionally, by including the origin of the page in the custom pasteboard data, we&apos;re able to enforce stricter checks on what data we expose cross-origin through clipboard APIs. For instance, r223195 uses the custom pasteboard data mechanism to sanitize URLs cross-origin, but maintain original data when dropping/pasting in a page of the same origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398924</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-02-13 20:19:55 -0800</bug_when>
    <thetext>*** Bug 178454 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470521</commentid>
    <comment_count>10</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2018-10-18 07:08:06 -0700</bug_when>
    <thetext>editing/pasteboard/copy-paste-across-shadow-boundaries-with-style-2.html

is crashing since added in r236785</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482936</commentid>
    <comment_count>11</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2018-11-29 07:17:51 -0800</bug_when>
    <thetext>There are 2 tests that were passing that are flaky now:

editing/pasteboard/paste-text-with-style.html [ Failure Pass ]

with diff:
--- /home/slave/webkitgtk/gtk-linux-64-release-tests/build/layout-test-results/editing/pasteboard/paste-text-with-style-expected.txt
+++ /home/slave/webkitgtk/gtk-linux-64-release-tests/build/layout-test-results/editing/pasteboard/paste-text-with-style-actual.txt
@@ -4,7 +4,7 @@
 EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV &gt; BODY &gt; HTML &gt; #document to 0 of DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 0 of #text &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 9 of #text &gt; FONT &gt; DIV &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of #text &gt; I &gt; B &gt; DIV &gt; BODY &gt; HTML &gt; #document to 9 of #text &gt; FONT &gt; DIV &gt; DIV &gt; BODY &gt; HTML &gt; #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV &gt; BODY &gt; HTML &gt; #document to 0 of DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 9 of #text &gt; FONT &gt; DIV &gt; DIV &gt; BODY &gt; HTML &gt; #document to 9 of #text &gt; FONT &gt; DIV &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV &gt; BODY &gt; HTML &gt; #document to 0 of DIV &gt; BODY &gt; HTML &gt; #document toDOMRange:range from 11 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document to 11 of #text &gt; DIV &gt; BODY &gt; HTML &gt; #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification
@@ -26,15 +26,7 @@
 &quot;
 
 Markup after:
-| &lt;b&gt;
-|   &lt;i&gt;
-|     &quot;hello bold and italic&quot;
-| &lt;div&gt;
-|   &lt;i&gt;
-|     &quot;hello italic&quot;
-| &lt;div&gt;
-|   &lt;font&gt;
-|     color=&quot;#ff0000&quot;
-|     &quot;hello red&lt;#selection-caret&gt;&quot;
+| &quot;hello world&lt;#selection-caret&gt;&quot;
+| &lt;br&gt;
 | &quot;
 &quot;

editing/pasteboard/paste-without-nesting.html [ Failure Pass ]

with diff
--- /home/slave/webkitgtk/gtk-linux-64-release-tests/build/layout-test-results/editing/pasteboard/paste-without-nesting-expected.txt
+++ /home/slave/webkitgtk/gtk-linux-64-release-tests/build/layout-test-results/editing/pasteboard/paste-without-nesting-actual.txt
@@ -1,7 +1,7 @@
 This test checks that copy a selection and paste over the same selection does not create nested divs.
 
 PASS confirmedMarkup is &apos;Hello&apos;
-PASS confirmedMarkup is &apos;Hello&lt;br&gt;world&apos;
+FAIL confirmedMarkup should be Hello&lt;br&gt;world. Was Hello.
 PASS confirmedMarkup is &apos;&lt;div&gt;Hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&apos;
 PASS confirmedMarkup is &apos;&lt;div&gt;Hello&lt;/div&gt;&lt;div&gt;world&lt;/div&gt;&apos;
 PASS confirmedMarkup is &apos;&lt;div&gt;&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;world&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653296</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-16 02:56:30 -0700</bug_when>
    <thetext>*** Bug 189737 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653298</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-16 02:57:40 -0700</bug_when>
    <thetext>*** Bug 81320 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653300</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-16 02:59:24 -0700</bug_when>
    <thetext>*** Bug 196541 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653304</commentid>
    <comment_count>15</comment_count>
      <attachid>399547</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-16 05:11:17 -0700</bug_when>
    <thetext>Created attachment 399547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653395</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-17 01:35:48 -0700</bug_when>
    <thetext>Committed r261792: &lt;https://trac.webkit.org/changeset/261792&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399547</attachid>
            <date>2020-05-16 05:11:17 -0700</date>
            <delta_ts>2020-05-16 07:14:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-pasteboard-custom-data.diff</filename>
            <type>text/plain</type>
            <size>36090</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwOTkxYjY5NWMzZGQuLjM5NGM2YTE1ZmZmMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBA
CisyMDIwLTA1LTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBNb3ZlIHRvIG5ldyBQYXN0ZWJvYXJkIEFQSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NjMzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRleHQgZXhwZWN0YXRp
b25zLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRh
LW9uLXBhc3RlLXJpY2gtdGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDIwLTA1LTE2ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gTWFrZSBP
dXRPZk1lbW9yeSBlcnJvciBhcyBpbnN0YW5jZSBvZiBSYW5nZUVycm9yCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDg4ZGRkNjgxYTY1Zi4uNmQ5NTNmZmRl
ZmU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTA3
NSw0NCArMTA3NSwyMSBAQCB3ZWJraXQub3JnL2IvMTgwMzcwIGZhc3QvaW1hZ2VzL2FuaW1hdGVk
LWltYWdlLW1wNC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTgwMzcwIGh0dHAvdGVzdHMv
aW1hZ2VzL2ltYWdlLXN1cHBvcnRzLXZpZGVvLmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8x
ODAzNzAgZmFzdC9pbWFnZXMvYW5pbWF0ZWQtaW1hZ2UtbXA0LWNyYXNoLmh0bWwgWyBTa2lwIF0K
IAotIyBHVEsgb3VnaHQgdG8gc3VwcG9ydCB0aGUgbmV3IG1vZGVybiBwYXN0ZWJvYXJkIEFQSQot
d2Via2l0Lm9yZy9iLzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQvY29weS13aXRob3V0LXNlbGVj
dGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvcGFzdGVi
b2FyZC9jb3B5aW5nLWh0bWwtc3RyaXBzLWphdmFzY3JpcHQtdXJsLWFuZC1ldmVudC1oYW5kbGVy
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzc2MzMgZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGEtdHJhbnNmZXItZ2V0LWRhdGEtb24tY29weWluZy1wYXN0aW5nLW1hbGZvcm1lZC11cmwt
aW4tc2FtZS1kb2N1bWVudC5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVk
aXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLXBhc3RlLWN1c3RvbS5o
dG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvcGFzdGVib2FyZC9k
YXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLXBhc3RlLXBsYWluLXRleHQuaHRtbCBbIEZhaWx1cmUg
XQotd2Via2l0Lm9yZy9iLzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1n
ZXQtZGF0YS1vbi1wYXN0ZS1yaWNoLXRleHQuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9i
LzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1nZXQtZGF0YS1vbi1wYXN0
aW5nLWh0bWwtdXNlcy1ibG9iLXVybC5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3
NjMzIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWl0ZW1zLWFkZC1jdXN0b20tZGF0
YS5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvcGFzdGVib2Fy
ZC9kYXRhLXRyYW5zZmVyLXNldC1kYXRhLWlnbm9yZS1jb3BpZWQtbWFsZm9ybWVkLXVybC1pbi1u
dWxsLW9yaWdpbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcv
cGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLXNldC1kYXRhLXNhbml0aXplLXVybC13aGVuLWNvcHlp
bmctaW4tbnVsbC1vcmlnaW4uaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE3NzYzMyBl
ZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1zZXQtZGF0YS1zYW5pdGl6ZXMtaHRtbC13
aGVuLWNvcHlpbmctaW4tbnVsbC1vcmlnaW4uaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9i
LzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1zZXQtZGF0YS1zYW5pdGl6
ZXMtaHRtbC13aGVuLWNvcHlpbmcuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE3NzYz
MyBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YXRyYW5zZmVyLWl0ZW1zLXBhc3RlLXBsYWludGV4dC5o
dG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRh
VHJhbnNmZXItdHlwZXMtcGFzdGluZy1wbGFpbnRleHQuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0
Lm9yZy9iLzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQvb25wYXN0ZS10ZXh0LWh0bWwtdHlwZXMu
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQv
cGFzdGluZy1lbXB0eS1odG1sLWZhbGxzLWJhY2stdG8tdGV4dC5odG1sIFsgRmFpbHVyZSBdCi13
ZWJraXQub3JnL2IvMTc3NjMzIGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2NvcHktcGFz
dGUtaHRtbC1jcm9zcy1vcmlnaW4taWZyYW1lLWFjcm9zcy1vcmlnaW4uaHRtbCBbIFNraXAgXQot
d2Via2l0Lm9yZy9iLzE3NzYzMyBodHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9jb3B5LXBh
c3RlLWh0bWwtY3Jvc3Mtb3JpZ2luLWlmcmFtZS1pbi1zYW1lLW9yaWdpbi5odG1sIFsgU2tpcCBd
Ci13ZWJraXQub3JnL2IvMTc3NjMzIGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2NvcHkt
cGFzdGUtaHRtbC1hY3Jvc3Mtb3JpZ2luLXNhbml0aXplcy1odG1sLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xNzc2MzMgaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvY29weS1w
YXN0ZS11cmwtYWNyb3NzLW9yaWdpbi1zYW5pdGl6ZXMtdXJsLmh0bWwgWyBGYWlsdXJlIF0KLXdl
YmtpdC5vcmcvYi8xNzc2MzMgaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvY29weS1wYXN0
ZS1odG1sLWFjcm9zcy1vcmlnaW4tc3RyaXBzLW1zby1saXN0Lmh0bWwgWyBGYWlsdXJlIF0KLXdl
YmtpdC5vcmcvYi8xNzc2MzMgZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktcGFzdGUtYWNyb3NzLXNo
YWRvdy1ib3VuZGFyaWVzLXdpdGgtc3R5bGUtMi5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9i
LzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC13aXRoLXN0eWxlLmh0bWwgWyBG
YWlsdXJlIFBhc3MgXQotd2Via2l0Lm9yZy9iLzE3NzYzMyBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFz
dGUtd2l0aG91dC1uZXN0aW5nLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQotd2Via2l0Lm9yZy9iLzE3
NzYzMyBlZGl0aW5nL2FzeW5jLWNsaXBib2FyZC9jbGlwYm9hcmQtY2hhbmdlLWRhdGEtd2hpbGUt
d3JpdGluZy5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvYXN5
bmMtY2xpcGJvYXJkL2NsaXBib2FyZC1yZWFkLXRleHQtZnJvbS1wbGF0Zm9ybS5odG1sIFsgRmFp
bHVyZSBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBi
b2FyZC1jaGFuZ2UtZGF0YS13aGlsZS1nZXR0aW5nLXR5cGUuaHRtbCBbIFRpbWVvdXQgXQotd2Vi
a2l0Lm9yZy9iLzE3NzYzMyBlZGl0aW5nL2FzeW5jLWNsaXBib2FyZC9jbGlwYm9hcmQtY2hhbmdl
LWRhdGEtd2hpbGUtcmVhZGluZy5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTc3NjMz
IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC1nZXQtdHlwZS13aXRoLW9sZC1pdGVt
cy5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvYXN5bmMtY2xp
cGJvYXJkL2NsaXBib2FyZC1yZWFkLWJhc2ljLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcv
Yi8xNzc2MzMgZWRpdGluZy9hc3luYy1jbGlwYm9hcmQvY2xpcGJvYXJkLXJlYWQtdGV4dC1zYW1l
LW9yaWdpbi5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvYXN5
bmMtY2xpcGJvYXJkL2NsaXBib2FyZC13cml0ZS1iYXNpYy5odG1sIFsgVGltZW91dCBdCi13ZWJr
aXQub3JnL2IvMTc3NjMzIGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC13cml0ZS1p
dGVtcy10d2ljZS5odG1sIFsgVGltZW91dCBdCi13ZWJraXQub3JnL2IvMTc3NjMzIGVkaXRpbmcv
YXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC13cml0ZS10ZXh0Lmh0bWwgWyBUaW1lb3V0IF0KLXdl
YmtpdC5vcmcvYi8xNzc2MzMgZWRpdGluZy9hc3luYy1jbGlwYm9hcmQvY2xpcGJvYXJkLWl0ZW0t
Z2V0LXR5cGUtYmFzaWMuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE3NzYzMyBlZGl0
aW5nL2FzeW5jLWNsaXBib2FyZC9jbGlwYm9hcmQtcmVhZC10ZXh0Lmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xNzc2MzMgZWRpdGluZy9hc3luYy1jbGlwYm9hcmQvc2FuaXRpemUtd2hl
bi1yZWFkaW5nLW1hcmt1cC5odG1sIFsgRmFpbHVyZSBdCisjIEdUSyBvdWdodCB0byBzdXBwb3J0
IGFzeW5jIGNsaXBib2FyZAord2Via2l0Lm9yZy9iLzIxMTk3OSBlZGl0aW5nL2FzeW5jLWNsaXBi
b2FyZC9jbGlwYm9hcmQtY2hhbmdlLWRhdGEtd2hpbGUtd3JpdGluZy5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMjExOTc5IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC1y
ZWFkLXRleHQtZnJvbS1wbGF0Zm9ybS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjEx
OTc5IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC1jaGFuZ2UtZGF0YS13aGlsZS1n
ZXR0aW5nLXR5cGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIxMTk3OSBlZGl0aW5n
L2FzeW5jLWNsaXBib2FyZC9jbGlwYm9hcmQtY2hhbmdlLWRhdGEtd2hpbGUtcmVhZGluZy5odG1s
IFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjExOTc5IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJk
L2NsaXBib2FyZC1nZXQtdHlwZS13aXRoLW9sZC1pdGVtcy5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvMjExOTc5IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC1yZWFkLWJh
c2ljLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMTE5NzkgZWRpdGluZy9hc3luYy1j
bGlwYm9hcmQvY2xpcGJvYXJkLXJlYWQtdGV4dC1zYW1lLW9yaWdpbi5odG1sIFsgVGltZW91dCBd
Cit3ZWJraXQub3JnL2IvMjExOTc5IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC13
cml0ZS1iYXNpYy5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjExOTc5IGVkaXRpbmcv
YXN5bmMtY2xpcGJvYXJkL2NsaXBib2FyZC13cml0ZS1pdGVtcy10d2ljZS5odG1sIFsgVGltZW91
dCBdCit3ZWJraXQub3JnL2IvMjExOTc5IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL2NsaXBib2Fy
ZC13cml0ZS10ZXh0Lmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMTE5NzkgZWRpdGlu
Zy9hc3luYy1jbGlwYm9hcmQvY2xpcGJvYXJkLWl0ZW0tZ2V0LXR5cGUtYmFzaWMuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIxMTk3OSBlZGl0aW5nL2FzeW5jLWNsaXBib2FyZC9jbGlw
Ym9hcmQtcmVhZC10ZXh0Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMTE5NzkgZWRp
dGluZy9hc3luYy1jbGlwYm9hcmQvc2FuaXRpemUtd2hlbi1yZWFkaW5nLW1hcmt1cC5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjExOTc5IGVkaXRpbmcvYXN5bmMtY2xpcGJvYXJkL3Nh
bml0aXplLXdoZW4td3JpdGluZy1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcv
Yi8xODAwNjIgZmFzdC90ZXh0L3VzZXItaW5zdGFsbGVkLWZvbnRzIFsgU2tpcCBdCiAKQEAgLTEx
OTMsMTIgKzExNzAsNiBAQCB3ZWJraXQub3JnL2IvMjAwMTYyIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5YmkvaW5zcGVjdG9yLyBbIFNraXAgXQogIyBTZXJ2ZXIgY29va2llIG5vdCBoYW5k
bGVkIHdpdGggcGxhdGZvcm0gV2ViU29ja2V0cyBBUEkKIHdlYmtpdC5vcmcvYi8yMDAxNjUgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJzb2NrZXRzL2Nvb2tpZXMvMDA3Lmh0bWwg
WyBGYWlsdXJlIF0KIAotIyBObyBNYWMgc3lzdGVtIGZvbnRzIGluIFdlYktpdEdUSwotZWRpdGlu
Zy9wYXN0ZWJvYXJkL3Bhc3RlLWNvY29hLXdyaXRlci1tYXJrdXAtd2l0aC1zeXN0ZW0tZm9udHMu
aHRtbCBbIEZhaWx1cmUgXQotCi0jIFdlIGRvbid0IHVzZSBDb2NvYQotZWRpdGluZy9wYXN0ZWJv
YXJkL3Bhc3RlLWNvY29hLXdyaXRlci1tYXJrdXAtd2l0aC13ZWJraXQtc3RhbmRhcmQtZm9udC1m
YW1pbHkuaHRtbCBbIEZhaWx1cmUgXQotCiB3ZWJraXQub3JnL2IvMjA1ODU3IG1lZGlhL2VuY3J5
cHRlZC1tZWRpYS9tb2NrLU1lZGlhS2V5U2Vzc2lvbi1nZW5lcmF0ZVJlcXVlc3QuaHRtbCBbIFNr
aXAgXQogd2Via2l0Lm9yZy9iLzIwNTg2MCBtZWRpYS9lbmNyeXB0ZWQtbWVkaWEvbW9jay1NZWRp
YUtleVNlc3Npb24tcmVtb3ZlLmh0bWwgWyBTa2lwIF0KIApAQCAtMTUyMiw2ICsxNDkzLDggQEAg
d2Via2l0Lm9yZy9iLzIxMDkyNiBmYXN0L21lZGlhc3RyZWFtL2dldERpc3BsYXlNZWRpYS1tYXgt
Y29uc3RyYWludHMxLmh0bWwgWyBTa2kKIHdlYmtpdC5vcmcvYi8yMTA5MjYgZmFzdC9tZWRpYXN0
cmVhbS9nZXREaXNwbGF5TWVkaWEtbWF4LWNvbnN0cmFpbnRzMi5odG1sIFsgU2tpcCBdCiB3ZWJr
aXQub3JnL2IvMjEwOTI2IGZhc3QvbWVkaWFzdHJlYW0vZ2V0RGlzcGxheU1lZGlhLW1heC1jb25z
dHJhaW50czMuaHRtbCBbIFNraXAgXQogCit3ZWJraXQub3JnL2IvMTk5MjI0IGVkaXRpbmcvcGFz
dGVib2FyZC9jb3B5LXBhc3RlLWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy13aXRoLXN0eWxlLTIu
aHRtbCBbIENyYXNoIF0KKwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgRW5k
IG9mIENyYXNoaW5nIHRlc3RzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAt
MzYzMiw4ICszNjA1LDYgQEAgd2Via2l0Lm9yZy9iLzYyMjA0IHN2Zy9XM0MtU1ZHLTEuMS9hbmlt
YXRlLWVsZW0tMDQtdC5zdmcgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzc0MjgyIGVkaXRp
bmcvcGFzdGVib2FyZC9lbWFjcy1jdHJsLWstd2l0aC1tb3ZlLmh0bWwgWyBGYWlsdXJlIF0KIAot
d2Via2l0Lm9yZy9iLzgxMzIwIGVkaXRpbmcvcGFzdGVib2FyZC9jb3B5LXR3by1wYXN0ZWJvYXJk
LXR5cGVzLWJvdGgtd29yay5odG1sIFsgRmFpbHVyZSBdCi0KIHdlYmtpdC5vcmcvYi84NDY3OSBj
c3MzL3pvb20tY29vcmRzLnhodG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi84NDY5NCBm
YXN0L2V2ZW50cy9zZWxlY3RzdGFydC1ieS1kb3VibGUtdHJpcGxlLWNsaWNrcy5odG1sIFsgRmFp
bHVyZSBdCkBAIC00Mjg5LDEwICs0MjYwLDYgQEAgd2Via2l0Lm9yZy9iLzE4OTM0NSBodHRwL3Rl
c3RzL21lZGlhL2NsZWFya2V5L2NvbGxlY3Qtd2Via2l0LW1lZGlhLXNlc3Npb24uaHRtbAogCiB3
ZWJraXQub3JnL2IvMTg5NTY0IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXJsLXdpdGgtY3Jl
ZGVudGlhbHMuaHRtbCBbIEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMTg5NzM3IGVkaXRpbmcv
cGFzdGVib2FyZC80OTMwOTg2LTEtcGFzdGUtYXMtcXVvdGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xODk3MzcgZWRpdGluZy9wYXN0ZWJvYXJkLzQ5MzA5ODYtMi1wYXN0ZS1h
cy1xdW90YXRpb24uaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE4OTczNyBlZGl0aW5n
L3Bhc3RlYm9hcmQvNDkzMDk4Ni0zLXBhc3RlLWFzLXF1b3RhdGlvbi5odG1sIFsgRmFpbHVyZSBd
Ci0KIHdlYmtpdC5vcmcvYi8xODk3Mzkgc3ZnL2dyYWRpZW50cy9zcHJlYWRNZXRob2RDbG9zZTIu
c3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8xODk5OTQgZmFzdC9maWxl
cy94aHItcmVzcG9uc2UtYmxvYi5odG1sIFsgRmFpbHVyZSBdCkBAIC00NTk4LDYgKzQ1NjUsOCBA
QCB3ZWJraXQub3JnL2IvMjA3Njc4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdXJs
L2EtZWxlbWVudC1vcmlnaW4uaHRtbCBbCiB3ZWJraXQub3JnL2IvMjA3Njc4IGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvdXJsL2EtZWxlbWVudC14aHRtbC54aHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzIwNzY3OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Vy
bC9hLWVsZW1lbnQuaHRtbCBbIEZhaWx1cmUgXQogCit3ZWJraXQub3JnL2IvMjExOTgxIGVkaXRp
bmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLXBhc3RpbmctaHRtbC11c2Vz
LWJsb2ItdXJsLmh0bWwgWyBGYWlsdXJlIF0KKwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KICMgRW5kIG9mIG5vbi1jcmFzaGluZywgbm9uLWZsYWt5IHRlc3RzIGZhaWxpbmcKICMv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItZ2V0LWRhdGEtb24t
cGFzdGUtcmljaC10ZXh0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9l
ZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1nZXQtZGF0YS1vbi1wYXN0ZS1yaWNoLXRl
eHQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
MTNkMmM4NjVmY2MyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLXBhc3RlLXJpY2gt
dGV4dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3IEBACitSaWNoIHRleHQKK3sKKyAgICAicGFz
dGUiOiB7CisgICAgICAgICJ0ZXh0L2h0bWwiOiAiPHNwYW4gc3R5bGU9XCIuLi5cIlwiPlJpY2gg
dGV4dDwvc3Bhbj4iLAorICAgICAgICAidGV4dC9wbGFpbiI6ICJSaWNoIHRleHQiCisgICAgfQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGQwZjZjMjEyYmQ2OC4uYmI2MDNkYWMzNTc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMjAtMDUtMTYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgdG8gbmV3IFBhc3RlYm9hcmQgQVBJ
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc2MzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3Vw
cG9ydCBmb3IgY3VzdG9tIGRhdGEgYW5kIHJlbW92ZSB0aGUgc3VwcG9ydCBmb3IgdW5rbm93biBk
YXRhIHR5cGVzIHRoYXQgaXMgY3VycmVudGx5IHVudXNlZC4KKworICAgICAgICAqIGVkaXRpbmcv
Z3RrL0VkaXRvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKTogU2V0IHRoZSBjb250ZW50T3JpZ2luLgorICAgICAgICAqIGVkaXRp
bmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxk
UmVwbGFjZVN1YnJlc291cmNlVVJMKTogSGVscGVyIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJlcGxh
Y2UgdGhlIHN1YnJlc291cmNlIFVSTC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJr
dXBSZWFkZXI6OnJlYWRIVE1MKTogQ3JlYXRlIGEgZnJhZ21lbnQgZm9yIEhUTUwgc2FuaXRpemlu
ZyBpdCBpZiBuZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Z3RrVHlwZSk6IE1pbWUgdHlwZSBuYW1lIGZvciBHVEsgY3Vz
dG9tIHBhc3RlYm9hcmQgZGF0YS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL1NoYXJlZEJ1ZmZlckdsaWIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVHQnl0ZXMgY29uc3QpOiBDcmVhdGUgYSBHQnl0
ZXMgd3JhcHBpbmcgdGhlIFNoYXJlZEJ1ZmZlciBkYXRhLgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRl
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JC
aW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVu
c2FmZUJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OmZpbGVDb250ZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Vs
ZWN0aW9uRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25EYXRhOjpjbGVhckFs
bEV4Y2VwdEZpbGVuYW1lcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE6OnNldEN1c3RvbURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uRGF0YTo6Y3VzdG9tRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25EYXRhOjpoYXNDdXN0b21EYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE6OmNsZWFyQ3VzdG9tRGF0YSk6CisKIDIwMjAtMDUtMTUg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIE51bGxwdHIgY3Jh
c2ggaW4gTWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRlQWxsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCBiZWY5ZmY2MDA1ZWUuLjk5YWExMTkyMmMzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC0xMTAsNiArMTEwLDcg
QEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBh
c3RlYm9hcmQpCiAgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHNlbGVjdGVkVGV4dEZvckRh
dGFUcmFuc2ZlcigpOwogICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVBy
ZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSwKICAg
ICAgICAgbV9kb2N1bWVudC5zZXR0aW5ncygpLnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJp
ZXNFbmFibGVkKCkgPyBTZXJpYWxpemVDb21wb3NlZFRyZWU6OlllcyA6IFNlcmlhbGl6ZUNvbXBv
c2VkVHJlZTo6Tm8pOworICAgIHBhc3RlYm9hcmRDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2Rv
Y3VtZW50Lm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgcGFzdGVib2FyZC53
cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9ndGsvV2ViQ29udGVudFJlYWRlckd0ay5jcHAKaW5kZXggOGFkOTVmNzExN2MzLi5kNjA5
ZjIyYzg0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRl
bnRSZWFkZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRl
bnRSZWFkZXJHdGsuY3BwCkBAIC04NSw5ICs4NSwyNiBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6
OnJlYWRVUkwoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgV2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZEhUTUwoY29uc3QgU3RyaW5nJikK
K3N0YXRpYyBib29sIHNob3VsZFJlcGxhY2VTdWJyZXNvdXJjZVVSTChjb25zdCBVUkwmIHVybCkK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICEodXJsLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSB8fCB1cmwucHJvdG9jb2xJc0RhdGEoKSk7Cit9CisKK2Jvb2wgV2ViQ29udGVudE1h
cmt1cFJlYWRlcjo6cmVhZEhUTUwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFm
cmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc2hvdWxk
U2FuaXRpemUoKSkgeworICAgICAgICBtYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cChzdHJpbmcsIE1T
T0xpc3RRdWlya3M6OkRpc2FibGVkLCBGdW5jdGlvbjx2b2lkKERvY3VtZW50RnJhZ21lbnQmKT4g
eyBbXShEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCkgeworICAgICAgICAgICAgcmVtb3ZlU3Vi
cmVzb3VyY2VVUkxBdHRyaWJ1dGVzKGZyYWdtZW50LCBbXShjb25zdCBVUkwmIHVybCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzaG91bGRSZXBsYWNlU3VicmVzb3VyY2VVUkwodXJsKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9IH0pOworICAgIH0gZWxzZQorICAgICAgICBtYXJrdXAg
PSBzdHJpbmc7CisKKyAgICByZXR1cm4gIW1hcmt1cC5pc0VtcHR5KCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3Rl
Ym9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCAwMWRi
NTk5NTUyMGIuLmZjZmY1NGNlZmFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQu
aApAQCAtODcsNiArODcsNyBAQCBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQgewogICAgIFZl
Y3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4gY2xpZW50RGF0YTsKICNlbmRpZgogI2lmIFBMQVRG
T1JNKEdUSykKKyAgICBTdHJpbmcgY29udGVudE9yaWdpbjsKICAgICBib29sIGNhblNtYXJ0Q29w
eU9yRGVsZXRlOwogICAgIFN0cmluZyB0ZXh0OwogICAgIFN0cmluZyBtYXJrdXA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURhdGEuaAppbmRleCBmOWMwZTlh
YTcyMTQuLmNmODlhNjBjY2ZmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZEN1c3RvbURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0
ZWJvYXJkQ3VzdG9tRGF0YS5oCkBAIC03NSw2ICs3NSw4IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBjaGFyKiBjb2NvYVR5
cGUoKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZ3RrVHlw
ZSgpIHsgcmV0dXJuICJvcmcud2Via2l0Z3RrLldlYktpdC5jdXN0b20tcGFzdGVib2FyZC1kYXRh
IjsgfQogI2VuZGlmCiAKICAgICB2b2lkIGZvckVhY2hUeXBlKEZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApp
bmRleCBiNjgzY2E3ZDMyODkuLjBhOGZlNzAxYjE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmgKQEAgLTk2LDYgKzk2LDcgQEAgcHVibGljOgogCiAjaWYgVVNFKEdMSUIp
CiAgICAgc3RhdGljIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShHQnl0ZXMqKTsKKyAgICBHUmVm
UHRyPEdCeXRlcz4gY3JlYXRlR0J5dGVzKCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIFVTRShHU1RS
RUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL1NoYXJlZEJ1
ZmZlckdsaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9TaGFyZWRCdWZmZXJH
bGliLmNwcAppbmRleCBjNzQ3MzU3NTMwN2YuLjhhOGMxMGI3MDI0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9TaGFyZWRCdWZmZXJHbGliLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL1NoYXJlZEJ1ZmZlckdsaWIuY3BwCkBAIC0zOCw2ICsz
OCwxNSBAQCBSZWY8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShHQnl0ZXMqIGJ5
dGVzKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZEJ1ZmZlcihieXRlcykpOwogfQog
CitHUmVmUHRyPEdCeXRlcz4gU2hhcmVkQnVmZmVyOjpjcmVhdGVHQnl0ZXMoKSBjb25zdAorewor
ICAgIHJlZigpOworICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1JlZihnX2J5dGVz
X25ld193aXRoX2ZyZWVfZnVuYyhkYXRhKCksIHNpemUoKSwgW10oZ3BvaW50ZXIgZGF0YSkgewor
ICAgICAgICBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihkYXRhKS0+ZGVyZWYoKTsKKyAgICB9
LCBjb25zdF9jYXN0PFNoYXJlZEJ1ZmZlcio+KHRoaXMpKSk7CisgICAgcmV0dXJuIGJ5dGVzOwor
fQorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZUZyb21SZWFkaW5n
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewogICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKaW5k
ZXggMzNmMTgxNTg5OGY2Li4xNTQ0MzljOTE1MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAgLTExNiw4ICsxMTYsNiBAQCB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRh
KQogICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFRleHQoZGF0YSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOgotICAgICAgICBtX3NlbGVjdGlv
bkRhdGEtPnNldFVua25vd25UeXBlRGF0YSh0eXBlLCBkYXRhKTsKLSAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUltYWdlOgogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xODcsNiArMTg1LDkgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJk
V2ViQ29udGVudCYgcGFzdGVib2FyZENvbnRlbnQpCiAgICAgICAgIGRhdGEuc2V0VGV4dChwYXN0
ZWJvYXJkQ29udGVudC50ZXh0KTsKICAgICAgICAgZGF0YS5zZXRNYXJrdXAocGFzdGVib2FyZENv
bnRlbnQubWFya3VwKTsKICAgICAgICAgZGF0YS5zZXRDYW5TbWFydFJlcGxhY2UocGFzdGVib2Fy
ZENvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUpOworICAgICAgICBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSBjdXN0b21EYXRhOworICAgICAgICBjdXN0b21EYXRhLnNldE9yaWdpbihwYXN0ZWJvYXJk
Q29udGVudC5jb250ZW50T3JpZ2luKTsKKyAgICAgICAgZGF0YS5zZXRDdXN0b21EYXRhKGN1c3Rv
bURhdGEuY3JlYXRlU2hhcmVkQnVmZmVyKCkpOwogICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9DbGlwYm9hcmQobV9uYW1lLCBXVEZNb3Zl
KGRhdGEpKTsKICAgICB9CiB9CkBAIC0yNjQsNiArMjY1LDggQEAgdm9pZCBQYXN0ZWJvYXJkOjpy
ZWFkKFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyJiByZWFkZXIsIFdlYkNvbnRlbnRSZWFkaW5n
UG9saWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHJlYWRlci5jb250ZW50T3JpZ2lu
ID0gcmVhZE9yaWdpbigpOworCiAgICAgYXV0byB0eXBlcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXMobV9uYW1lKTsKICAgICBpZiAodHlwZXMuY29u
dGFpbnMoInRleHQvaHRtbCJfcykpIHsKICAgICAgICAgYXV0byBidWZmZXIgPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRCdWZmZXJGcm9tQ2xpcGJvYXJk
KG1fbmFtZSwgInRleHQvaHRtbCJfcyk7CkBAIC0zMDYsMTQgKzMwOSwxNiBAQCB2b2lkIFBhc3Rl
Ym9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIGJvb2wgUGFzdGVib2Fy
ZDo6aGFzRGF0YSgpCiB7CiAgICAgaWYgKG1fc2VsZWN0aW9uRGF0YSkKLSAgICAgICAgcmV0dXJu
IG1fc2VsZWN0aW9uRGF0YS0+aGFzVGV4dCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzTWFya3Vw
KCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNVUklMaXN0KCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5o
YXNJbWFnZSgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzVW5rbm93blR5cGVEYXRhKCk7CisgICAg
ICAgIHJldHVybiBtX3NlbGVjdGlvbkRhdGEtPmhhc1RleHQoKSB8fCBtX3NlbGVjdGlvbkRhdGEt
Pmhhc01hcmt1cCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzVVJJTGlzdCgpIHx8IG1fc2VsZWN0
aW9uRGF0YS0+aGFzSW1hZ2UoKTsKICAgICByZXR1cm4gIXBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXMobV9uYW1lKS5pc0VtcHR5KCk7CiB9CiAKLVZlY3Rv
cjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYp
CitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyhjb25zdCBT
dHJpbmcmIG9yaWdpbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyB3ZWJraXQub3JnL2Iv
MTc3NjMzOiBbR1RLXSBNb3ZlIHRvIG5ldyBQYXN0ZWJvYXJkIEFQSQotICAgIHJldHVybiB7IH07
CisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJl
dHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnR5cGVzU2Fm
ZUZvckRPTVRvUmVhZEFuZFdyaXRlKG1fbmFtZSwgb3JpZ2luKTsKIH0KIAogVmVjdG9yPFN0cmlu
Zz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCkBAIC0zMzYsMTUg
KzM0MSwxOCBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2Fm
ZUJpbmRpbmdzKCkKICAgICAgICAgdHlwZXMuYXBwZW5kKCJVUkwiX3MpOwogICAgIH0KIAotICAg
IGZvciAoYXV0byYga2V5IDogbV9zZWxlY3Rpb25EYXRhLT51bmtub3duVHlwZXMoKS5rZXlzKCkp
Ci0gICAgICAgIHR5cGVzLmFwcGVuZChrZXkpOwotCiAgICAgcmV0dXJuIHR5cGVzOwogfQogCiBT
dHJpbmcgUGFzdGVib2FyZDo6cmVhZE9yaWdpbigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsg
Ly8gd2Via2l0Lm9yZy9iLzE3NzYzMzogW0dUS10gTW92ZSB0byBuZXcgUGFzdGVib2FyZCBBUEkK
KyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgLy8g
RklYTUU6IGNhY2hlIGN1c3RvbSBkYXRhPworICAgIGlmIChhdXRvIGJ1ZmZlciA9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEJ1ZmZlckZyb21DbGlwYm9h
cmQobV9uYW1lLCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Z3RrVHlwZSgpKSkKKyAgICAgICAgcmV0
dXJuIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmcm9tU2hhcmVkQnVmZmVyKCpidWZmZXIpLm9yaWdp
bigpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzY4LDcgKzM3Niw2IEBAIFN0cmluZyBQ
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICBjYXNlIENsaXBi
b2FyZERhdGFUeXBlVGV4dDoKICAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+dGV4dCgp
OwogICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOgotICAgICAgICByZXR1cm4gbV9z
ZWxlY3Rpb25EYXRhLT51bmtub3duVHlwZURhdGEodHlwZSk7CiAgICAgY2FzZSBDbGlwYm9hcmRE
YXRhVHlwZUltYWdlOgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNzYsOSArMzgzLDE1IEBA
IFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICBy
ZXR1cm4geyB9OwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0
YShjb25zdCBTdHJpbmcmKQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURh
dGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIHdlYmtp
dC5vcmcvYi8xNzc2MzM6IFtHVEtdIE1vdmUgdG8gbmV3IFBhc3RlYm9hcmQgQVBJCisgICAgaWYg
KG1fc2VsZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIC8vIEZJWE1FOiBj
YWNoZSBjdXN0b20gZGF0YT8KKyAgICBpZiAoYXV0byBidWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRCdWZmZXJGcm9tQ2xpcGJvYXJkKG1fbmFt
ZSwgUGFzdGVib2FyZEN1c3RvbURhdGE6Omd0a1R5cGUoKSkpCisgICAgICAgIHJldHVybiBQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTo6ZnJvbVNoYXJlZEJ1ZmZlcigqYnVmZmVyKS5yZWFkU3RyaW5nSW5D
dXN0b21EYXRhKHR5cGUpOworCiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzg4LDggKzQwMSwx
MSBAQCBQYXN0ZWJvYXJkOjpGaWxlQ29udGVudFN0YXRlIFBhc3RlYm9hcmQ6OmZpbGVDb250ZW50
U3RhdGUoKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5maWxlbmFtZXMoKS5pc0Vt
cHR5KCkgPyBGaWxlQ29udGVudFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0YSA6IEZpbGVDb250ZW50
U3RhdGU6Ok1heUNvbnRhaW5GaWxlUGF0aHM7CiAKICAgICBhdXRvIHR5cGVzID0gcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlcyhtX25hbWUpOwotICAgIGlm
ICh0eXBlcy5jb250YWlucygidGV4dC91cmktbGlzdCJfcykpCi0gICAgICAgIHJldHVybiBGaWxl
Q29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhzOworICAgIGlmICh0eXBlcy5jb250YWlu
cygidGV4dC91cmktbGlzdCJfcykpIHsKKyAgICAgICAgYXV0byBmaWxlUGF0aHMgPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRGaWxlUGF0aHNGcm9tQ2xp
cGJvYXJkKG1fbmFtZSk7CisgICAgICAgIGlmICghZmlsZVBhdGhzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBGaWxlQ29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhzOworICAg
IH0KIAogICAgIGF1dG8gcmVzdWx0ID0gdHlwZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IFN0cmlu
ZyYgdHlwZSkgewogICAgICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlKHR5cGUpOwpAQCAtNDAxLDggKzQxNywxMiBAQCB2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlTWFya3VwKGNvbnN0IFN0cmluZyYpCiB7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVDdXN0b21EYXRhKGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4mKQordm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURhdGEoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21E
YXRhPiYgZGF0YSkKIHsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKQorICAgICAgICByZXR1cm47
CisKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRl
Q3VzdG9tRGF0YShkYXRhLCBtX25hbWUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNv
bnN0IENvbG9yJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxl
Y3Rpb25EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRh
LmNwcAppbmRleCAxMDYwNTUxN2QwMTkuLmVhNGU0Y2RlZTU1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcApAQCAtMTIwLDggKzEyMCw4IEBAIHZv
aWQgU2VsZWN0aW9uRGF0YTo6Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKQogICAgIGNsZWFyVVJJ
TGlzdCgpOwogICAgIGNsZWFyVVJMKCk7CiAgICAgY2xlYXJJbWFnZSgpOworICAgIGNsZWFyQ3Vz
dG9tRGF0YSgpOwogCi0gICAgbV91bmtub3duVHlwZURhdGEuY2xlYXIoKTsKICAgICBtX2NhblNt
YXJ0UmVwbGFjZSA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nl
bGVjdGlvbkRhdGEuaAppbmRleCAxYjg1OGVmOWRlZTUuLmI4YjE0OGNlY2UzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5oCkBAIC0xOSw2ICsxOSw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAgLTYyLDE0ICs2MywxNCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICB2b2lkIGNs
ZWFySW1hZ2UoKSB7IG1faW1hZ2UgPSBudWxscHRyOyB9CiAKLSAgICB2b2lkIHNldFVua25vd25U
eXBlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkgeyBtX3Vua25v
d25UeXBlRGF0YS5zZXQodHlwZSwgZGF0YSk7IH0KLSAgICBTdHJpbmcgdW5rbm93blR5cGVEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QgeyByZXR1cm4gbV91bmtub3duVHlwZURhdGEuZ2V0
KHR5cGUpOyB9Ci0gICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIHVua25vd25UeXBl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5rbm93blR5cGVEYXRhOyB9Ci0gICAgYm9vbCBoYXNVbmtu
b3duVHlwZURhdGEoKSBjb25zdCB7IHJldHVybiAhbV91bmtub3duVHlwZURhdGEuaXNFbXB0eSgp
OyB9Ci0KICAgICB2b2lkIHNldENhblNtYXJ0UmVwbGFjZShib29sIGNhblNtYXJ0UmVwbGFjZSkg
eyBtX2NhblNtYXJ0UmVwbGFjZSA9IGNhblNtYXJ0UmVwbGFjZTsgfQogICAgIGJvb2wgY2FuU21h
cnRSZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5TbWFydFJlcGxhY2U7IH0KIAorICAgIHZv
aWQgc2V0Q3VzdG9tRGF0YShSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikgeyBtX2N1c3RvbURh
dGEgPSBXVEZNb3ZlKGJ1ZmZlcik7IH0KKyAgICBTaGFyZWRCdWZmZXIqIGN1c3RvbURhdGEoKSBj
b25zdCB7IHJldHVybiBtX2N1c3RvbURhdGEuZ2V0KCk7IH0KKyAgICBib29sIGhhc0N1c3RvbURh
dGEoKSBjb25zdCB7IHJldHVybiAhIW1fY3VzdG9tRGF0YTsgfQorICAgIHZvaWQgY2xlYXJDdXN0
b21EYXRhKCkgeyBtX2N1c3RvbURhdGEgPSBudWxscHRyOyB9CisKICAgICB2b2lkIGNsZWFyQWxs
KCk7CiAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygpOwogCkBAIC04MCw4ICs4MSw4
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJpTGlzdDsKICAgICBWZWN0b3I8U3RyaW5nPiBt
X2ZpbGVuYW1lczsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gbV91bmtub3duVHlwZURhdGE7CiAgICAgYm9vbCBtX2NhblNtYXJ0UmVwbGFj
ZSB7IGZhbHNlIH07CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9jdXN0b21EYXRhOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlZDc0ZmQ4YzU3OGYuLmYxMDc0
OTg2ODEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wNS0xNiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSB0
byBuZXcgUGFzdGVib2FyZCBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NzYzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEVuYWJsZSBjdXN0b20gcGFzdGVib2FyZCBkYXRhLgorCisgICAgICAgICog
U2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlcy5oOgorICAgICAgICAqIFNoYXJlZC9n
dGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNl
bGVjdGlvbkRhdGE+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFNlbGVj
dGlvbkRhdGE+OjpkZWNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJv
eHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6d3JpdGUpOiBBZGQgc3VwcG9ydCBmb3Igd3JpdGluZyBV
UkkgbGlzdCBhbmQgY3VzdG9tIGRhdGEuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9DbGlwYm9h
cmRHdGs0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjp3cml0ZSk6IERpdHRvLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRX
cml0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVDdXN0b21E
YXRhKToKKwogMjAyMC0wNS0xNiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbR1RLXSBEbyBub3QgbGVhayBwYWdlcyBjcmVhdGVkIGJ5IHdpbmRvdy5v
cGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmF1
bHRWYWx1ZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmYXVsdFZh
bHVlcy5oCmluZGV4IGIzMjU1YjJjNzhkNS4uYTgyZjZiNTYzNWI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXMuaApAQCAtMjM4LDEx
ICsyMzgsMTUgQEAKICNkZWZpbmUgREVGQVVMVF9EQVRBTElTVF9FTEVNRU5UX0VOQUJMRUQgdHJ1
ZQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwg
UExBVEZPUk0oR1RLKQogI2RlZmluZSBERUZBVUxUX0NVU1RPTV9QQVNURUJPQVJEX0RBVEFfRU5B
QkxFRCB0cnVlCi0jZGVmaW5lIERFRkFVTFRfQVNZTkNfQ0xJUEJPQVJEX0FQSV9FTkFCTEVEIHRy
dWUKICNlbHNlCiAjZGVmaW5lIERFRkFVTFRfQ1VTVE9NX1BBU1RFQk9BUkRfREFUQV9FTkFCTEVE
IGZhbHNlCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBERUZBVUxUX0FT
WU5DX0NMSVBCT0FSRF9BUElfRU5BQkxFRCB0cnVlCisjZWxzZQogI2RlZmluZSBERUZBVUxUX0FT
WU5DX0NMSVBCT0FSRF9BUElfRU5BQkxFRCBmYWxzZQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCmluZGV4IGZjOGViNWRkNzEzNS4u
MzkyNzU0NDYwMTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvQXJndW1l
bnRDb2RlcnNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9Bcmd1bWVudENv
ZGVyc0d0ay5jcHAKQEAgLTkyLDEwICs5MiwxMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8U2VsZWN0
aW9uRGF0YT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTZWxlY3Rpb25EYXRhJgog
ICAgIGlmIChoYXNJbWFnZSkKICAgICAgICAgZW5jb2RlSW1hZ2UoZW5jb2RlciwgKnNlbGVjdGlv
bi5pbWFnZSgpKTsKIAotICAgIGJvb2wgaGFzVW5rbm93blR5cGVEYXRhID0gc2VsZWN0aW9uLmhh
c1Vua25vd25UeXBlRGF0YSgpOwotICAgIGVuY29kZXIgPDwgaGFzVW5rbm93blR5cGVEYXRhOwot
ICAgIGlmIChoYXNVbmtub3duVHlwZURhdGEpCi0gICAgICAgIGVuY29kZXIgPDwgc2VsZWN0aW9u
LnVua25vd25UeXBlcygpOworICAgIGJvb2wgaGFzQ3VzdG9tRGF0YSA9IHNlbGVjdGlvbi5oYXND
dXN0b21EYXRhKCk7CisgICAgZW5jb2RlciA8PCBoYXNDdXN0b21EYXRhOworICAgIGlmIChoYXND
dXN0b21EYXRhKQorICAgICAgICBlbmNvZGVyIDw8IFJlZlB0cjxTaGFyZWRCdWZmZXI+KHNlbGVj
dGlvbi5jdXN0b21EYXRhKCkpOwogCiAgICAgYm9vbCBjYW5TbWFydFJlcGxhY2UgPSBzZWxlY3Rp
b24uY2FuU21hcnRSZXBsYWNlKCk7CiAgICAgZW5jb2RlciA8PCBjYW5TbWFydFJlcGxhY2U7CkBA
IC0xNTUsMTcgKzE1NSwxNCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U2VsZWN0aW9uRGF0YT46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZWxlY3Rpb25EYXRhJiBzZWxlYwogICAgICAgICBzZWxl
Y3Rpb24uc2V0SW1hZ2UoaW1hZ2UuZ2V0KCkpOwogICAgIH0KIAotICAgIGJvb2wgaGFzVW5rbm93
blR5cGVEYXRhOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVW5rbm93blR5cGVEYXRhKSkK
KyAgICBib29sIGhhc0N1c3RvbURhdGE7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNDdXN0
b21EYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChoYXNVbmtub3duVHlwZURh
dGEpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdW5rbm93blR5cGVzOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVua25vd25UeXBlcykpCisgICAgaWYgKGhhc0N1c3Rv
bURhdGEpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOworICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGJ1ZmZlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgYXV0byBlbmQgPSB1bmtub3duVHlwZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoYXV0
byBpdCA9IHVua25vd25UeXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICBzZWxlY3Rpb24uc2V0VW5rbm93blR5cGVEYXRhKGl0LT5rZXksIGl0LT52YWx1ZSk7CisgICAg
ICAgIHNlbGVjdGlvbi5zZXRDdXN0b21EYXRhKFJlZjxTaGFyZWRCdWZmZXI+KCpidWZmZXIpKTsK
ICAgICB9CiAKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCmluZGV4IGMxNDRlNzkxN2M5Ny4uN2JiMjI4
MDM0MmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJk
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94
eS5jcHAKQEAgLTc5LDYgKzc5LDcgQEAgV2ViUHJvY2Vzc1Byb3h5KiBXZWJQYXN0ZWJvYXJkUHJv
eHk6OndlYlByb2Nlc3NQcm94eUZvckNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW8KIAogI2lmICFQ
TEFURk9STShDT0NPQSkKIAorI2lmICFQTEFURk9STShHVEspCiB2b2lkIFdlYlBhc3RlYm9hcmRQ
cm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoSVBDOjpDb25uZWN0aW9uJiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8
U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOwpAQCAtODgsNiArODksNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVD
dXN0b21EYXRhKElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOgogewogICAg
IGNvbXBsZXRpb25IYW5kbGVyKDApOwogfQorI2VuZGlmCiAKIHZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5OjphbGxQYXN0ZWJvYXJkSXRlbUluZm8oSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5n
JiwgaW50NjRfdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxWZWN0b3I8V2ViQ29y
ZTo6UGFzdGVib2FyZEl0ZW1JbmZvPj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAKaW5kZXggZTM5MTVj
ZjA0NTI5Li45MTNkMzM5OTRlYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9DbGlwYm9hcmRHdGszLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
Q2xpcGJvYXJkR3RrMy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIldlYlBhc3Rl
Ym9hcmRQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0ckd0ay5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFzdGVib2FyZEN1c3RvbURhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlbGVj
dGlvbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KQEAgLTE1NSwxMyArMTU2LDE1IEBAIHN0cnVjdCBXcml0ZUFzeW5jRGF0YSB7
CiAgICAgQ2xpcGJvYXJkJiBjbGlwYm9hcmQ7CiB9OwogCi1lbnVtIENsaXBib2FyZFRhcmdldFR5
cGUgeyBNYXJrdXAsIFRleHQsIEltYWdlLCBTbWFydFBhc3RlIH07CitlbnVtIENsaXBib2FyZFRh
cmdldFR5cGUgeyBNYXJrdXAsIFRleHQsIEltYWdlLCBVUklMaXN0LCBTbWFydFBhc3RlLCBDdXN0
b20gfTsKIAogdm9pZCBDbGlwYm9hcmQ6OndyaXRlKFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRh
PiYmIHNlbGVjdGlvbkRhdGEpCiB7CiAgICAgU2V0Rm9yU2NvcGU8V2ViRnJhbWVQcm94eSo+IGZy
YW1lV3JpdGluZ1RvQ2xpcGJvYXJkKG1fZnJhbWVXcml0aW5nVG9DbGlwYm9hcmQsIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6c2luZ2xldG9uKCkucHJpbWFyeVNlbGVjdGlvbk93bmVyKCkpOwogCiAgICAg
R1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKGd0a190YXJnZXRfbGlzdF9u
ZXcobnVsbHB0ciwgMCkpOworICAgIGlmIChzZWxlY3Rpb25EYXRhLT5oYXNVUklMaXN0KCkpCisg
ICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwgZ2RrX2F0b21faW50ZXJuX3N0
YXRpY19zdHJpbmcoInRleHQvdXJpLWxpc3QiKSwgMCwgQ2xpcGJvYXJkVGFyZ2V0VHlwZTo6VVJJ
TGlzdCk7CiAgICAgaWYgKHNlbGVjdGlvbkRhdGEtPmhhc01hcmt1cCgpKQogICAgICAgICBndGtf
dGFyZ2V0X2xpc3RfYWRkKGxpc3QuZ2V0KCksIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5n
KCJ0ZXh0L2h0bWwiKSwgMCwgQ2xpcGJvYXJkVGFyZ2V0VHlwZTo6TWFya3VwKTsKICAgICBpZiAo
c2VsZWN0aW9uRGF0YS0+aGFzSW1hZ2UoKSkKQEAgLTE3MCw2ICsxNzMsOCBAQCB2b2lkIENsaXBi
b2FyZDo6d3JpdGUoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSkK
ICAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobGlzdC5nZXQoKSwgQ2xp
cGJvYXJkVGFyZ2V0VHlwZTo6VGV4dCk7CiAgICAgaWYgKHNlbGVjdGlvbkRhdGEtPmNhblNtYXJ0
UmVwbGFjZSgpKQogICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QuZ2V0KCksIGdka19h
dG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0
cGFzdGUiKSwgMCwgQ2xpcGJvYXJkVGFyZ2V0VHlwZTo6U21hcnRQYXN0ZSk7CisgICAgaWYgKHNl
bGVjdGlvbkRhdGEtPmhhc0N1c3RvbURhdGEoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2Fk
ZChsaXN0LmdldCgpLCBnZGtfYXRvbV9pbnRlcm5fc3RhdGljX3N0cmluZyhXZWJDb3JlOjpQYXN0
ZWJvYXJkQ3VzdG9tRGF0YTo6Z3RrVHlwZSgpKSwgMCwgQ2xpcGJvYXJkVGFyZ2V0VHlwZTo6Q3Vz
dG9tKTsKIAogICAgIGludCBudW1iZXJPZlRhcmdldHM7CiAgICAgR3RrVGFyZ2V0RW50cnkqIHRh
YmxlID0gZ3RrX3RhcmdldF90YWJsZV9uZXdfZnJvbV9saXN0KGxpc3QuZ2V0KCksICZudW1iZXJP
ZlRhcmdldHMpOwpAQCAtMTk5LDkgKzIwNCwyMCBAQCB2b2lkIENsaXBib2FyZDo6d3JpdGUoUmVm
PFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSkKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIENsaXBib2FyZFRhcmdldFR5cGU6OlVSSUxpc3Q6IHsKKyAgICAgICAgICAgICAgICBDU3Ry
aW5nIHVyaUxpc3QgPSBzZWxlY3Rpb25EYXRhLnVyaUxpc3QoKS51dGY4KCk7CisgICAgICAgICAg
ICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb24sIGdka19hdG9tX2ludGVybl9z
dGF0aWNfc3RyaW5nKCJ0ZXh0L3VyaS1saXN0IiksIDgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Z3VjaGFyKj4odXJpTGlzdC5kYXRhKCkpLCB1cmlMaXN0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xpcGJvYXJkVGFy
Z2V0VHlwZTo6U21hcnRQYXN0ZToKICAgICAgICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFf
c2V0X3RleHQoc2VsZWN0aW9uLCAiIiwgLTEpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDbGlwYm9hcmRUYXJnZXRUeXBlOjpDdXN0b206CisgICAgICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvbkRhdGEuaGFzQ3VzdG9tRGF0YSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8qIGJ1ZmZlciA9IHNlbGVjdGlvbkRhdGEuY3VzdG9tRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbiwgZ2RrX2F0b21faW50
ZXJuX3N0YXRpY19zdHJpbmcoV2ViQ29yZTo6UGFzdGVib2FyZEN1c3RvbURhdGE6Omd0a1R5cGUo
KSksIDgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFyKj4oYnVmZmVyLT5kYXRhKCkpLCBi
dWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAgICBbXShHdGtDbGlwYm9hcmQqIGNs
aXBib2FyZCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9DbGlwYm9hcmRHdGs0LmNwcAppbmRleCA4MjFjYzZjZmVhNDguLjEzZDM3MmZiNDM1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcApAQCAt
MjksNiArMjksNyBAQAogI2lmIFVTRShHVEs0KQogCiAjaW5jbHVkZSAiV2ViUGFzdGVib2FyZFBy
b3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2VsZWN0aW9uRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtMTY0LDYgKzE2NSwxMiBAQCB2b2lkIENs
aXBib2FyZDo6d3JpdGUoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0
YSkKICAgICAgICAgcHJvdmlkZXJzLmFwcGVuZChnZGtfY29udGVudF9wcm92aWRlcl9uZXdfZm9y
X2J5dGVzKCJ0ZXh0L2h0bWwiLCBieXRlcy5nZXQoKSkpOwogICAgIH0KIAorICAgIGlmIChzZWxl
Y3Rpb25EYXRhLT5oYXNVUklMaXN0KCkpIHsKKyAgICAgICAgQ1N0cmluZyB1cmlMaXN0ID0gc2Vs
ZWN0aW9uRGF0YS0+dXJpTGlzdCgpLnV0ZjgoKTsKKyAgICAgICAgR1JlZlB0cjxHQnl0ZXM+IGJ5
dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3KHVyaUxpc3QuZGF0YSgpLCB1cmlMaXN0Lmxlbmd0
aCgpKSk7CisgICAgICAgIHByb3ZpZGVycy5hcHBlbmQoZ2RrX2NvbnRlbnRfcHJvdmlkZXJfbmV3
X2Zvcl9ieXRlcygidGV4dC91cmktbGlzdCIsIGJ5dGVzLmdldCgpKSk7CisgICAgfQorCiAgICAg
aWYgKHNlbGVjdGlvbkRhdGEtPmhhc0ltYWdlKCkpIHsKICAgICAgICAgR1JlZlB0cjxHZGtQaXhi
dWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihzZWxlY3Rpb25EYXRhLT5pbWFnZSgpLT5nZXRHZGtQaXhi
dWYoKSk7CiAgICAgICAgIHByb3ZpZGVycy5hcHBlbmQoZ2RrX2NvbnRlbnRfcHJvdmlkZXJfbmV3
X3R5cGVkKEdES19UWVBFX1BJWEJVRiwgcGl4YnVmLmdldCgpKSk7CkBAIC0xNzcsNiArMTg0LDEx
IEBAIHZvaWQgQ2xpcGJvYXJkOjp3cml0ZShSZWY8V2ViQ29yZTo6U2VsZWN0aW9uRGF0YT4mJiBz
ZWxlY3Rpb25EYXRhKQogICAgICAgICBwcm92aWRlcnMuYXBwZW5kKGdka19jb250ZW50X3Byb3Zp
ZGVyX25ld19mb3JfYnl0ZXMoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0ZSIs
IGJ5dGVzLmdldCgpKSk7CiAgICAgfQogCisgICAgaWYgKHNlbGVjdGlvbkRhdGEtPmhhc0N1c3Rv
bURhdGEoKSkgeworICAgICAgICBHUmVmUHRyPEdCeXRlcz4gYnl0ZXMgPSBzZWxlY3Rpb25EYXRh
LT5jdXN0b21EYXRhKCktPmNyZWF0ZUdCeXRlcygpOworICAgICAgICBwcm92aWRlcnMuYXBwZW5k
KGdka19jb250ZW50X3Byb3ZpZGVyX25ld19mb3JfYnl0ZXMoV2ViQ29yZTo6UGFzdGVib2FyZEN1
c3RvbURhdGE6Omd0a1R5cGUoKSwgYnl0ZXMuZ2V0KCkpKTsKKyAgICB9CisKICAgICBpZiAocHJv
dmlkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBjbGVhcigpOwogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlH
dGsuY3BwCmluZGV4IDBhMTMyZWM1NTIzMi4uYzZkZDQ2MjViMGRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcApAQCAt
MzAsOCArMzAsMTIgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmgiCiAj
aW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgogI2luY2x1ZGUgIldlYlNlbGVjdGlvbkRhdGEuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bhc3Rl
Ym9hcmRDdXN0b21EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSXRlbUluZm8u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtODQsNCAr
ODgsNTkgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmRpZERlc3Ryb3lGcmFtZShXZWJGcmFt
ZVByb3h5KiBmcmFtZSkKICAgICAgICAgbV9wcmltYXJ5U2VsZWN0aW9uT3duZXIgPSBudWxscHRy
OwogfQogCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5k
V3JpdGUoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgU3RyaW5nJiBvcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byYgY2xpcGJvYXJkID0gQ2xpcGJv
YXJkOjpnZXQocGFzdGVib2FyZE5hbWUpOworICAgIGNsaXBib2FyZC5yZWFkQnVmZmVyKFBhc3Rl
Ym9hcmRDdXN0b21EYXRhOjpndGtUeXBlKCksIFsmY2xpcGJvYXJkLCBvcmlnaW4sIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKElQQzo6U2hhcmVkQnVmZmVy
RGF0YVJlZmVyZW5jZSYmIGJ1ZmZlcikgbXV0YWJsZSB7CisgICAgICAgIExpc3RIYXNoU2V0PFN0
cmluZz4gZG9tVHlwZXM7CisgICAgICAgIGlmIChhdXRvIGRhdGFCdWZmZXIgPSBidWZmZXIuYnVm
ZmVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gY3VzdG9tRGF0YSA9IFBhc3RlYm9hcmRDdXN0b21E
YXRhOjpmcm9tU2hhcmVkQnVmZmVyKCpkYXRhQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChjdXN0
b21EYXRhLm9yaWdpbigpID09IG9yaWdpbikgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
dHlwZSA6IGN1c3RvbURhdGEub3JkZXJlZFR5cGVzKCkpCisgICAgICAgICAgICAgICAgICAgIGRv
bVR5cGVzLmFkZCh0eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNs
aXBib2FyZC5mb3JtYXRzKFtkb21UeXBlcyA9IFdURk1vdmUoZG9tVHlwZXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShWZWN0b3I8U3RyaW5nPiYmIGZv
cm1hdHMpIG11dGFibGUgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmb3JtYXQgOiBm
b3JtYXRzKSB7CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YTo6Z3RrVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgIGlmIChQYXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUo
Zm9ybWF0KSkKKyAgICAgICAgICAgICAgICAgICAgZG9tVHlwZXMuYWRkKGZvcm1hdCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvcHlUb1ZlY3Rvcihk
b21UeXBlcykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OndyaXRlQ3VzdG9tRGF0YShJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBWZWN0b3I8UGFz
dGVib2FyZEN1c3RvbURhdGE+JiBkYXRhLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGlmIChkYXRhLmlzRW1wdHkoKSB8fCBkYXRhLnNpemUoKSA+IDEpIHsKKyAgICAgICAgLy8g
V2UgZG9uJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIGN1c3RvbSBpdGVtIGluIHRoZSBjbGlwYm9h
cmQuCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYXV0byBzZWxlY3Rpb25EYXRhID0gU2VsZWN0aW9uRGF0YTo6Y3JlYXRlKCk7Cisg
ICAgY29uc3QgYXV0byYgY3VzdG9tRGF0YSA9IGRhdGFbMF07CisgICAgY3VzdG9tRGF0YS5mb3JF
YWNoUGxhdGZvcm1TdHJpbmdPckJ1ZmZlcihbJnNlbGVjdGlvbkRhdGFdIChhdXRvJiB0eXBlLCBh
dXRvJiBzdHJpbmdPckJ1ZmZlcikgeworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxTdHJpbmc+KHN0cmluZ09yQnVmZmVyKSkgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gInRl
eHQvcGxhaW4iX3MpCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS0+c2V0VGV4dChXVEY6
OmdldDxTdHJpbmc+KHN0cmluZ09yQnVmZmVyKSk7CisgICAgICAgICAgICBlbHNlIGlmICh0eXBl
ID09ICJ0ZXh0L2h0bWwiX3MpCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS0+c2V0TWFy
a3VwKFdURjo6Z2V0PFN0cmluZz4oc3RyaW5nT3JCdWZmZXIpKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHR5cGUgPT0gInRleHQvdXJpLWxpc3QiX3MpCisgICAgICAgICAgICAgICAgc2VsZWN0aW9u
RGF0YS0+c2V0VVJJTGlzdChXVEY6OmdldDxTdHJpbmc+KHN0cmluZ09yQnVmZmVyKSk7CisgICAg
ICAgIH0KKyAgICB9KTsKKworICAgIGlmIChjdXN0b21EYXRhLmhhc1NhbWVPcmlnaW5DdXN0b21E
YXRhKCkgfHwgIWN1c3RvbURhdGEub3JpZ2luKCkuaXNFbXB0eSgpKQorICAgICAgICBzZWxlY3Rp
b25EYXRhLT5zZXRDdXN0b21EYXRhKGN1c3RvbURhdGEuY3JlYXRlU2hhcmVkQnVmZmVyKCkpOwor
CisgICAgQ2xpcGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLndyaXRlKFdURk1vdmUoc2VsZWN0
aW9uRGF0YSkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKDApOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQK
</data>
<flag name="review"
          id="414977"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>