<?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>216067</bug_id>
          
          <creation_ts>2020-09-01 21:49:50 -0700</creation_ts>
          <short_desc>Web Inspector: Uncaught Exception: Missing node for given nodeId</short_desc>
          <delta_ts>2020-09-21 16:09:24 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>data:text/html;,&lt;div&gt;&lt;/div&gt;text</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>bburg</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1684721</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-09-01 21:49:50 -0700</bug_when>
    <thetext>Uncaught Exception in Web Inspector.

Steps to Reproduce:
1. What were you doing? Include setup or other preparations to reproduce the exception.
2. Include explicit, accurate, and minimal steps taken. Do not include extraneous or irrelevant steps.
3. What did you expect to have happen? What actually happened?

Uncaught Exceptions:
-----------------------
 - Missing node for given nodeId (at Connection.js:162:29)
    _dispatchResponseToPromise @ Connection.js:162:29
    _dispatchResponse @ Connection.js:124:44
    dispatch @ Connection.js:77:35
    dispatchMessageFromTarget @ TargetManager.js:176:39
    dispatchMessageFromTarget @ TargetObserver.js:47:51
    _dispatchEvent @ Connection.js:210:26
    dispatch @ Connection.js:79:32
    dispatch @ InspectorBackend.js:232:52
    ? @ MessageDispatcher.js:42:34
-----------------------

Notes:
Inspected URL:        https://www.facebook.com/
Loading completed:    true
Frontend User Agent:  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko)

Release MiniBrowser at r266337.

Deleted a node in inspector while inspecting facebook.com stream page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686575</commentid>
    <comment_count>1</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-08 09:11:39 -0700</bug_when>
    <thetext>I couldn&apos;t reproduce it on facebook.com home feed page (when logged in). What is a facebook.com stream page? Is deleting any node throws an exception?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686626</commentid>
    <comment_count>2</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-08 10:51:54 -0700</bug_when>
    <thetext>Never mind, I just reproduced this on facebook.com home feed running ToT WebKit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686642</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-08 11:28:45 -0700</bug_when>
    <thetext>&lt;rdar://problem/68520144&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686795</commentid>
    <comment_count>4</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-08 16:19:11 -0700</bug_when>
    <thetext>Bisecting. I&apos;ve reproduced the bug on r248445 (Aug 8, 2019) and I haven&apos;t gone further back. It doesn&apos;t seem like a recent regression. It is possible though that something has changed recently that makes this error resurface more frequently.

I&apos;m stopping bisecting for now. It&apos;s tricky to bisect because the facebook.com home feed is different every time it takes several nodes to remove before the error happens. I&apos;ll try to make a reduction page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687520</commentid>
    <comment_count>5</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-10 13:27:09 -0700</bug_when>
    <thetext>Reduction:
data:text/html;,&lt;div&gt;&lt;/div&gt;text

Steps:
1. Inspect &lt;div&gt;
2. Press Delete key

Notes:
Exception aside, everything works as expected. After deleting &lt;div&gt;, its parent gets selected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687587</commentid>
    <comment_count>6</comment_count>
      <attachid>408492</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-10 16:22:29 -0700</bug_when>
    <thetext>Created attachment 408492
Patch

There are so many places in our codebase where we omit `catch` on promises. When they fail, the uncaught exceptions are often quite useless :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687609</commentid>
    <comment_count>7</comment_count>
      <attachid>408492</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-10 17:34:02 -0700</bug_when>
    <thetext>Comment on attachment 408492
Patch

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

&gt; Source/WebInspectorUI/ChangeLog:9
&gt; +        Handle rejected promise. `WI.RemoteObject.resolveNode` is expected to fail when the domNode is destroyed.

Why is it that `resolveNode` is even getting called when a node is removed?  I would think that when the node is removed we would automatically select a different node that we know will exist (i.e. not a child), meaning that we shouldn&apos;t encounter any errors.

&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:271
&gt; +            if (domNode.destroyed)
&gt; +                return;

Should this also be done in the other callbacks too?

&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:273
&gt; +            console.error(&quot;Cannot resolve node.&quot;, errorMessage, domNode);

Please use `console.assert(false, ...)` so that this is stripped from shipped software.

If you really want to include error info, please use `WI.reportInternalError` so that if/when this is hit the uncaught exception view is shown, making it much more likely for an engineer to file a bug about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687786</commentid>
    <comment_count>8</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-11 12:31:00 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #7)
&gt; Comment on attachment 408492 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=408492&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/ChangeLog:9
&gt; &gt; +        Handle rejected promise. `WI.RemoteObject.resolveNode` is expected to fail when the domNode is destroyed.
&gt; 
&gt; Why is it that `resolveNode` is even getting called when a node is removed? 
&gt; I would think that when the node is removed we would automatically select a
&gt; different node that we know will exist (i.e. not a child), meaning that we
&gt; shouldn&apos;t encounter any errors.

This&apos;s a good question, indeed.

DOMNodeDetailsSidebarPanel.prototype._refreshProperties is called with a stale `this.domNode`:

    WI.RemoteObject.resolveNode
    --- async ---
    _refreshProperties (DOMNodeDetailsSidebarPanel.js:262)
    layout (DOMNodeDetailsSidebarPanel.js:169)
    _layoutSubtree (View.js:293)
    updateLayout (View.js:159)
    updateLayoutIfNeeded (View.js:167)
    shown (SidebarPanel.js:100)
    selectedSidebarPanel (Sidebar.js:138)
    removeSidebarPanel (Sidebar.js:101)
    showDetailsSidebarPanels (ContentBrowserTabContentView.js:199)
    _contentBrowserCurrentRepresentedObjectsDidChange (ContentBrowserTabContentView.js:323)
    dispatch (Object.js:165)
    dispatchEventToListeners (Object.js:172)
    (anonymous function) (ContentBrowser.js:96)
    _execute (Debouncer.js:132)
    (anonymous function) (Debouncer.js:75)

A combination of removeSidebarPanel (Sidebar.js:101) and showDetailsSidebarPanels (ContentBrowserTabContentView.js:199)
logic causes the selected sidebar to change before setting a new domNode. It should be possible to avoid unnecessary
`resolveNode` call but it looks like this change is going to be fairly involved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687813</commentid>
    <comment_count>9</comment_count>
      <attachid>408560</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-11 14:47:07 -0700</bug_when>
    <thetext>Created attachment 408560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687815</commentid>
    <comment_count>10</comment_count>
      <attachid>408492</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-11 14:50:15 -0700</bug_when>
    <thetext>Comment on attachment 408492
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:271
&gt;&gt; +                return;
&gt; 
&gt; Should this also be done in the other callbacks too?

I removed this from my latest patch as it shouldn&apos;t attempt to resolve destroyed nodes any more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687816</commentid>
    <comment_count>11</comment_count>
      <attachid>408560</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-11 14:55:17 -0700</bug_when>
    <thetext>Comment on attachment 408560
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/ContentBrowserTabContentView.js:180
&gt; +        let selectedSidebarPanelCandidate = null;

NIT: we normally use naming like `sidebarPanelToSelect`

