<?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>213907</bug_id>
          
          <creation_ts>2020-07-02 16:22:36 -0700</creation_ts>
          <short_desc>Text manipulation should ignore white spaces between nodes</short_desc>
          <delta_ts>2020-07-08 11:30:50 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1668416</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-02 16:22:36 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668419</commentid>
    <comment_count>1</comment_count>
      <attachid>403417</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-02 16:54:47 -0700</bug_when>
    <thetext>Created attachment 403417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668462</commentid>
    <comment_count>2</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-02 19:50:36 -0700</bug_when>
    <thetext>&lt;rdar://problems/65055131&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668657</commentid>
    <comment_count>3</comment_count>
      <attachid>403417</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-03 14:11:37 -0700</bug_when>
    <thetext>Comment on attachment 403417
Patch

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:226
&gt; +                if (iteratorText == &quot;\n&quot;) {

This seems close, but not quite right.

There can be newlines even in non-collapsed ranges in text that uses appropriate styling, such as the default style inside &lt;pre&gt;, so it seems not exactly right to only handle newlines that don’t correspond to an actual node.

There seem to be two different issues here: One issue is that we want to handle newlines appropriately, breaking separate lines into separate strings in the vector. That really needs to be done more generally, without assuming newlines are always generated. The second issue is that we want to strip all non-newline whitespace that is generated by the iterator. That should probably be done with an iterator flag telling it not to generate that whitespace, rather than letting it be generated and then filtering it out because the DOM range is collapsed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668975</commentid>
    <comment_count>4</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-05 22:53:10 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 403417 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403417&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/TextManipulationController.cpp:226
&gt; &gt; +                if (iteratorText == &quot;\n&quot;) {
&gt; 
&gt; This seems close, but not quite right.
&gt; 
&gt; There can be newlines even in non-collapsed ranges in text that uses
&gt; appropriate styling, such as the default style inside &lt;pre&gt;, so it seems not
&gt; exactly right to only handle newlines that don’t correspond to an actual
&gt; node.
&gt; 
In the &lt;pre&gt; case, the line breaks is part of text content, so we want to keep them as special tokens and add them back in manipulated node. In the collapsed range case, we don&apos;t want to add those spaces when creating new text nodes.

&gt; There seem to be two different issues here: One issue is that we want to
&gt; handle newlines appropriately, breaking separate lines into separate strings
&gt; in the vector. That really needs to be done more generally, without assuming
&gt; newlines are always generated. The second issue is that we want to strip all
&gt; non-newline whitespace that is generated by the iterator. That should
&gt; probably be done with an iterator flag telling it not to generate that
&gt; whitespace, rather than letting it be generated and then filtering it out
&gt; because the DOM range is collapsed.

I am not sure I understand the first issue. Reading the TextIterator code, it looks like line breaks are emitted either there is line break in text content of node, or the style of node requires to generate line breaks. As long as the text content is not changed, we can expect line breaks of the first type to be generated, right?

For the second issue, I think we don&apos;t want to strip all non-newline whitespaces... e.g. when space is emitted to replace line break in text content, we want to return &quot;hello world&quot; instead of &quot;helloworld&quot; for &quot;hello \n world&quot;. The white spaces we want to filter out are the ones not generated from the text content of the current position node, and those spaces happen to have collapsed range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669065</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-06 10:45:37 -0700</bug_when>
    <thetext>Just add test cases. We don’t need to convince each other if we have test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669097</commentid>
    <comment_count>6</comment_count>
      <attachid>403606</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-06 12:40:44 -0700</bug_when>
    <thetext>Created attachment 403606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669102</commentid>
    <comment_count>7</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-06 12:45:43 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Just add test cases. We don’t need to convince each other if we have test
&gt; coverage.

I only added one new test as the line break case was covered by existing tests. I updated the ChangeLog with those tests. 
Is there any other test case you think should be added?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669141</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-06 13:34:19 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #4)
&gt; In the &lt;pre&gt; case, the line breaks is part of text content, so we want to
&gt; keep them as special tokens and add them back in manipulated node.

I guess I’m out of my depth. I don’t understand what this means, but I trust it makes sense.

&gt; I am not sure I understand the first issue. Reading the TextIterator code,
&gt; it looks like line breaks are emitted either there is line break in text
&gt; content of node, or the style of node requires to generate line breaks. As
&gt; long as the text content is not changed, we can expect line breaks of the
&gt; first type to be generated, right?

Yes, they simply won’t necessarily be generated as part of a text iterator step with a collapsed range.

&gt; The white spaces we want to filter out are the ones not generated
&gt; from the text content of the current position node, and those spaces happen
&gt; to have collapsed range.

Honestly really confused about this. If text has a newline in it, then space has to be generated because the newline is transformed into a space. If text has a space in it, then the space is part of the text content. I don’t understand how we’d handle these two. But maybe I don’t need to as long as we have enough test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669207</commentid>
    <comment_count>9</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-06 15:58:48 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; (In reply to Sihui Liu from comment #4)
&gt; &gt; In the &lt;pre&gt; case, the line breaks is part of text content, so we want to
&gt; &gt; keep them as special tokens and add them back in manipulated node.
&gt; 
&gt; I guess I’m out of my depth. I don’t understand what this means, but I trust
&gt; it makes sense.
&gt; 
&gt; &gt; I am not sure I understand the first issue. Reading the TextIterator code,
&gt; &gt; it looks like line breaks are emitted either there is line break in text
&gt; &gt; content of node, or the style of node requires to generate line breaks. As
&gt; &gt; long as the text content is not changed, we can expect line breaks of the
&gt; &gt; first type to be generated, right?
&gt; 
&gt; Yes, they simply won’t necessarily be generated as part of a text iterator
&gt; step with a collapsed range.
&gt; 
&gt; &gt; The white spaces we want to filter out are the ones not generated
&gt; &gt; from the text content of the current position node, and those spaces happen
&gt; &gt; to have collapsed range.
&gt; 
&gt; Honestly really confused about this. If text has a newline in it, then space
&gt; has to be generated because the newline is transformed into a space. If text
&gt; has a space in it, then the space is part of the text content. I don’t
&gt; understand how we’d handle these two. But maybe I don’t need to as long as
&gt; we have enough test coverage.

Both cases you mentioned are space generated from text content, so it&apos;s Okay to keep them and view them as normal space. 

Here is more background information: 
We use TextIterator to iterate the whole document and extract text from nodes. We  advance by node by concatenating the text of the same node and parse tokens from the concatenated text.

Client can reply with new tokens to replace the old tokens. To do that, we just create some new text node with new tokens and remove the old text node. Before replacement, we iterate the node with TextIterator again to make sure its content is unchanged after extraction. 

The problem is the sequence of text of one node returned by TextIterator is affected by the range of TextIterator and style of node. 
For example, iterating on &quot;&lt;p&gt;hello&lt;p&gt;webkit&quot; returns {&quot;hello&quot;, &quot;\n&quot;, &quot;webkit&quot;}. TextIterator&apos;s node path is {Text &quot;hello&quot;, nullptr, Text &quot;webkit&quot;}. In our previous implementation, TextManipulationController would think the &quot;content&quot; of Text &quot;webkit&quot; is &quot;\nwebkit&quot; (with the concatenation). Then the content check would fail because iterating on Text &quot;webkit&quot; only returns &quot;webkit&quot;.

In r262778, we tried to solve this by not concatenating text &quot;\n&quot; with node nullptr, and that didn&apos;t work for &quot; &quot; or &quot;\t&quot;. This patch just makes TextManipulationController to ignore all those characters with collapsed range, meaning they are not part of the content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669827</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-08 11:30:49 -0700</bug_when>
    <thetext>Committed r264120: &lt;https://trac.webkit.org/changeset/264120&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403606.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403417</attachid>
            <date>2020-07-02 16:54:47 -0700</date>
            <delta_ts>2020-07-06 12:40:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213907-20200702165446.patch</filename>
            <type>text/plain</type>
            <size>7676</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwZjRhNDczYjM4N2M2
N2UxYmQ5OTYxNmMwZDVlN2U1OTUzYWE3Ni4uOGFhOWY0ODI4NGZiMWQ3NTNjODUxNzc3MjQ5N2I5
YzE0ODU2NjhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIwLTA3LTAyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwZS5jb20+CisKKyAgICAgICAgVGV4dCBtYW5pcHVsYXRpb24g
c2hvdWxkIGlnbm9yZSB3aGl0ZSBzcGFjZXMgYmV0d2VlbiBub2RlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTA3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGV4dCByZXR1cm5lZCBieSBUZXh0SXRl
cmF0b3IgY29udGFpbnMgd2hpdGUgc3BhY2VzIChpbmNsdWRpbmcgdGFicyBhbmQgbGluZSBicmVh
a3MpIHRoYXQgZG8gbm90IGJlbG9uZyB0byAKKyAgICAgICAgY29udGVudCBvZiBub2Rlcy4gVGhv
c2Ugc3BhY2VzIGFyZSBlbWl0dGVkIGJhc2VkIG9uIHN0eWxlIG9mIG5vZGVzLiBGb3IgZXhhbXBs
ZSwgbGluZSBicmVha3MgY2FuIGJlIGVtaXR0ZWQgCisgICAgICAgIGJlZm9yZSBhbmQgYWZ0ZXIg
YmxvY2stbGV2ZWwgZWxlbWVudC4gVGhlc2Ugc3BhY2VzIHNob3VsZCBub3QgYmUgZXh0cmFjdGVk
IGFzIHBhcnQgb2YgdGhlIGNvbnRlbnQsIGJlY2F1c2UgCisgICAgICAgIHRoZXkgY291bGQgY2hh
bmdlIGJhc2VkIG9uIHRoZSBzdHlsZSBvZiBub2RlcyBvciByYW5nZSBvZiBUZXh0SXRlcmF0b3Is
IGFuZCBtYW5pcHVsYXRpb24gZmFpbHMgaWYgY29udGVudCBpcyAKKyAgICAgICAgY2hhbmdlZC4g
V2Ugd2FudCB0byBtYWtlIHN1cmUgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbW9uaXRvcnMg
dGhlIHJlYWwgY29udGVudCBvZiBub2Rlcy4KKworICAgICAgICByMjYyNzc4IHRyaWVkIHNvbHZp
bmcgdGhpcyBpc3N1ZSBieSBleGNsdWRpbmcgdGV4dCB3aXRoIGVtcHR5IG5vZGUgZnJvbSBUZXh0
SXRlcmF0b3IncyByZXN1bHQuIFRoYXQgd29ya2VkIHdpdGgKKyAgICAgICAgbGluZSBicmVhaywg
YnV0IG5vdCBzcGFjZSBhbmQgdGFiLiBTZWUgcmFkYXIgYW5kIG5ldyB0ZXN0LiBUbyBzb2x2ZSB0
aGlzLCBub3cgd2UgZXhjbHVkZSB0ZXh0IHdpdGggemVyby1sZW5ndGgKKyAgICAgICAgcmFuZ2Uu
CisKKyAgICAgICAgVGVzdDogVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRp
b25JZ25vcmVXaGl0ZVNwYWNlc0JldHdlZW5QYXJhZ3JhcGhzCisKKyAgICAgICAgKiBlZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFn
cmFwaENvbnRlbnRJdGVyYXRvcjo6UGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6c2hvdWxkQWR2YW5jZUl0ZXJhdG9y
UGFzdEN1cnJlbnROb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRl
bnRJdGVyYXRvcjo6YWR2YW5jZUl0ZXJhdG9yTm9kZUFuZFVwZGF0ZVRleHQpOgorCiAyMDIwLTA3
LTAyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bQkZD
XSBSZW1vdmUgcmVkdW5kYW50IG1hcmdpbi1ib3JkZXItcGFkZGluZyB3aGVuIGNvbXB1dGluZyB0
aGUgaW50cmluc2ljIHdpZHRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGUxZjg0NDJlYzE0ZDQ3MDQxZjQ3MGE5
ZjFlNzE4ZDRjYTg0NzZkOWYuLjQzOWU4NzdkNmM5YmE3MmQyZjVmNTQ4YTc3OGVhZGQ2ODBjNDRm
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC0xNDcsNyArMTQ3LDYgQEAgY2xhc3MgUGFyYWdyYXBoQ29udGVu
dEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogICAgICAgICA6IG1faXRlcmF0
b3IoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9
LCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQotICAgICAgICAsIG1faXRlcmF0
b3JOb2RlKG1faXRlcmF0b3IuYXRFbmQoKSA/IG51bGxwdHIgOiBjcmVhdGVMaXZlUmFuZ2UobV9p
dGVyYXRvci5yYW5nZSgpKS0+Zmlyc3ROb2RlKCkpCiAgICAgICAgICwgbV9ub2RlKHN0YXJ0LmZp
cnN0Tm9kZSgpKQogICAgICAgICAsIG1fcGFzdEVuZE5vZGUoZW5kLmZpcnN0Tm9kZSgpKQogICAg
IHsKQEAgLTE4OCw3ICsxODcsMTQgQEAgcHVibGljOgogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7
IHJldHVybiAhbV90ZXh0ICYmIG1faXRlcmF0b3IuYXRFbmQoKSAmJiBtX25vZGUgPT0gbV9wYXN0
RW5kTm9kZTsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgc2hvdWxkQWR2YW5jZUl0ZXJhdG9yUGFz
dEN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gIW1faXRlcmF0b3IuYXRFbmQoKSAmJiBtX2l0
ZXJhdG9yTm9kZSA9PSBtX25vZGU7IH0KKyAgICBib29sIHNob3VsZEFkdmFuY2VJdGVyYXRvclBh
c3RDdXJyZW50Tm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9pdGVyYXRvci5hdEVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8qIGl0ZXJhdG9y
Tm9kZSA9IG1faXRlcmF0b3Iubm9kZSgpOworICAgICAgICByZXR1cm4gIWl0ZXJhdG9yTm9kZSB8
fCBpdGVyYXRvck5vZGUgPT0gbV9ub2RlOworICAgIH0KIAogICAgIHZvaWQgYWR2YW5jZU5vZGUo
KQogICAgIHsKQEAgLTIxNSwyOCArMjIxLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gdGV4dDsKICAgICAg
ICAgd2hpbGUgKHNob3VsZEFkdmFuY2VJdGVyYXRvclBhc3RDdXJyZW50Tm9kZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1faXRlcmF0b3Iubm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBp
dGVyYXRvclRleHQgPSBtX2l0ZXJhdG9yLnRleHQoKTsKLSAgICAgICAgICAgICAgICBib29sIGNv
bnRhaW5zRGVsaW1pdGVyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgaXRlcmF0b3JUZXh0Lmxlbmd0aCgpICYmICFjb250YWluc0RlbGlt
aXRlcjsgKytpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbnNEZWxpbWl0ZXIgPSBp
c1Rva2VuRGVsaW1pdGVyKGl0ZXJhdG9yVGV4dFtpbmRleF0pOwotCi0gICAgICAgICAgICAgICAg
aWYgKGNvbnRhaW5zRGVsaW1pdGVyKSB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yVGV4dCA9
IG1faXRlcmF0b3IudGV4dCgpOworICAgICAgICAgICAgaWYgKG1faXRlcmF0b3IucmFuZ2UoKS5j
b2xsYXBzZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvclRleHQgPT0gIlxuIikg
ewogICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1RleHQodGV4dCwgc3RyaW5nQnVpbGRlcik7
CiAgICAgICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKHsgfSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobV9pdGVyYXRvci50ZXh0KCkpOworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0ZXJhdG9yVGV4dCk7CiAKICAgICAgICAgICAgIG1faXRlcmF0b3IuYWR2YW5jZSgpOwot
ICAgICAgICAgICAgbV9pdGVyYXRvck5vZGUgPSBtX2l0ZXJhdG9yLmF0RW5kKCkgPyBudWxscHRy
IDogY3JlYXRlTGl2ZVJhbmdlKG1faXRlcmF0b3IucmFuZ2UoKSktPmZpcnN0Tm9kZSgpOwogICAg
ICAgICB9CiAgICAgICAgIGFwcGVuZFRvVGV4dCh0ZXh0LCBzdHJpbmdCdWlsZGVyKTsKICAgICAg
ICAgbV90ZXh0ID0gdGV4dDsKICAgICB9CiAKICAgICBUZXh0SXRlcmF0b3IgbV9pdGVyYXRvcjsK
LSAgICBSZWZQdHI8Tm9kZT4gbV9pdGVyYXRvck5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9k
ZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9wYXN0RW5kTm9kZTsKICAgICBPcHRpb25hbDxWZWN0b3I8
U3RyaW5nPj4gbV90ZXh0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGU5NGM0NTBkMThiMDhhYjM1Mzc4NjBkNTRhOWI3NGEyMWY5NmMzYzAuLmRj
ZGMzMjRlODM2OGQ0NmJlYjRiODY1ODQ4ZDc5NGI5OTY2MzhiYTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0w
Ny0wMiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGUuY29tPgorCisgICAgICAgIFRleHQgbWFu
aXB1bGF0aW9uIHNob3VsZCBpZ25vcmUgd2hpdGUgc3BhY2VzIGJldHdlZW4gbm9kZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzkwNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisKIDIwMjAtMDctMDIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFu
ZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2MzYyNSk6IHJ1bi1taW5pYnJv
d3NlciBmYWlscyBvbiBtYWMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCBjOGJlNDI1NjhlNTllZWE3
YzA5MjUyYzc2YmZlMTQzNzEyNzE5ZWZmLi43ZTZiNjVjOTIwYWI5YmY2OTNmNDVmOTU3MTljOWRk
YWQxZTc4YjU2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBAIC0yNjc4LDYgKzI2NzgsNDggQEAgVEVT
VChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Bdm9pZEV4dHJhY3Rp
bmdNYW5pcHVsYXRlZFRleHRBZnQKICAgICBFWFBFQ1RfV0tfU1RSRVEoImVuZCIsIGl0ZW1zWzJd
LnRva2Vuc1swXS5jb250ZW50KTsKIH0KIAorVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb25JZ25vcmVXaGl0ZVNwYWNlc0JldHdlZW5QYXJhZ3JhcGhzKQorewor
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFs
bG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBb
d2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCIiCisgICAgICAgICI8c3R5
bGU+IgorICAgICAgICAgICAgIi5pbmxpbmUtYmxvY2sgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
IH0iCisgICAgICAgICAgICAiLmxpc3QtaXRlbSB7IGRpc3BsYXk6IGxpc3QtaXRlbTsgfSIKKyAg
ICAgICAgICAgICIuaGlkZS1hYnNvbHV0ZSB7IGRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBhYnNv
bHV0ZTsgfSIKKyAgICAgICAgICAgICIuZmxvYXQtcmVsYXRpdmUgeyBmbG9hdDogbGVmdDsgcG9z
aXRpb246IHJlbGF0aXZlOyB9IgorICAgICAgICAiPC9zdHlsZT4iCisgICAgICAgICI8dWwgY2xh
c3M9J2Zsb2F0LXJlbGF0aXZlJz4iCisgICAgICAgICIgICA8bGkgY2xhc3M9J2xpc3QtaXRlbSBm
bG9hdC1yZWxhdGl2ZSc+PGEgY2xhc3M9J2lubGluZS1ibG9jayc+aGVsbG88L2E+ICAgICAgICAg
ICA8ZGl2IGNsYXNzPSdoaWRlLWFic29sdXRlJz48YSBjbGFzcz0naW5saW5lLWJsb2NrIGZsb2F0
LXJlbGF0aXZlJz5oaWRlPC9hPjwvZGl2PjwvbGk+IgorICAgICAgICAiICAgPGxpIGNsYXNzPSds
aXN0LWl0ZW0gZmxvYXQtcmVsYXRpdmUnPjxhIGNsYXNzPSdpbmxpbmUtYmxvY2snPndvcmxkPC9h
PjwvbGk+IgorICAgICAgICAiPC91bD4iXTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKwor
ICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dp
dGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgY29tcGxldGlvbjpeeworICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9F
UShpdGVtcy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50
LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiaGVsbG8iLCBpdGVtc1swXS50b2tlbnNbMF0u
Y29udGVudCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQpOwor
CisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRp
b25Gb3JJdGVtczpAWworICAgICAgICBjcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHt7
IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvIiB9fSkuZ2V0KCksCisgICAg
ICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwge3sgaXRlbXNbMV0udG9rZW5zWzBd
LmlkZW50aWZpZXIsIEAiV29ybGQiIH19KS5nZXQoKQorICAgIF0gY29tcGxldGlvbjpeKE5TQXJy
YXk8TlNFcnJvciAqPiAqZXJyb3JzKSB7CisgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZSk7Cit9CisKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgVGV4dE1hbmlwdWxhdGlv
blRva2VuRGVidWdEZXNjcmlwdGlvbikKIHsKICAgICBhdXRvIHRva2VuID0gYWRvcHROUyhbW19X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403606</attachid>
            <date>2020-07-06 12:40:44 -0700</date>
            <delta_ts>2020-07-08 11:30:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213907-20200706124044.patch</filename>
            <type>text/plain</type>
            <size>9983</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzOTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWQ2NmMyMjc1OGQ0ZjVj
YjRjYTg0MjZiYmUzMDA0YmMyMDNlMzJlNS4uMjQ4Zjg4NTg2MWYwYWQxMzc0NTIxMzI3NDc3NDRl
M2Y2NmNkMjA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA3LTA2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwZS5jb20+CisKKyAgICAgICAgVGV4dCBtYW5pcHVsYXRpb24g
c2hvdWxkIGlnbm9yZSB3aGl0ZSBzcGFjZXMgYmV0d2VlbiBub2RlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTA3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGV4dCByZXR1cm5lZCBieSBUZXh0SXRl
cmF0b3IgY29udGFpbnMgd2hpdGUgc3BhY2VzIChpbmNsdWRpbmcgdGFicyBhbmQgbGluZSBicmVh
a3MpIHRoYXQgZG8gbm90IGJlbG9uZyB0byAKKyAgICAgICAgY29udGVudCBvZiBub2Rlcy4gVGhv
c2Ugc3BhY2VzIGFyZSBlbWl0dGVkIGJhc2VkIG9uIHN0eWxlIG9mIG5vZGVzLiBGb3IgZXhhbXBs
ZSwgbGluZSBicmVha3MgY2FuIGJlIGVtaXR0ZWQgCisgICAgICAgIGJlZm9yZSBhbmQgYWZ0ZXIg
YmxvY2stbGV2ZWwgZWxlbWVudC4gVGhlc2Ugc3BhY2VzIHNob3VsZCBub3QgYmUgZXh0cmFjdGVk
IGFzIHBhcnQgb2YgdGhlIGNvbnRlbnQsIGJlY2F1c2UgCisgICAgICAgIHRoZXkgY291bGQgY2hh
bmdlIGJhc2VkIG9uIHRoZSBzdHlsZSBvZiBub2RlcyBvciByYW5nZSBvZiBUZXh0SXRlcmF0b3Is
IGFuZCBtYW5pcHVsYXRpb24gZmFpbHMgaWYgY29udGVudCBpcyAKKyAgICAgICAgY2hhbmdlZC4g
V2Ugd2FudCB0byBtYWtlIHN1cmUgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbW9uaXRvcnMg
dGhlIHJlYWwgY29udGVudCBvZiBub2Rlcy4KKworICAgICAgICByMjYyNzc4IHRyaWVkIHNvbHZp
bmcgdGhpcyBpc3N1ZSBieSBleGNsdWRpbmcgdGV4dCB3aXRoIGVtcHR5IG5vZGUgZnJvbSBUZXh0
SXRlcmF0b3IncyByZXN1bHQuIFRoYXQgd29ya2VkIHdpdGgKKyAgICAgICAgbGluZSBicmVhaywg
YnV0IG5vdCBzcGFjZSBhbmQgdGFiLiBTZWUgcmFkYXIgYW5kIG5ldyB0ZXN0LiBUbyBzb2x2ZSB0
aGlzLCBub3cgd2UgZXhjbHVkZSB0ZXh0IHdpdGggemVyby1sZW5ndGgKKyAgICAgICAgcmFuZ2Uu
IAorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBs
aW5lIGJyZWFrcywgd2hpY2ggaXMgY292ZXJlZCBieToKKyAgICAgICAgVGV4dE1hbmlwdWxhdGlv
bi5TdGFydFRleHRNYW5pcHVsYXRpb25FeHRyYWN0c1Zpc2libGVMaW5lQnJlYWtzSW5UZXh0QXNF
eGNsdWRlZFRva2VucworICAgICAgICBUZXh0TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbkNhbk1lcmdlQ29udGVudEFuZFByZXNlcnZlTGluZUJyZWFrcworICAgICAgICBUZXh0
TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblJlcGxhY2VUd29TaW1wbGVQYXJh
Z3JhcGhzCisKKyAgICAgICAgTmV3IHRlc3Q6IFRleHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uSWdub3JlV2hpdGVTcGFjZXNCZXR3ZWVuUGFyYWdyYXBocworICAgICAgICBN
b2RpZmllZCBleGlzdGluZyB0ZXN0czogVGV4dE1hbmlwdWxhdGlvbi5TdGFydFRleHRNYW5pcHVs
YXRpb25FeHRyYWN0c1ZhbHVlc0J5Tm9kZQorCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50
SXRlcmF0b3I6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6OnNob3VsZEFkdmFuY2VJdGVyYXRvclBhc3RDdXJyZW50
Tm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3I6
OmFkdmFuY2VJdGVyYXRvck5vZGVBbmRVcGRhdGVUZXh0KToKKwogMjAyMC0wNy0wNiAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BF
XSBDaGFuZ2UgdGhlIGNvb2tpZXMgYWNjZXB0IHBvbGljeSB3aGVuIElUUCBpcyBlbmFibGVkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IGQwNTI4NTU2OTNiOWY5ZDE3M2Y2NDUyMWRmMTg4YjY3OGNmYjAyM2IuLmYz
NTI2NzMwNTU4N2QxY2FkMGI1ZjE1YjQ2NzZiMDkyNDc1YTJkM2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0x
NDcsNyArMTQ3LDYgQEAgY2xhc3MgUGFyYWdyYXBoQ29udGVudEl0ZXJhdG9yIHsKIHB1YmxpYzoK
ICAgICBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kKQogICAgICAgICA6IG1faXRlcmF0b3IoeyAqbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9LCBUZXh0SXRlcmF0b3JJZ25vcmVz
U3R5bGVWaXNpYmlsaXR5KQotICAgICAgICAsIG1faXRlcmF0b3JOb2RlKG1faXRlcmF0b3IuYXRF
bmQoKSA/IG51bGxwdHIgOiBjcmVhdGVMaXZlUmFuZ2UobV9pdGVyYXRvci5yYW5nZSgpKS0+Zmly
c3ROb2RlKCkpCiAgICAgICAgICwgbV9ub2RlKHN0YXJ0LmZpcnN0Tm9kZSgpKQogICAgICAgICAs
IG1fcGFzdEVuZE5vZGUoZW5kLmZpcnN0Tm9kZSgpKQogICAgIHsKQEAgLTE4OCw3ICsxODcsMTQg
QEAgcHVibGljOgogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0ICYmIG1f
aXRlcmF0b3IuYXRFbmQoKSAmJiBtX25vZGUgPT0gbV9wYXN0RW5kTm9kZTsgfQogCiBwcml2YXRl
OgotICAgIGJvb2wgc2hvdWxkQWR2YW5jZUl0ZXJhdG9yUGFzdEN1cnJlbnROb2RlKCkgY29uc3Qg
eyByZXR1cm4gIW1faXRlcmF0b3IuYXRFbmQoKSAmJiBtX2l0ZXJhdG9yTm9kZSA9PSBtX25vZGU7
IH0KKyAgICBib29sIHNob3VsZEFkdmFuY2VJdGVyYXRvclBhc3RDdXJyZW50Tm9kZSgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9pdGVyYXRvci5hdEVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8qIGl0ZXJhdG9yTm9kZSA9IG1faXRlcmF0b3Iubm9k
ZSgpOworICAgICAgICByZXR1cm4gIWl0ZXJhdG9yTm9kZSB8fCBpdGVyYXRvck5vZGUgPT0gbV9u
b2RlOworICAgIH0KIAogICAgIHZvaWQgYWR2YW5jZU5vZGUoKQogICAgIHsKQEAgLTIxNSwyOCAr
MjIxLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gdGV4dDsKICAgICAgICAgd2hpbGUgKHNob3VsZEFkdmFu
Y2VJdGVyYXRvclBhc3RDdXJyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faXRlcmF0
b3Iubm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvclRleHQgPSBtX2l0ZXJh
dG9yLnRleHQoKTsKLSAgICAgICAgICAgICAgICBib29sIGNvbnRhaW5zRGVsaW1pdGVyID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaXRl
cmF0b3JUZXh0Lmxlbmd0aCgpICYmICFjb250YWluc0RlbGltaXRlcjsgKytpbmRleCkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGFpbnNEZWxpbWl0ZXIgPSBpc1Rva2VuRGVsaW1pdGVyKGl0ZXJh
dG9yVGV4dFtpbmRleF0pOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRGVsaW1pdGVy
KSB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yVGV4dCA9IG1faXRlcmF0b3IudGV4dCgpOwor
ICAgICAgICAgICAgaWYgKG1faXRlcmF0b3IucmFuZ2UoKS5jb2xsYXBzZWQoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChpdGVyYXRvclRleHQgPT0gIlxuIikgewogICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRUb1RleHQodGV4dCwgc3RyaW5nQnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAg
IHRleHQuYXBwZW5kKHsgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobV9pdGVyYXRvci50ZXh0KCkp
OworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yVGV4dCk7CiAK
ICAgICAgICAgICAgIG1faXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAgICAgICAgbV9pdGVyYXRv
ck5vZGUgPSBtX2l0ZXJhdG9yLmF0RW5kKCkgPyBudWxscHRyIDogY3JlYXRlTGl2ZVJhbmdlKG1f
aXRlcmF0b3IucmFuZ2UoKSktPmZpcnN0Tm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIGFwcGVu
ZFRvVGV4dCh0ZXh0LCBzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgbV90ZXh0ID0gdGV4dDsKICAg
ICB9CiAKICAgICBUZXh0SXRlcmF0b3IgbV9pdGVyYXRvcjsKLSAgICBSZWZQdHI8Tm9kZT4gbV9p
dGVyYXRvck5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8Tm9kZT4g
bV9wYXN0RW5kTm9kZTsKICAgICBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gbV90ZXh0OwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJiYWFlM2Jk
NTQ1ZGFjOTBjYzlmMjU2Zjk1ZGM3Yzk4YmM5ZWI2OTMuLmEwOTQ1OTI4NTQyMmJhNTY0ZWYwMGJh
YWJiZmE2ZTNiZGRlNmY1YzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNy0wNiAgU2lodWkgTGl1ICA8c2lo
dWlfbGl1QGFwcGUuY29tPgorCisgICAgICAgIFRleHQgbWFuaXB1bGF0aW9uIHNob3VsZCBpZ25v
cmUgd2hpdGUgc3BhY2VzIGJldHdlZW4gbm9kZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzkwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLiAKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGV4dE1hbmlwdWxhdGlvbi5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAy
MDIwLTA3LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXVtXUEVdIEVuYWJsZSBzdG9yYWdlQWNjZXNzIHRlc3RzCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24u
bW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRp
b24ubW0KaW5kZXggNzVkMzcxYWY2MjcwOWJhOTIyMzNhNmU5NWJhODM3MWI1ZWExOTllOC4uMDgy
Mzg5NmJkNzlkYzBlMDc4ZDVkOTAxZjdiY2RjOTRlZjNkYjE4YiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5t
bQpAQCAtOTgzLDYgKzk4Myw3IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFu
aXB1bGF0aW9uRXh0cmFjdHNWYWx1ZXNCeU5vZGUpCiAgICAgICAgICI8Ym9keT4iCiAgICAgICAg
ICI8c3Bhbj5vbmU8L3NwYW4+PHNwYW4gc3R5bGU9J3doaXRlLXNwYWNlOnByZTsnPnR3byAmIzEw
OyB0aHJlZTwvc3Bhbj48c3Bhbj5mb3VyPC9zcGFuPiIKICAgICAgICAgIjxzcGFuIHN0eWxlPSd3
aGl0ZS1zcGFjZTpwcmU7Jz4mIzEwO2ZpdmU8L3NwYW4+IgorICAgICAgICAiPHNwYW4+ICAgc2l4
PC9zcGFuPiAgICAgICAgPHNwYW4+c2V2ZW48L3NwYW4+IgogICAgICAgICAiPC9ib2R5PiJdOwog
CiAgICAgZG9uZSA9IGZhbHNlOwpAQCAtOTk0LDE0ICs5OTUsMTcgQEAgVEVTVChUZXh0TWFuaXB1
bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25FeHRyYWN0c1ZhbHVlc0J5Tm9kZSkKICAgICBh
dXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKICAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQs
IDJVTCk7CiAgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgNVVMKTsKLSAgICBF
WFBFQ1RfU1RSRVEoIm9uZSIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcp
OwotICAgIEVYUEVDVF9TVFJFUSgidHdvIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRG
OFN0cmluZyk7Ci0gICAgRVhQRUNUX1NUUkVRKCIgXG4gIiwgaXRlbXNbMF0udG9rZW5zWzJdLmNv
bnRlbnQuVVRGOFN0cmluZyk7Ci0gICAgRVhQRUNUX1NUUkVRKCJ0aHJlZSIsIGl0ZW1zWzBdLnRv
a2Vuc1szXS5jb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVYUEVDVF9TVFJFUSgiZm91ciIsIGl0
ZW1zWzBdLnRva2Vuc1s0XS5jb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVYUEVDVF9FUShpdGVt
c1sxXS50b2tlbnMuY291bnQsIDJVTCk7Ci0gICAgRVhQRUNUX1NUUkVRKCJcbiIsIGl0ZW1zWzFd
LnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwotICAgIEVYUEVDVF9TVFJFUSgiZml2ZSIs
IGl0ZW1zWzFdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9XS19T
VFJFUSgib25lIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQpOworICAgIEVYUEVDVF9XS19T
VFJFUSgidHdvIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQpOworICAgIEVYUEVDVF9XS19T
VFJFUSgiIFxuICIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoInRocmVlIiwgaXRlbXNbMF0udG9rZW5zWzNdLmNvbnRlbnQpOworICAgIEVYUEVDVF9X
S19TVFJFUSgiZm91ciIsIGl0ZW1zWzBdLnRva2Vuc1s0XS5jb250ZW50KTsKKyAgICBFWFBFQ1Rf
RVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCA1VUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiXG4i
LCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJmaXZl
IiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIHNp
eCIsIGl0ZW1zWzFdLnRva2Vuc1syXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiAi
LCBpdGVtc1sxXS50b2tlbnNbM10uY29udGVudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJzZXZl
biIsIGl0ZW1zWzFdLnRva2Vuc1s0XS5jb250ZW50KTsKIH0KIAogVEVTVChUZXh0TWFuaXB1bGF0
aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25FeGNsdWRlc1RleHRSZW5kZXJlZEFzSWNvbnMpCkBA
IC0yNDA2LDYgKzI0MTAsNDggQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRN
YW5pcHVsYXRpb25DYW5NZXJnZUNvbnRlbnRBbmRQcmVzZXJ2ZUxpbmVCcmUKICAgICBFWFBFQ1Rf
V0tfU1RSRVEoIjxzcGFuIHN0eWxlPVwid2hpdGUtc3BhY2U6cHJlO1wiPk9ORSBcbiBUV08gXG48
L3NwYW4+IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50
LmJvZHkuaW5uZXJIVE1MIl0pOwogfQogCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRl
VGV4dE1hbmlwdWxhdGlvbklnbm9yZVdoaXRlU3BhY2VzQmV0d2VlblBhcmFncmFwaHMpCit7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxs
b2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3
ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIiIKKyAgICAgICAgIjxzdHls
ZT4iCisgICAgICAgICAgICAiLmlubGluZS1ibG9jayB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsg
fSIKKyAgICAgICAgICAgICIubGlzdC1pdGVtIHsgZGlzcGxheTogbGlzdC1pdGVtOyB9IgorICAg
ICAgICAgICAgIi5oaWRlLWFic29sdXRlIHsgZGlzcGxheTogbm9uZTsgcG9zaXRpb246IGFic29s
dXRlOyB9IgorICAgICAgICAgICAgIi5mbG9hdC1yZWxhdGl2ZSB7IGZsb2F0OiBsZWZ0OyBwb3Np
dGlvbjogcmVsYXRpdmU7IH0iCisgICAgICAgICI8L3N0eWxlPiIKKyAgICAgICAgIjx1bCBjbGFz
cz0nZmxvYXQtcmVsYXRpdmUnPiIKKyAgICAgICAgIiAgIDxsaSBjbGFzcz0nbGlzdC1pdGVtIGZs
b2F0LXJlbGF0aXZlJz48YSBjbGFzcz0naW5saW5lLWJsb2NrJz5oZWxsbzwvYT4gICAgICAgICAg
IDxkaXYgY2xhc3M9J2hpZGUtYWJzb2x1dGUnPjxhIGNsYXNzPSdpbmxpbmUtYmxvY2sgZmxvYXQt
cmVsYXRpdmUnPmhpZGU8L2E+PC9kaXY+PC9saT4iCisgICAgICAgICIgICA8bGkgY2xhc3M9J2xp
c3QtaXRlbSBmbG9hdC1yZWxhdGl2ZSc+PGEgY2xhc3M9J2lubGluZS1ibG9jayc+d29ybGQ8L2E+
PC9saT4iCisgICAgICAgICI8L3VsPiJdOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworCisg
ICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0
aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBjb21wbGV0aW9uOl57CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7CisKKyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VR
KGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQs
IDFVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5j
b250ZW50KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAg
IEVYUEVDVF9XS19TVFJFUSgid29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudCk7CisK
KyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bkZvckl0ZW1zOkBbCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwge3sg
aXRlbXNbMF0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiSGVsbG8iIH19KS5nZXQoKSwKKyAgICAg
ICAgY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7eyBpdGVtc1sxXS50b2tlbnNbMF0u
aWRlbnRpZmllciwgQCJXb3JsZCIgfX0pLmdldCgpCisgICAgXSBjb21wbGV0aW9uOl4oTlNBcnJh
eTxOU0Vycm9yICo+ICplcnJvcnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9ycywgbmlsKTsK
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKK30KKwogVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5p
cHVsYXRpb25TaG91bGRQcmVzZXJ2ZU5vZGVzQWZ0ZXJQYXJhZ3JhcGhSYW5nZSkKIHsKICAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10g
aW5pdF0pOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>