&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:265
&gt; +        }).catch((errorMessage) =&gt; {

NIT: we normally just use `error`

&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:270
&gt; +            console.assert(false, &quot;Cannot resolve node.&quot;, errorMessage, domNode);

Are you still able to reliably hit this?

&gt; Source/WebInspectorUI/UserInterface/Views/Sidebar.js:88
&gt; +    removeSidebarPanel(sidebarPanelOrIdentifierOrIndex, suppressSelectionChange)

rather than have this as an optional argument, please make this into an `options = {}` so that if we need to add additional optional arguments in the future it&apos;s not nearly as difficult

&gt; Source/WebInspectorUI/UserInterface/Views/Sidebar.js:99
&gt; +        if (this._selectedSidebarPanel === sidebarPanel &amp;&amp; !suppressSelectionChange) {

NIT: I&apos;d put the `!suppressSelectionChange` first so that it avoids the extra work if true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687817</commentid>
    <comment_count>12</comment_count>
      <attachid>408560</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-11 15:00:41 -0700</bug_when>
    <thetext>Comment on attachment 408560
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:270
&gt;&gt; +            console.assert(false, &quot;Cannot resolve node.&quot;, errorMessage, domNode);
&gt; 
&gt; Are you still able to reliably hit this?

No. However, defining catch statements for promises helps greatly with debugging. I&apos;d like to keep this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687822</commentid>
    <comment_count>13</comment_count>
      <attachid>408561</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-11 15:15:34 -0700</bug_when>
    <thetext>Created attachment 408561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688763</commentid>
    <comment_count>14</comment_count>
      <attachid>408561</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-15 11:18:47 -0700</bug_when>
    <thetext>Comment on attachment 408561
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/ContentBrowserTabContentView.js:196
&gt; -                    WI.detailsSidebar.selectedSidebarPanel = sidebarPanel;
&gt; +                    sidebarPanelToSelect = sidebarPanel;

Thinking about it a bit more, I think the old logic here is fine as the logic inside `WI.SidebarPanel.prototype.removeSidebarPanel` only runs if the given `WI.SidebarPanel` is in fact selected, meaning that if this code runs the given `WI.SidebarPanel` will never be selected.  As such, I think we can leave this as is.

&gt; Source/WebInspectorUI/UserInterface/Views/ContentBrowserTabContentView.js:200
&gt; +                WI.detailsSidebar.removeSidebarPanel(sidebarPanel, {suppressSelectionChange: true});

I think this now means that when a sidebar panel is removed, we always select the first sidebar panel.  Do we want that?  Should we move some of the logic inside `WI.SidebarPanel.prototype.removeSidebarPanel` to here so that we can try to determine the closest remaining `WI.SidebarPanel` once we&apos;re done removing all the ones that can no longer `inspect`?

&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:268
&gt; +            if (this.domNode !== domNode)
&gt; +                return;

Should this also be done in the other callbacks too?

&gt; Source/WebInspectorUI/UserInterface/Views/Sidebar.js:102
&gt; +        if (!options.suppressSelectionChange &amp;&amp; this._selectedSidebarPanel === sidebarPanel) {
&gt; +            let index = this._sidebarPanels.indexOf(sidebarPanel);
&gt;              this.selectedSidebarPanel = this._sidebarPanels[index - 1] || this._sidebarPanels[index + 1] || null;
&gt;          }

Looking at all the callsites, do we even need to have any of this code?  Every caller already has logic to set `selectedSidebarPanel` in the same function that they call `removeSidebarPanel`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689006</commentid>
    <comment_count>15</comment_count>
      <attachid>408561</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-15 23:24:43 -0700</bug_when>
    <thetext>Comment on attachment 408561
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/ContentBrowserTabContentView.js:196
&gt;&gt; +                    sidebarPanelToSelect = sidebarPanel;
&gt; 
&gt; Thinking about it a bit more, I think the old logic here is fine as the logic inside `WI.SidebarPanel.prototype.removeSidebarPanel` only runs if the given `WI.SidebarPanel` is in fact selected, meaning that if this code runs the given `WI.SidebarPanel` will never be selected.  As such, I think we can leave this as is.

While you&apos;re correct, the goal of this change was to make the code easier to follow. When `WI.detailsSidebar.selectedSidebarPanel = ...` is outside of the loop, it&apos;s abundantly clear that this&apos;s going to run only once.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/DOMNodeDetailsSidebarPanel.js:268
&gt;&gt; +                return;
&gt; 
&gt; Should this also be done in the other callbacks too?

The early return is already present in the `then` callback (line 239). By &quot;other callbacks&quot;, did you mean in every single WI.RemoteObject.resolveNode?..

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/Sidebar.js:102
&gt;&gt;          }
&gt; 
&gt; Looking at all the callsites, do we even need to have any of this code?  Every caller already has logic to set `selectedSidebarPanel` in the same function that they call `removeSidebarPanel`.

Good point, I&apos;ll remove it.
Besides, I think the concept of selecting a neighboring panel is a bit odd — I can&apos;t think of a case in Web Inspector when it&apos;s more useful than simply selecting the 1st panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690451</commentid>
    <comment_count>16</comment_count>
      <attachid>409303</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-21 12:54:25 -0700</bug_when>
    <thetext>Created attachment 409303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690452</commentid>
    <comment_count>17</comment_count>
      <attachid>409304</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2020-09-21 12:56:05 -0700</bug_when>
    <thetext>Created attachment 409304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690545</commentid>
    <comment_count>18</comment_count>
      <attachid>409304</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-21 15:29:14 -0700</bug_when>
    <thetext>Comment on attachment 409304
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690570</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-21 16:09:24 -0700</bug_when>
    <thetext>Committed r267379: &lt;https://trac.webkit.org/changeset/267379&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409304.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408492</attachid>
            <date>2020-09-10 16:22:29 -0700</date>
            <delta_ts>2020-09-11 14:47:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>1968</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDJkYzFiOWY2ODdiZi4uN2E5YmIyMjY0YjkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wOS0xMCAgTmlr
aXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBVbmNhdWdodCBFeGNlcHRpb246IE1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNjcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTIwMTQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEhhbmRsZSByZWplY3RlZCBwcm9taXNlLiBgV0kuUmVt
b3RlT2JqZWN0LnJlc29sdmVOb2RlYCBpcyBleHBlY3RlZCB0byBmYWlsIHdoZW4gdGhlIGRvbU5v
ZGUgaXMgZGVzdHJveWVkLgorICAgICAgICBXaGVuIGRvbU5vZGUgaXNuJ3QgZGVzdHJveWVkLCBk
aXNwbGF5IGEgdXNlZnVsIGVycm9yIHdpdGggYSByZWxldmFudCBsb2NhdGlvbiBpbnN0ZWFkIG9m
IGEgZ2VuZXJpYyBDb25uZWN0aW9uLmpzIGVycm9yLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9WaWV3cy9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKKwogMjAyMC0wOS0wNSAgR3Jl
ZyBEb29saXR0bGUgIDxncjNnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
WEk6IEF1ZGl0OiBvYnR1c2UgZXJyb3Igc3RyaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9ET01Ob2RlRGV0
YWlsc1NpZGViYXJQYW5lbC5qcwppbmRleCBmZTg3MTlkMjYzNDkuLjQ1ZDJmYTYwYTFiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9k
ZURldGFpbHNTaWRlYmFyUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanMKQEAgLTI2Miw2ICsy
NjIsMTUgQEAgV0kuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwgPSBjbGFzcyBET01Ob2RlRGV0
YWlsc1NpZGViYXJQYW5lbCBleHRlbmRzIFdJLkRPTUQKICAgICAgICAgICAgIGNvbnN0IGFyZ3Mg
PSB1bmRlZmluZWQ7CiAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZVByZXZpZXcgPSBmYWxzZTsK
ICAgICAgICAgICAgIG9iamVjdC5jYWxsRnVuY3Rpb24oaW5zcGVjdGVkUGFnZV9ub2RlX2NvbGxl
Y3RQcm90b3R5cGVzLCBhcmdzLCBnZW5lcmF0ZVByZXZpZXcsIG5vZGVQcm90b3R5cGVzUmVhZHku
YmluZCh0aGlzKSk7CisgICAgICAgIH0pLmNhdGNoKChlcnJvck1lc3NhZ2UpID0+IHsKKyAgICAg
ICAgICAgIC8vIEJhaWwgaWYgdGhlIERPTSBub2RlIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSB3YWl0
aW5nIGZvciB0aGUgYXN5bmMgcmVzcG9uc2UuCisgICAgICAgICAgICBpZiAodGhpcy5kb21Ob2Rl
ICE9PSBkb21Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KGRvbU5vZGUuZGVzdHJveWVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgY29uc29sZS5lcnJvcigiQ2Fubm90IHJlc29sdmUgbm9kZS4iLCBlcnJvck1lc3NhZ2UsIGRv
bU5vZGUpOwogICAgICAgICB9KTsKIAogICAgICAgICBmdW5jdGlvbiBub2RlUHJvdG90eXBlc1Jl
YWR5KGVycm9yLCBvYmplY3QsIHdhc1Rocm93bikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408560</attachid>
            <date>2020-09-11 14:47:07 -0700</date>
            <delta_ts>2020-09-11 15:15:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>5684</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDJkYzFiOWY2ODdiZi4uNGIwZDg4MzEwMmVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMC0wOS0xMSAgTmlr
aXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBVbmNhdWdodCBFeGNlcHRpb246IE1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNjcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTIwMTQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJv
d3NlclRhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuQ29udGVudEJyb3dzZXJUYWJDb250
ZW50Vmlldy5wcm90b3R5cGUuc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzKToKKyAgICAgICAgUmV3
cml0ZSBgc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzYCBpbiBzdWNoIHdheSB0aGF0IGNhdXNlcyBu
byBtb3JlIHRoYW4gb25lIGNoYW5nZSBvZiBzZWxlY3RlZFNpZGViYXJQYW5lbC4KKyAgICAgICAg
UHJldmlvdXNseSwgYHJlbW92ZVNpZGViYXJQYW5lbGAgd291bGQgY2F1c2UgdGhlIGNoYW5nZSBv
ZiBzZWxlY3RlZFNpZGViYXJQYW5lbCwgcmVzdWx0aW5nIGluIHNob3dpbmcKKyAgICAgICAgYSBw
YW5lbCB3aXRoIG91dGRhdGVkIGB0aGlzLmRvbU5vZGVgLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9WaWV3cy9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKKyAgICAgICAgRGlzcGxh
eSBhIHVzZWZ1bCBlcnJvciB3aXRoIGEgcmVsZXZhbnQgbG9jYXRpb24gaW5zdGVhZCBvZiBhIGdl
bmVyaWMgQ29ubmVjdGlvbi5qcyBlcnJvci4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvU2lkZWJhci5qczoKKyAgICAgICAgKFdJLlNpZGViYXIucHJvdG90eXBlLnJlbW92ZVNpZGVi
YXJQYW5lbCk6CisKIDIwMjAtMDktMDUgIEdyZWcgRG9vbGl0dGxlICA8Z3IzZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQVhJOiBBdWRpdDogb2J0dXNlIGVycm9yIHN0cmlu
Z3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NvbnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJvd3NlclRhYkNvbnRlbnRWaWV3LmpzCmluZGV4
IGJjM2Q1MThhZmY5ZS4uYmI4ZGU2YmVlMjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJvd3NlclRhYkNvbnRlbnRWaWV3Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRC
cm93c2VyVGFiQ29udGVudFZpZXcuanMKQEAgLTE3Nyw2ICsxNzcsNyBAQCBXSS5Db250ZW50QnJv
d3NlclRhYkNvbnRlbnRWaWV3ID0gY2xhc3MgQ29udGVudEJyb3dzZXJUYWJDb250ZW50VmlldyBl
eHRlbmRzIFdJLgogICAgICAgICB0aGlzLl9pZ25vcmVEZXRhaWxzU2lkZWJhclBhbmVsQ29sbGFw
c2VkRXZlbnQgPSB0cnVlOwogCiAgICAgICAgIGxldCBoaWRkZW5TaWRlYmFyUGFuZWxzID0gMDsK
KyAgICAgICAgbGV0IHNlbGVjdGVkU2lkZWJhclBhbmVsQ2FuZGlkYXRlID0gbnVsbDsKIAogICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGV0YWlsc1NpZGViYXJQYW5lbHMubGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgICAgIHZhciBzaWRlYmFyUGFuZWwgPSB0aGlzLmRldGFpbHNTaWRl
YmFyUGFuZWxzW2ldOwpAQCAtMTkyLDE2ICsxOTMsMTkgQEAgV0kuQ29udGVudEJyb3dzZXJUYWJD
b250ZW50VmlldyA9IGNsYXNzIENvbnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBX
SS4KIAogICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0U2VsZWN0ZWREZXRhaWxzU2lkZWJh
clBhbmVsU2V0dGluZy52YWx1ZSA9PT0gc2lkZWJhclBhbmVsLmlkZW50aWZpZXIpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgc2lkZWJhciBwYW5lbCBzZWxlY3Rpb24gaWYg
dGhpcyBzaWRlYmFyIHBhbmVsIHdhcyB0aGUgbGFzdCBvbmUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIu
Ci0gICAgICAgICAgICAgICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVkU2lkZWJhclBh
bmVsID0gc2lkZWJhclBhbmVsOworICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNpZGViYXJQ
YW5lbENhbmRpZGF0ZSA9IHNpZGViYXJQYW5lbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSBzaWRlYmFyIHBhbmVsIGNhbid0
IGluc3BlY3QgdGhlIGN1cnJlbnQgcmVwcmVzZW50ZWQgb2JqZWN0cywgc28gcmVtb3ZlIHRoZSBw
YW5lbCBhbmQgaGlkZSB0aGUgdG9vbGJhciBpdGVtLgotICAgICAgICAgICAgICAgIFdJLmRldGFp
bHNTaWRlYmFyLnJlbW92ZVNpZGViYXJQYW5lbChzaWRlYmFyUGFuZWwpOworICAgICAgICAgICAg
ICAgIGNvbnN0IHN1cHByZXNzU2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBXSS5kZXRhaWxzU2lkZWJhci5yZW1vdmVTaWRlYmFyUGFuZWwoc2lkZWJhclBhbmVsLCBzdXBw
cmVzc1NlbGVjdGlvbkNoYW5nZSk7CiAgICAgICAgICAgICAgICAgaGlkZGVuU2lkZWJhclBhbmVs
cysrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFXSS5kZXRhaWxz
U2lkZWJhci5zZWxlY3RlZFNpZGViYXJQYW5lbCAmJiBXSS5kZXRhaWxzU2lkZWJhci5zaWRlYmFy
UGFuZWxzLmxlbmd0aCkKKyAgICAgICAgaWYgKHNlbGVjdGVkU2lkZWJhclBhbmVsQ2FuZGlkYXRl
KSB7CisgICAgICAgICAgICBXSS5kZXRhaWxzU2lkZWJhci5zZWxlY3RlZFNpZGViYXJQYW5lbCA9
IHNlbGVjdGVkU2lkZWJhclBhbmVsQ2FuZGlkYXRlOworICAgICAgICB9IGVsc2UgaWYgKCFXSS5k
ZXRhaWxzU2lkZWJhci5zZWxlY3RlZFNpZGViYXJQYW5lbCAmJiBXSS5kZXRhaWxzU2lkZWJhci5z
aWRlYmFyUGFuZWxzLmxlbmd0aCkKICAgICAgICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLnNlbGVj
dGVkU2lkZWJhclBhbmVsID0gV0kuZGV0YWlsc1NpZGViYXIuc2lkZWJhclBhbmVsc1swXTsKIAog
ICAgICAgICBpZiAoIVdJLmRldGFpbHNTaWRlYmFyLnNpZGViYXJQYW5lbHMubGVuZ3RoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9k
ZURldGFpbHNTaWRlYmFyUGFuZWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qcwppbmRleCBmZTg3MTlkMjYz
NDkuLmI3Mjk3MDQyYmMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFpbHNTaWRlYmFy
UGFuZWwuanMKQEAgLTI2Miw2ICsyNjIsMTIgQEAgV0kuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFu
ZWwgPSBjbGFzcyBET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbCBleHRlbmRzIFdJLkRPTUQKICAg
ICAgICAgICAgIGNvbnN0IGFyZ3MgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICBjb25zdCBnZW5l
cmF0ZVByZXZpZXcgPSBmYWxzZTsKICAgICAgICAgICAgIG9iamVjdC5jYWxsRnVuY3Rpb24oaW5z
cGVjdGVkUGFnZV9ub2RlX2NvbGxlY3RQcm90b3R5cGVzLCBhcmdzLCBnZW5lcmF0ZVByZXZpZXcs
IG5vZGVQcm90b3R5cGVzUmVhZHkuYmluZCh0aGlzKSk7CisgICAgICAgIH0pLmNhdGNoKChlcnJv
ck1lc3NhZ2UpID0+IHsKKyAgICAgICAgICAgIC8vIEJhaWwgaWYgdGhlIERPTSBub2RlIGNoYW5n
ZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIGZvciB0aGUgYXN5bmMgcmVzcG9uc2UuCisgICAgICAg
ICAgICBpZiAodGhpcy5kb21Ob2RlICE9PSBkb21Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZmFsc2UsICJDYW5ub3QgcmVzb2x2ZSBu
b2RlLiIsIGVycm9yTWVzc2FnZSwgZG9tTm9kZSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGZ1
bmN0aW9uIG5vZGVQcm90b3R5cGVzUmVhZHkoZXJyb3IsIG9iamVjdCwgd2FzVGhyb3duKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2lkZWJh
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NpZGViYXIu
anMKaW5kZXggMWQxZDQ5MjkxNmNjLi4yMGI1OTNiYmY2ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NpZGViYXIuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2lkZWJhci5qcwpAQCAtODUsOSAr
ODUsOSBAQCBXSS5TaWRlYmFyID0gY2xhc3MgU2lkZWJhciBleHRlbmRzIFdJLlZpZXcKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJlbW92ZVNpZGViYXJQYW5lbChzaWRlYmFyUGFuZWxPcklkZW50
aWZpZXJPckluZGV4KQorICAgIHJlbW92ZVNpZGViYXJQYW5lbChzaWRlYmFyUGFuZWxPcklkZW50
aWZpZXJPckluZGV4LCBzdXBwcmVzc1NlbGVjdGlvbkNoYW5nZSkKICAgICB7Ci0gICAgICAgIHZh
ciBzaWRlYmFyUGFuZWwgPSB0aGlzLmZpbmRTaWRlYmFyUGFuZWwoc2lkZWJhclBhbmVsT3JJZGVu
dGlmaWVyT3JJbmRleCk7CisgICAgICAgIGxldCBzaWRlYmFyUGFuZWwgPSB0aGlzLmZpbmRTaWRl
YmFyUGFuZWwoc2lkZWJhclBhbmVsT3JJZGVudGlmaWVyT3JJbmRleCk7CiAgICAgICAgIGlmICgh
c2lkZWJhclBhbmVsKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC05Niw4ICs5Niw4IEBAIFdJ
LlNpZGViYXIgPSBjbGFzcyBTaWRlYmFyIGV4dGVuZHMgV0kuVmlldwogCiAgICAgICAgIHNpZGVi
YXJQYW5lbC5zZWxlY3RlZCA9IGZhbHNlOwogCi0gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFNp
ZGViYXJQYW5lbCA9PT0gc2lkZWJhclBhbmVsKSB7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSB0
aGlzLl9zaWRlYmFyUGFuZWxzLmluZGV4T2Yoc2lkZWJhclBhbmVsKTsKKyAgICAgICAgaWYgKHRo
aXMuX3NlbGVjdGVkU2lkZWJhclBhbmVsID09PSBzaWRlYmFyUGFuZWwgJiYgIXN1cHByZXNzU2Vs
ZWN0aW9uQ2hhbmdlKSB7CisgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9zaWRlYmFyUGFu
ZWxzLmluZGV4T2Yoc2lkZWJhclBhbmVsKTsKICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTaWRl
YmFyUGFuZWwgPSB0aGlzLl9zaWRlYmFyUGFuZWxzW2luZGV4IC0gMV0gfHwgdGhpcy5fc2lkZWJh
clBhbmVsc1tpbmRleCArIDFdIHx8IG51bGw7CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408561</attachid>
            <date>2020-09-11 15:15:34 -0700</date>
            <delta_ts>2020-09-21 12:54:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>5584</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDJkYzFiOWY2ODdiZi4uNGIwZDg4MzEwMmVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAyMC0wOS0xMSAgTmlr
aXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBVbmNhdWdodCBFeGNlcHRpb246IE1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNjcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTIwMTQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJv
d3NlclRhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuQ29udGVudEJyb3dzZXJUYWJDb250
ZW50Vmlldy5wcm90b3R5cGUuc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzKToKKyAgICAgICAgUmV3
cml0ZSBgc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzYCBpbiBzdWNoIHdheSB0aGF0IGNhdXNlcyBu
byBtb3JlIHRoYW4gb25lIGNoYW5nZSBvZiBzZWxlY3RlZFNpZGViYXJQYW5lbC4KKyAgICAgICAg
UHJldmlvdXNseSwgYHJlbW92ZVNpZGViYXJQYW5lbGAgd291bGQgY2F1c2UgdGhlIGNoYW5nZSBv
ZiBzZWxlY3RlZFNpZGViYXJQYW5lbCwgcmVzdWx0aW5nIGluIHNob3dpbmcKKyAgICAgICAgYSBw
YW5lbCB3aXRoIG91dGRhdGVkIGB0aGlzLmRvbU5vZGVgLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9WaWV3cy9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKKyAgICAgICAgRGlzcGxh
eSBhIHVzZWZ1bCBlcnJvciB3aXRoIGEgcmVsZXZhbnQgbG9jYXRpb24gaW5zdGVhZCBvZiBhIGdl
bmVyaWMgQ29ubmVjdGlvbi5qcyBlcnJvci4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvU2lkZWJhci5qczoKKyAgICAgICAgKFdJLlNpZGViYXIucHJvdG90eXBlLnJlbW92ZVNpZGVi
YXJQYW5lbCk6CisKIDIwMjAtMDktMDUgIEdyZWcgRG9vbGl0dGxlICA8Z3IzZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQVhJOiBBdWRpdDogb2J0dXNlIGVycm9yIHN0cmlu
Z3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NvbnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJvd3NlclRhYkNvbnRlbnRWaWV3LmpzCmluZGV4
IGJjM2Q1MThhZmY5ZS4uZTY0ZjEzNWM1MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJvd3NlclRhYkNvbnRlbnRWaWV3Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRC
cm93c2VyVGFiQ29udGVudFZpZXcuanMKQEAgLTE3Nyw2ICsxNzcsNyBAQCBXSS5Db250ZW50QnJv
d3NlclRhYkNvbnRlbnRWaWV3ID0gY2xhc3MgQ29udGVudEJyb3dzZXJUYWJDb250ZW50VmlldyBl
eHRlbmRzIFdJLgogICAgICAgICB0aGlzLl9pZ25vcmVEZXRhaWxzU2lkZWJhclBhbmVsQ29sbGFw
c2VkRXZlbnQgPSB0cnVlOwogCiAgICAgICAgIGxldCBoaWRkZW5TaWRlYmFyUGFuZWxzID0gMDsK
KyAgICAgICAgbGV0IHNpZGViYXJQYW5lbFRvU2VsZWN0ID0gbnVsbDsKIAogICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRoaXMuZGV0YWlsc1NpZGViYXJQYW5lbHMubGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgIHZhciBzaWRlYmFyUGFuZWwgPSB0aGlzLmRldGFpbHNTaWRlYmFyUGFuZWxz
W2ldOwpAQCAtMTkyLDE2ICsxOTMsMTggQEAgV0kuQ29udGVudEJyb3dzZXJUYWJDb250ZW50Vmll
dyA9IGNsYXNzIENvbnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS4KIAogICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0U2VsZWN0ZWREZXRhaWxzU2lkZWJhclBhbmVsU2V0
dGluZy52YWx1ZSA9PT0gc2lkZWJhclBhbmVsLmlkZW50aWZpZXIpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gUmVzdG9yZSB0aGUgc2lkZWJhciBwYW5lbCBzZWxlY3Rpb24gaWYgdGhpcyBzaWRl
YmFyIHBhbmVsIHdhcyB0aGUgbGFzdCBvbmUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuCi0gICAgICAg
ICAgICAgICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVkU2lkZWJhclBhbmVsID0gc2lk
ZWJhclBhbmVsOworICAgICAgICAgICAgICAgICAgICBzaWRlYmFyUGFuZWxUb1NlbGVjdCA9IHNp
ZGViYXJQYW5lbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIFRoZSBzaWRlYmFyIHBhbmVsIGNhbid0IGluc3BlY3QgdGhlIGN1cnJl
bnQgcmVwcmVzZW50ZWQgb2JqZWN0cywgc28gcmVtb3ZlIHRoZSBwYW5lbCBhbmQgaGlkZSB0aGUg
dG9vbGJhciBpdGVtLgotICAgICAgICAgICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLnJlbW92ZVNp
ZGViYXJQYW5lbChzaWRlYmFyUGFuZWwpOworICAgICAgICAgICAgICAgIFdJLmRldGFpbHNTaWRl
YmFyLnJlbW92ZVNpZGViYXJQYW5lbChzaWRlYmFyUGFuZWwsIHtzdXBwcmVzc1NlbGVjdGlvbkNo
YW5nZTogdHJ1ZX0pOwogICAgICAgICAgICAgICAgIGhpZGRlblNpZGViYXJQYW5lbHMrKzsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghV0kuZGV0YWlsc1NpZGViYXIu
c2VsZWN0ZWRTaWRlYmFyUGFuZWwgJiYgV0kuZGV0YWlsc1NpZGViYXIuc2lkZWJhclBhbmVscy5s
ZW5ndGgpCisgICAgICAgIGlmIChzaWRlYmFyUGFuZWxUb1NlbGVjdCkgeworICAgICAgICAgICAg
V0kuZGV0YWlsc1NpZGViYXIuc2VsZWN0ZWRTaWRlYmFyUGFuZWwgPSBzaWRlYmFyUGFuZWxUb1Nl
bGVjdDsKKyAgICAgICAgfSBlbHNlIGlmICghV0kuZGV0YWlsc1NpZGViYXIuc2VsZWN0ZWRTaWRl
YmFyUGFuZWwgJiYgV0kuZGV0YWlsc1NpZGViYXIuc2lkZWJhclBhbmVscy5sZW5ndGgpCiAgICAg
ICAgICAgICBXSS5kZXRhaWxzU2lkZWJhci5zZWxlY3RlZFNpZGViYXJQYW5lbCA9IFdJLmRldGFp
bHNTaWRlYmFyLnNpZGViYXJQYW5lbHNbMF07CiAKICAgICAgICAgaWYgKCFXSS5kZXRhaWxzU2lk
ZWJhci5zaWRlYmFyUGFuZWxzLmxlbmd0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFpbHNT
aWRlYmFyUGFuZWwuanMKaW5kZXggZmU4NzE5ZDI2MzQ5Li5hMzM0MTEwYTZlNzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTU5vZGVEZXRh
aWxzU2lkZWJhclBhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzCkBAIC0yNjIsNiArMjYyLDEy
IEBAIFdJLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsID0gY2xhc3MgRE9NTm9kZURldGFpbHNT
aWRlYmFyUGFuZWwgZXh0ZW5kcyBXSS5ET01ECiAgICAgICAgICAgICBjb25zdCBhcmdzID0gdW5k
ZWZpbmVkOwogICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVQcmV2aWV3ID0gZmFsc2U7CiAgICAg
ICAgICAgICBvYmplY3QuY2FsbEZ1bmN0aW9uKGluc3BlY3RlZFBhZ2Vfbm9kZV9jb2xsZWN0UHJv
dG90eXBlcywgYXJncywgZ2VuZXJhdGVQcmV2aWV3LCBub2RlUHJvdG90eXBlc1JlYWR5LmJpbmQo
dGhpcykpOworICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKKyAgICAgICAgICAgIC8vIEJh
aWwgaWYgdGhlIERPTSBub2RlIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIGZvciB0aGUg
YXN5bmMgcmVzcG9uc2UuCisgICAgICAgICAgICBpZiAodGhpcy5kb21Ob2RlICE9PSBkb21Ob2Rl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
ZmFsc2UsICJDYW5ub3QgcmVzb2x2ZSBub2RlLiIsIGVycm9yLCBkb21Ob2RlKTsKICAgICAgICAg
fSk7CiAKICAgICAgICAgZnVuY3Rpb24gbm9kZVByb3RvdHlwZXNSZWFkeShlcnJvciwgb2JqZWN0
LCB3YXNUaHJvd24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9TaWRlYmFyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvU2lkZWJhci5qcwppbmRleCAxZDFkNDkyOTE2Y2MuLmY4ZDk1NWRkZjYyMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2lkZWJh
ci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TaWRl
YmFyLmpzCkBAIC04NSw5ICs4NSw5IEBAIFdJLlNpZGViYXIgPSBjbGFzcyBTaWRlYmFyIGV4dGVu
ZHMgV0kuVmlldwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVtb3ZlU2lkZWJhclBhbmVsKHNp
ZGViYXJQYW5lbE9ySWRlbnRpZmllck9ySW5kZXgpCisgICAgcmVtb3ZlU2lkZWJhclBhbmVsKHNp
ZGViYXJQYW5lbE9ySWRlbnRpZmllck9ySW5kZXgsIG9wdGlvbnMgPSB7fSkKICAgICB7Ci0gICAg
ICAgIHZhciBzaWRlYmFyUGFuZWwgPSB0aGlzLmZpbmRTaWRlYmFyUGFuZWwoc2lkZWJhclBhbmVs
T3JJZGVudGlmaWVyT3JJbmRleCk7CisgICAgICAgIGxldCBzaWRlYmFyUGFuZWwgPSB0aGlzLmZp
bmRTaWRlYmFyUGFuZWwoc2lkZWJhclBhbmVsT3JJZGVudGlmaWVyT3JJbmRleCk7CiAgICAgICAg
IGlmICghc2lkZWJhclBhbmVsKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC05Niw4ICs5Niw4
IEBAIFdJLlNpZGViYXIgPSBjbGFzcyBTaWRlYmFyIGV4dGVuZHMgV0kuVmlldwogCiAgICAgICAg
IHNpZGViYXJQYW5lbC5zZWxlY3RlZCA9IGZhbHNlOwogCi0gICAgICAgIGlmICh0aGlzLl9zZWxl
Y3RlZFNpZGViYXJQYW5lbCA9PT0gc2lkZWJhclBhbmVsKSB7Ci0gICAgICAgICAgICB2YXIgaW5k
ZXggPSB0aGlzLl9zaWRlYmFyUGFuZWxzLmluZGV4T2Yoc2lkZWJhclBhbmVsKTsKKyAgICAgICAg
aWYgKCFvcHRpb25zLnN1cHByZXNzU2VsZWN0aW9uQ2hhbmdlICYmIHRoaXMuX3NlbGVjdGVkU2lk
ZWJhclBhbmVsID09PSBzaWRlYmFyUGFuZWwpIHsKKyAgICAgICAgICAgIGxldCBpbmRleCA9IHRo
aXMuX3NpZGViYXJQYW5lbHMuaW5kZXhPZihzaWRlYmFyUGFuZWwpOwogICAgICAgICAgICAgdGhp
cy5zZWxlY3RlZFNpZGViYXJQYW5lbCA9IHRoaXMuX3NpZGViYXJQYW5lbHNbaW5kZXggLSAxXSB8
fCB0aGlzLl9zaWRlYmFyUGFuZWxzW2luZGV4ICsgMV0gfHwgbnVsbDsKICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409303</attachid>
            <date>2020-09-21 12:54:25 -0700</date>
            <delta_ts>2020-09-21 12:56:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>5498</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDJkYzFiOWY2ODdiZi4uZWMxYTBiMGEyMmZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wOS0yMSAgTmlr
aXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBVbmNhdWdodCBFeGNlcHRpb246IE1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNjcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTIwMTQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJv
d3NlclRhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuQ29udGVudEJyb3dzZXJUYWJDb250
ZW50Vmlldy5wcm90b3R5cGUuc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzKToKKyAgICAgICAgUmV3
cml0ZSBgc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzYCBpbiBzdWNoIHdheSB0aGF0IGNhdXNlcyBu
byBtb3JlIHRoYW4gb25lIGNoYW5nZSBvZiBzZWxlY3RlZFNpZGViYXJQYW5lbC4KKyAgICAgICAg
UHJldmlvdXNseSwgYHJlbW92ZVNpZGViYXJQYW5lbGAgd291bGQgY2F1c2UgdGhlIGNoYW5nZSBv
ZiBzZWxlY3RlZFNpZGViYXJQYW5lbCwgcmVzdWx0aW5nIGluIHNob3dpbmcKKyAgICAgICAgYSBw
YW5lbCB3aXRoIG91dGRhdGVkIGB0aGlzLmRvbU5vZGVgLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9WaWV3cy9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKKyAgICAgICAgRGlzcGxh
eSBhIHVzZWZ1bCBlcnJvciB3aXRoIGEgcmVsZXZhbnQgbG9jYXRpb24gaW5zdGVhZCBvZiBhIGdl
bmVyaWMgQ29ubmVjdGlvbi5qcyBlcnJvci4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvU2lkZWJhci5qczoKKyAgICAgICAgKFdJLlNpZGViYXIucHJvdG90eXBlLnJlbW92ZVNpZGVi
YXJQYW5lbCk6CisgICAgICAgIEFmdGVyIHJlbW92aW5nIGEgcGFuZWwsIGRvbid0IHNlbGVjdCB0
aGUgbmVhcmVzdCBzaWRlYmFyLiBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSB1c2VmdWwgY2Fz
ZSBmb3IgaXQuCisgICAgICAgIFRoZSBzZWxlY3RlZCBwYW5lbCBpcyBkZXRlcm1pbmVkIGF0IHRo
ZSByZW1vdmVTaWRlYmFyUGFuZWwgY2FsbHNpdGVzLgorCiAyMDIwLTA5LTA1ICBHcmVnIERvb2xp
dHRsZSAgPGdyM2dAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFYSTogQXVk
aXQ6IG9idHVzZSBlcnJvciBzdHJpbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJvd3NlclRhYkNvbnRlbnRWaWV3LmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudEJyb3dzZXJU
YWJDb250ZW50Vmlldy5qcwppbmRleCBiYzNkNTE4YWZmOWUuLmIwYjBiMmIwNDc4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudEJy
b3dzZXJUYWJDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9Db250ZW50QnJvd3NlclRhYkNvbnRlbnRWaWV3LmpzCkBAIC0xNzcsNiAr
MTc3LDcgQEAgV0kuQ29udGVudEJyb3dzZXJUYWJDb250ZW50VmlldyA9IGNsYXNzIENvbnRlbnRC
cm93c2VyVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS4KICAgICAgICAgdGhpcy5faWdub3JlRGV0
YWlsc1NpZGViYXJQYW5lbENvbGxhcHNlZEV2ZW50ID0gdHJ1ZTsKIAogICAgICAgICBsZXQgaGlk
ZGVuU2lkZWJhclBhbmVscyA9IDA7CisgICAgICAgIGxldCBzaWRlYmFyUGFuZWxUb1NlbGVjdCA9
IG51bGw7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRldGFpbHNTaWRlYmFy
UGFuZWxzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgc2lkZWJhclBhbmVsID0gdGhp
cy5kZXRhaWxzU2lkZWJhclBhbmVsc1tpXTsKQEAgLTE5Miw3ICsxOTMsNyBAQCBXSS5Db250ZW50
QnJvd3NlclRhYkNvbnRlbnRWaWV3ID0gY2xhc3MgQ29udGVudEJyb3dzZXJUYWJDb250ZW50Vmll
dyBleHRlbmRzIFdJLgogCiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RTZWxlY3RlZERl
dGFpbHNTaWRlYmFyUGFuZWxTZXR0aW5nLnZhbHVlID09PSBzaWRlYmFyUGFuZWwuaWRlbnRpZmll
cikgewogICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBzaWRlYmFyIHBhbmVsIHNl
bGVjdGlvbiBpZiB0aGlzIHNpZGViYXIgcGFuZWwgd2FzIHRoZSBsYXN0IG9uZSBzZWxlY3RlZCBi
eSB0aGUgdXNlci4KLSAgICAgICAgICAgICAgICAgICAgV0kuZGV0YWlsc1NpZGViYXIuc2VsZWN0
ZWRTaWRlYmFyUGFuZWwgPSBzaWRlYmFyUGFuZWw7CisgICAgICAgICAgICAgICAgICAgIHNpZGVi
YXJQYW5lbFRvU2VsZWN0ID0gc2lkZWJhclBhbmVsOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHNpZGViYXIgcGFuZWwgY2Fu
J3QgaW5zcGVjdCB0aGUgY3VycmVudCByZXByZXNlbnRlZCBvYmplY3RzLCBzbyByZW1vdmUgdGhl
IHBhbmVsIGFuZCBoaWRlIHRoZSB0b29sYmFyIGl0ZW0uCkBAIC0yMDEsNyArMjAyLDkgQEAgV0ku
Q29udGVudEJyb3dzZXJUYWJDb250ZW50VmlldyA9IGNsYXNzIENvbnRlbnRCcm93c2VyVGFiQ29u
dGVudFZpZXcgZXh0ZW5kcyBXSS4KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IGlmICghV0kuZGV0YWlsc1NpZGViYXIuc2VsZWN0ZWRTaWRlYmFyUGFuZWwgJiYgV0kuZGV0YWls
c1NpZGViYXIuc2lkZWJhclBhbmVscy5sZW5ndGgpCisgICAgICAgIGlmIChzaWRlYmFyUGFuZWxU
b1NlbGVjdCkKKyAgICAgICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVkU2lkZWJhclBh
bmVsID0gc2lkZWJhclBhbmVsVG9TZWxlY3Q7CisgICAgICAgIGVsc2UgaWYgKCFXSS5kZXRhaWxz
U2lkZWJhci5zZWxlY3RlZFNpZGViYXJQYW5lbCAmJiBXSS5kZXRhaWxzU2lkZWJhci5zaWRlYmFy
UGFuZWxzLmxlbmd0aCkKICAgICAgICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVkU2lk
ZWJhclBhbmVsID0gV0kuZGV0YWlsc1NpZGViYXIuc2lkZWJhclBhbmVsc1swXTsKIAogICAgICAg
ICBpZiAoIVdJLmRldGFpbHNTaWRlYmFyLnNpZGViYXJQYW5lbHMubGVuZ3RoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFp
bHNTaWRlYmFyUGFuZWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qcwppbmRleCBmZTg3MTlkMjYzNDkuLmEz
MzQxMTBhNmU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwu
anMKQEAgLTI2Miw2ICsyNjIsMTIgQEAgV0kuRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwgPSBj
bGFzcyBET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbCBleHRlbmRzIFdJLkRPTUQKICAgICAgICAg
ICAgIGNvbnN0IGFyZ3MgPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZVBy
ZXZpZXcgPSBmYWxzZTsKICAgICAgICAgICAgIG9iamVjdC5jYWxsRnVuY3Rpb24oaW5zcGVjdGVk
UGFnZV9ub2RlX2NvbGxlY3RQcm90b3R5cGVzLCBhcmdzLCBnZW5lcmF0ZVByZXZpZXcsIG5vZGVQ
cm90b3R5cGVzUmVhZHkuYmluZCh0aGlzKSk7CisgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4g
eworICAgICAgICAgICAgLy8gQmFpbCBpZiB0aGUgRE9NIG5vZGUgY2hhbmdlZCB3aGlsZSB3ZSB3
ZXJlIHdhaXRpbmcgZm9yIHRoZSBhc3luYyByZXNwb25zZS4KKyAgICAgICAgICAgIGlmICh0aGlz
LmRvbU5vZGUgIT09IGRvbU5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIkNhbm5vdCByZXNvbHZlIG5vZGUuIiwgZXJyb3Is
IGRvbU5vZGUpOwogICAgICAgICB9KTsKIAogICAgICAgICBmdW5jdGlvbiBub2RlUHJvdG90eXBl
c1JlYWR5KGVycm9yLCBvYmplY3QsIHdhc1Rocm93bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NpZGViYXIuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TaWRlYmFyLmpzCmluZGV4IDFkMWQ0OTI5MTZj
Yy4uOWQ4ZmY5Y2UxYjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9TaWRlYmFyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NpZGViYXIuanMKQEAgLTg3LDcgKzg3LDcgQEAgV0kuU2lkZWJhciA9
IGNsYXNzIFNpZGViYXIgZXh0ZW5kcyBXSS5WaWV3CiAKICAgICByZW1vdmVTaWRlYmFyUGFuZWwo
c2lkZWJhclBhbmVsT3JJZGVudGlmaWVyT3JJbmRleCkKICAgICB7Ci0gICAgICAgIHZhciBzaWRl
YmFyUGFuZWwgPSB0aGlzLmZpbmRTaWRlYmFyUGFuZWwoc2lkZWJhclBhbmVsT3JJZGVudGlmaWVy
T3JJbmRleCk7CisgICAgICAgIGxldCBzaWRlYmFyUGFuZWwgPSB0aGlzLmZpbmRTaWRlYmFyUGFu
ZWwoc2lkZWJhclBhbmVsT3JJZGVudGlmaWVyT3JJbmRleCk7CiAgICAgICAgIGlmICghc2lkZWJh
clBhbmVsKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC05NiwxMSArOTYsNiBAQCBXSS5TaWRl
YmFyID0gY2xhc3MgU2lkZWJhciBleHRlbmRzIFdJLlZpZXcKIAogICAgICAgICBzaWRlYmFyUGFu
ZWwuc2VsZWN0ZWQgPSBmYWxzZTsKIAotICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRTaWRlYmFy
UGFuZWwgPT09IHNpZGViYXJQYW5lbCkgewotICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5f
c2lkZWJhclBhbmVscy5pbmRleE9mKHNpZGViYXJQYW5lbCk7Ci0gICAgICAgICAgICB0aGlzLnNl
bGVjdGVkU2lkZWJhclBhbmVsID0gdGhpcy5fc2lkZWJhclBhbmVsc1tpbmRleCAtIDFdIHx8IHRo
aXMuX3NpZGViYXJQYW5lbHNbaW5kZXggKyAxXSB8fCBudWxsOwotICAgICAgICB9Ci0KICAgICAg
ICAgdGhpcy5fc2lkZWJhclBhbmVscy5yZW1vdmUoc2lkZWJhclBhbmVsKTsKIAogICAgICAgICBp
ZiAodGhpcy5fbmF2aWdhdGlvbkJhcikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409304</attachid>
            <date>2020-09-21 12:56:05 -0700</date>
            <delta_ts>2020-09-21 16:09:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>5496</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDJkYzFiOWY2ODdiZi4uODM4ZGJiNWY2ODdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wOS0yMSAgTmlr
aXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBVbmNhdWdodCBFeGNlcHRpb246IE1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYwNjcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTIwMTQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50QnJv
d3NlclRhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuQ29udGVudEJyb3dzZXJUYWJDb250
ZW50Vmlldy5wcm90b3R5cGUuc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzKToKKyAgICAgICAgUmV3
cml0ZSBgc2hvd0RldGFpbHNTaWRlYmFyUGFuZWxzYCBpbiBzdWNoIHdheSB0aGF0IGNhdXNlcyBu
byBtb3JlIHRoYW4gb25lIGNoYW5nZSBvZiBzZWxlY3RlZFNpZGViYXJQYW5lbC4KKyAgICAgICAg
UHJldmlvdXNseSwgYHJlbW92ZVNpZGViYXJQYW5lbGAgd291bGQgY2F1c2UgdGhlIGNoYW5nZSBv
ZiBzZWxlY3RlZFNpZGViYXJQYW5lbCwgcmVzdWx0aW5nIGluIHNob3dpbmcKKyAgICAgICAgYSBw
YW5lbCB3aXRoIG91dGRhdGVkIGB0aGlzLmRvbU5vZGVgLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9WaWV3cy9ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbC5qczoKKyAgICAgICAgRGlzcGxh
eSBhIHVzZWZ1bCBlcnJvciB3aXRoIGEgcmVsZXZhbnQgbG9jYXRpb24gaW5zdGVhZCBvZiBhIGdl
bmVyaWMgQ29ubmVjdGlvbi5qcyBlcnJvci4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvU2lkZWJhci5qczoKKyAgICAgICAgKFdJLlNpZGViYXIucHJvdG90eXBlLnJlbW92ZVNpZGVi
YXJQYW5lbCk6CisgICAgICAgIEFmdGVyIHJlbW92aW5nIGEgcGFuZWwsIGRvbid0IHNlbGVjdCB0
aGUgbmVhcmVzdCBwYW5lbC4gVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgdXNlZnVsIGNhc2Ug
Zm9yIGl0LgorICAgICAgICBUaGUgc2VsZWN0ZWQgcGFuZWwgaXMgZGV0ZXJtaW5lZCBhdCB0aGUg
cmVtb3ZlU2lkZWJhclBhbmVsIGNhbGxzaXRlcy4KKwogMjAyMC0wOS0wNSAgR3JlZyBEb29saXR0
bGUgIDxncjNnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBWEk6IEF1ZGl0
OiBvYnR1c2UgZXJyb3Igc3RyaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudEJyb3dzZXJUYWJDb250ZW50Vmlldy5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRCcm93c2VyVGFi
Q29udGVudFZpZXcuanMKaW5kZXggYmMzZDUxOGFmZjllLi5iMGIwYjJiMDQ3OGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRCcm93
c2VyVGFiQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvQ29udGVudEJyb3dzZXJUYWJDb250ZW50Vmlldy5qcwpAQCAtMTc3LDYgKzE3
Nyw3IEBAIFdJLkNvbnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcgPSBjbGFzcyBDb250ZW50QnJv
d3NlclRhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuCiAgICAgICAgIHRoaXMuX2lnbm9yZURldGFp
bHNTaWRlYmFyUGFuZWxDb2xsYXBzZWRFdmVudCA9IHRydWU7CiAKICAgICAgICAgbGV0IGhpZGRl
blNpZGViYXJQYW5lbHMgPSAwOworICAgICAgICBsZXQgc2lkZWJhclBhbmVsVG9TZWxlY3QgPSBu
dWxsOwogCiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kZXRhaWxzU2lkZWJhclBh
bmVscy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIHNpZGViYXJQYW5lbCA9IHRoaXMu
ZGV0YWlsc1NpZGViYXJQYW5lbHNbaV07CkBAIC0xOTIsNyArMTkzLDcgQEAgV0kuQ29udGVudEJy
b3dzZXJUYWJDb250ZW50VmlldyA9IGNsYXNzIENvbnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcg
ZXh0ZW5kcyBXSS4KIAogICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0U2VsZWN0ZWREZXRh
aWxzU2lkZWJhclBhbmVsU2V0dGluZy52YWx1ZSA9PT0gc2lkZWJhclBhbmVsLmlkZW50aWZpZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgc2lkZWJhciBwYW5lbCBzZWxl
Y3Rpb24gaWYgdGhpcyBzaWRlYmFyIHBhbmVsIHdhcyB0aGUgbGFzdCBvbmUgc2VsZWN0ZWQgYnkg
dGhlIHVzZXIuCi0gICAgICAgICAgICAgICAgICAgIFdJLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVk
U2lkZWJhclBhbmVsID0gc2lkZWJhclBhbmVsOworICAgICAgICAgICAgICAgICAgICBzaWRlYmFy
UGFuZWxUb1NlbGVjdCA9IHNpZGViYXJQYW5lbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSBzaWRlYmFyIHBhbmVsIGNhbid0
IGluc3BlY3QgdGhlIGN1cnJlbnQgcmVwcmVzZW50ZWQgb2JqZWN0cywgc28gcmVtb3ZlIHRoZSBw
YW5lbCBhbmQgaGlkZSB0aGUgdG9vbGJhciBpdGVtLgpAQCAtMjAxLDcgKzIwMiw5IEBAIFdJLkNv
bnRlbnRCcm93c2VyVGFiQ29udGVudFZpZXcgPSBjbGFzcyBDb250ZW50QnJvd3NlclRhYkNvbnRl
bnRWaWV3IGV4dGVuZHMgV0kuCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoIVdJLmRldGFpbHNTaWRlYmFyLnNlbGVjdGVkU2lkZWJhclBhbmVsICYmIFdJLmRldGFpbHNT
aWRlYmFyLnNpZGViYXJQYW5lbHMubGVuZ3RoKQorICAgICAgICBpZiAoc2lkZWJhclBhbmVsVG9T
ZWxlY3QpCisgICAgICAgICAgICBXSS5kZXRhaWxzU2lkZWJhci5zZWxlY3RlZFNpZGViYXJQYW5l
bCA9IHNpZGViYXJQYW5lbFRvU2VsZWN0OworICAgICAgICBlbHNlIGlmICghV0kuZGV0YWlsc1Np
ZGViYXIuc2VsZWN0ZWRTaWRlYmFyUGFuZWwgJiYgV0kuZGV0YWlsc1NpZGViYXIuc2lkZWJhclBh
bmVscy5sZW5ndGgpCiAgICAgICAgICAgICBXSS5kZXRhaWxzU2lkZWJhci5zZWxlY3RlZFNpZGVi
YXJQYW5lbCA9IFdJLmRldGFpbHNTaWRlYmFyLnNpZGViYXJQYW5lbHNbMF07CiAKICAgICAgICAg
aWYgKCFXSS5kZXRhaWxzU2lkZWJhci5zaWRlYmFyUGFuZWxzLmxlbmd0aCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTU5vZGVEZXRhaWxz
U2lkZWJhclBhbmVsLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwuanMKaW5kZXggZmU4NzE5ZDI2MzQ5Li5hMzM0
MTEwYTZlNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsLmpz
CkBAIC0yNjIsNiArMjYyLDEyIEBAIFdJLkRPTU5vZGVEZXRhaWxzU2lkZWJhclBhbmVsID0gY2xh
c3MgRE9NTm9kZURldGFpbHNTaWRlYmFyUGFuZWwgZXh0ZW5kcyBXSS5ET01ECiAgICAgICAgICAg
ICBjb25zdCBhcmdzID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgY29uc3QgZ2VuZXJhdGVQcmV2
aWV3ID0gZmFsc2U7CiAgICAgICAgICAgICBvYmplY3QuY2FsbEZ1bmN0aW9uKGluc3BlY3RlZFBh
Z2Vfbm9kZV9jb2xsZWN0UHJvdG90eXBlcywgYXJncywgZ2VuZXJhdGVQcmV2aWV3LCBub2RlUHJv
dG90eXBlc1JlYWR5LmJpbmQodGhpcykpOworICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsK
KyAgICAgICAgICAgIC8vIEJhaWwgaWYgdGhlIERPTSBub2RlIGNoYW5nZWQgd2hpbGUgd2Ugd2Vy
ZSB3YWl0aW5nIGZvciB0aGUgYXN5bmMgcmVzcG9uc2UuCisgICAgICAgICAgICBpZiAodGhpcy5k
b21Ob2RlICE9PSBkb21Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQoZmFsc2UsICJDYW5ub3QgcmVzb2x2ZSBub2RlLiIsIGVycm9yLCBk
b21Ob2RlKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZnVuY3Rpb24gbm9kZVByb3RvdHlwZXNS
ZWFkeShlcnJvciwgb2JqZWN0LCB3YXNUaHJvd24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TaWRlYmFyLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2lkZWJhci5qcwppbmRleCAxZDFkNDkyOTE2Y2Mu
LjlkOGZmOWNlMWIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvU2lkZWJhci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9TaWRlYmFyLmpzCkBAIC04Nyw3ICs4Nyw3IEBAIFdJLlNpZGViYXIgPSBj
bGFzcyBTaWRlYmFyIGV4dGVuZHMgV0kuVmlldwogCiAgICAgcmVtb3ZlU2lkZWJhclBhbmVsKHNp
ZGViYXJQYW5lbE9ySWRlbnRpZmllck9ySW5kZXgpCiAgICAgewotICAgICAgICB2YXIgc2lkZWJh
clBhbmVsID0gdGhpcy5maW5kU2lkZWJhclBhbmVsKHNpZGViYXJQYW5lbE9ySWRlbnRpZmllck9y
SW5kZXgpOworICAgICAgICBsZXQgc2lkZWJhclBhbmVsID0gdGhpcy5maW5kU2lkZWJhclBhbmVs
KHNpZGViYXJQYW5lbE9ySWRlbnRpZmllck9ySW5kZXgpOwogICAgICAgICBpZiAoIXNpZGViYXJQ
YW5lbCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtOTYsMTEgKzk2LDYgQEAgV0kuU2lkZWJh
ciA9IGNsYXNzIFNpZGViYXIgZXh0ZW5kcyBXSS5WaWV3CiAKICAgICAgICAgc2lkZWJhclBhbmVs
LnNlbGVjdGVkID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkU2lkZWJhclBh
bmVsID09PSBzaWRlYmFyUGFuZWwpIHsKLSAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3Np
ZGViYXJQYW5lbHMuaW5kZXhPZihzaWRlYmFyUGFuZWwpOwotICAgICAgICAgICAgdGhpcy5zZWxl
Y3RlZFNpZGViYXJQYW5lbCA9IHRoaXMuX3NpZGViYXJQYW5lbHNbaW5kZXggLSAxXSB8fCB0aGlz
Ll9zaWRlYmFyUGFuZWxzW2luZGV4ICsgMV0gfHwgbnVsbDsKLSAgICAgICAgfQotCiAgICAgICAg
IHRoaXMuX3NpZGViYXJQYW5lbHMucmVtb3ZlKHNpZGViYXJQYW5lbCk7CiAKICAgICAgICAgaWYg
KHRoaXMuX25hdmlnYXRpb25CYXIpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>