<?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>227949</bug_id>
          
          <creation_ts>2021-07-14 07:08:16 -0700</creation_ts>
          <short_desc>[css-scroll-snap] Don&apos;t snap to offscreen snap areas in unidirectional scrolls</short_desc>
          <delta_ts>2021-08-18 08:59:57 -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>Scrolling</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>
          <dependson>228023</dependson>
    
    <dependson>228141</dependson>
          <blocked>145099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1776922</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-07-14 07:08:16 -0700</bug_when>
    <thetext>Snap areas that are offscreen should not be viable snap targets. This will requiring tracking all snap areas for a particular snap offset and only snapping to that offset if one of those snap areas is within the viewport in the other axis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778412</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-21 07:09:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/80895783&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782914</commentid>
    <comment_count>2</comment_count>
      <attachid>435192</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-08-09 10:24:26 -0700</bug_when>
    <thetext>Created attachment 435192
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785051</commentid>
    <comment_count>3</comment_count>
      <attachid>435192</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2021-08-17 23:01:21 -0700</bug_when>
    <thetext>Comment on attachment 435192
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:124
&gt; +static void adjustPreviousAndNextForOnscreenSnapAreas(const InfoType&amp; info, ScrollEventAxis axis, const SizeType&amp; viewportSize, PointType destinationOffsetPoint, PotentialSnapPointSearchResult&lt;UnitType&gt;&amp; searchResult)

nit: OnScreen?

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:135
&gt; +    }

To avoid the type mismatch, I would rewrite this:

unsigned oldIndex = (*searchResult.previous).second;
searchResult.previous.reset();
for (unsigned i = 0; i &lt;= oldIndex; i++) {
    const auto&amp; snapOffset = snapOffsets[oldIndex - i];
    if (hasCompatibleSnapArea(info, snapOffset, axis, viewportSize, destinationOffsetPoint)) {
        searchResult.previous = std::make_pair(snapOffset.offset, oldIndex - i);
        break;
    }
}

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:144
&gt; +        }

and this

unsigned oldIndex = (*searchResult.next).second;
searchResult.next.reset();
for (unsigned i = oldIndex, i &lt; snapOffsets.size(); i++) {
    const auto&amp; snapOffset = snapOffsets[i];
    if (hasCompatibleSnapArea(info, snapOffset, axis, viewportSize, destinationOffsetPoint)) {
        searchResult.next = std::make_pair(snapOffset.offset, i);
        break;
    }
}

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:162
&gt; +    adjustPreviousAndNextForOnscreenSnapAreas&lt;InfoType, LayoutType, PointType, SizeType&gt;(info, axis, viewportSize, scrollDestinationOffsetPoint, searchResult);

OnScreen

&gt; LayoutTests/imported/w3c/ChangeLog:10
&gt; +        scrolling test no longer snaps because we don&apos;t have support for choosing between two candidates

&quot;no longer&quot;: it was already not passing before this change right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785102</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-08-18 06:32:48 -0700</bug_when>
    <thetext>(In reply to Frédéric Wang (:fredw) from comment #3)
&gt; Comment on attachment 435192 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=435192&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:124
&gt; &gt; +static void adjustPreviousAndNextForOnscreenSnapAreas(const InfoType&amp; info, ScrollEventAxis axis, const SizeType&amp; viewportSize, PointType destinationOffsetPoint, PotentialSnapPointSearchResult&lt;UnitType&gt;&amp; searchResult)
&gt; 
&gt; nit: OnScreen?

Okay. It does seem like &quot;OnScreen&quot; is more common in WebKit source than &quot;Onscreen.&quot; I&apos;ll change these.

&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:135
&gt; &gt; +    }
&gt; 
&gt; To avoid the type mismatch, I would rewrite this:
&gt; 
&gt; unsigned oldIndex = (*searchResult.previous).second;
&gt; searchResult.previous.reset();
&gt; for (unsigned i = 0; i &lt;= oldIndex; i++) {
&gt;     const auto&amp; snapOffset = snapOffsets[oldIndex - i];
&gt;     if (hasCompatibleSnapArea(info, snapOffset, axis, viewportSize,
&gt; destinationOffsetPoint)) {
&gt;         searchResult.previous = std::make_pair(snapOffset.offset, oldIndex -
&gt; i);
&gt;         break;
&gt;     }
&gt; }

Hrm. I agree that the type mismatch isn&apos;t ideal, but the issue is that I want to avoid calling hasCompatibleSnapArea as much as possible since it&apos;s possible expensive. I can add a comment to this affect though.

&gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:144
&gt; &gt; +        }
&gt; 
&gt; and this
&gt; 
&gt; unsigned oldIndex = (*searchResult.next).second;
&gt; searchResult.next.reset();
&gt; for (unsigned i = oldIndex, i &lt; snapOffsets.size(); i++) {
&gt;     const auto&amp; snapOffset = snapOffsets[i];
&gt;     if (hasCompatibleSnapArea(info, snapOffset, axis, viewportSize,
&gt; destinationOffsetPoint)) {
&gt;         searchResult.next = std::make_pair(snapOffset.offset, i);
&gt;         break;
&gt;     }
&gt; }

With this change, I think that snap areas that are further away would be selected over closer ones. I can adjust the code to make the oldIndex/index change you suggest though.

&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:162
&gt; &gt; +    adjustPreviousAndNextForOnscreenSnapAreas&lt;InfoType, LayoutType, PointType, SizeType&gt;(info, axis, viewportSize, scrollDestinationOffsetPoint, searchResult);
&gt; 
&gt; OnScreen
&gt; 
&gt; &gt; LayoutTests/imported/w3c/ChangeLog:10
&gt; &gt; +        scrolling test no longer snaps because we don&apos;t have support for choosing between two candidates
&gt; 
&gt; &quot;no longer&quot;: it was already not passing before this change right?

It was failing, but due to the fact that it snapped to the wrong location. Now it simply does not snap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785107</commentid>
    <comment_count>5</comment_count>
      <attachid>435765</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-08-18 07:23:59 -0700</bug_when>
    <thetext>Created attachment 435765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785110</commentid>
    <comment_count>6</comment_count>
      <attachid>435766</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-08-18 07:58:24 -0700</bug_when>
    <thetext>Created attachment 435766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785112</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-08-18 07:59:26 -0700</bug_when>
    <thetext>After chatting with Frédéric, I better understand his suggestion and the latest version of the patch contains these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785119</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-18 08:59:55 -0700</bug_when>
    <thetext>Committed r281189 (240633@main): &lt;https://commits.webkit.org/240633@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 435766.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435192</attachid>
            <date>2021-08-09 10:24:26 -0700</date>
            <delta_ts>2021-08-18 07:23:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227949-20210809192425.patch</filename>
            <type>text/plain</type>
            <size>10256</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM3YzMzY2JmZWJjYjAz
MmNlNTc4NWZhMTI2NmUwNmQ0MzU1YTJmMS4uOWY5MWFiZWYxNjlmZjBkYzk4ZWNlNzhiZjBhYzQz
YTkxY2E4NDNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIxLTA4LTA5ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBEb24ndCBzbmFwIHRvIG9mZnNjcmVlbiBzbmFwIGFyZWFzIGluIHVuaWRpcmVjdGlv
bmFsIHNjcm9sbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNzk0OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODA4OTU3ODM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlz
IGlzIGNvdmVyZWQgYnkgdHdvIGV4aXN0aW5nIFdQVCB0ZXN0cy4KKworICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b21wb25lbnRGb3JBeGlzKTogQWRkZWQgdGhpcyBoZWxwZXIuCisgICAgICAgIChXZWJDb3JlOjpo
YXNDb21wYXRpYmxlU25hcEFyZWEpOiBBZGRlZCB0aGlzIGhlbHBlciB0aGF0IGNoZWNrcyB0byBz
ZWUgaWYgYW55IG9mIHRoZSBzbmFwIGFyZWFzCisgICAgICAgIGF0IGEgZ2l2ZW4gc2Nyb2xsIHNu
YXAgcG9zaXRpb24gYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdmlld3BvcnQuCisgICAgICAgIChX
ZWJDb3JlOjphZGp1c3RQcmV2aW91c0FuZE5leHRGb3JPbnNjcmVlblNuYXBBcmVhcyk6IEFkanVz
dHMgdGhlIHNlbGVjdGVkIHByZXZpb3VzIGFuZCBuZXh0IHNuYXAKKyAgICAgICAgcG9zaXRpb25z
IGJ5IGxvb2tpbmcgYmFja3dhcmQgYW5kIGZvcndhcmQgZm9yIHRoZSBmaXJzdCBjb21wYXRpYmxl
IHNuYXAgcG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldFdpdGhJ
bmZvQW5kQXhpcyk6IFVzZSB0aGUgbmV3IGhlbHBlci4KKwogMjAyMS0wOC0wNCAgQ2F0aGllIENo
ZW4gIDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI3Nzk5
NykgSW1hZ2VzIGdldCBzdHJldGNoZWQgd2l0aCBhc3BlY3QtcmF0aW8gYW5kIG1heC13aWR0aDog
eCUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBP
ZmZzZXRzSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFw
T2Zmc2V0c0luZm8uY3BwCmluZGV4IDI3MWNkMjE1OGQ5ZGYxMDM4ODc4OTEwYjNjNjI5YmZlMjI4
NDM3YTguLjVmNjEzZGJhM2JiMmNkNTllZmI3YjE1YzQ5NzhmZGQ4NGJlOGFhYjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJ
bmZvLmNwcApAQCAtMTAwLDYgKzEwMCw1MSBAQCBzdGF0aWMgUG90ZW50aWFsU25hcFBvaW50U2Vh
cmNoUmVzdWx0PFVuaXRUeXBlPiBzZWFyY2hGb3JQb3RlbnRpYWxTbmFwUG9pbnRzKGNvbgogICAg
IHJldHVybiB7IHByZXZpb3VzLCBuZXh0LCBzbmFwU3RvcCwgbGFuZGVkSW5zaWRlU25hcEFyZWFU
aGF0Q29uc3VtZXNWaWV3cG9ydCB9OwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVW5pdFR5cGUs
IHR5cGVuYW1lIFBvaW50VHlwZT4KK3N0YXRpYyBVbml0VHlwZSBjb21wb25lbnRGb3JBeGlzKFBv
aW50VHlwZSBwb2ludCwgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCit7CisgICAgcmV0dXJuIGF4aXMg
PT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gcG9pbnQueCgpIDogcG9pbnQueSgpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5mb1R5cGUsIHR5cGVuYW1lIFVuaXRUeXBlLCB0eXBl
bmFtZSBQb2ludFR5cGUsIHR5cGVuYW1lIFNpemVUeXBlPgorc3RhdGljIGJvb2wgaGFzQ29tcGF0
aWJsZVNuYXBBcmVhKGNvbnN0IEluZm9UeXBlJiBpbmZvLCBjb25zdCBTbmFwT2Zmc2V0PFVuaXRU
eXBlPiYgc25hcE9mZnNldCwgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFNpemVUeXBlJiB2
aWV3cG9ydFNpemUsIFBvaW50VHlwZSBkZXN0aW5hdGlvbk9mZnNldFBvaW50KQoreworICAgIGF1
dG8gb3RoZXJBeGlzID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsIDogU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOworICAg
IGF1dG8gc2Nyb2xsRGVzdGluYXRpb25Jbk90aGVyQXhpcyA9IGNvbXBvbmVudEZvckF4aXM8VW5p
dFR5cGUsIFBvaW50VHlwZT4oZGVzdGluYXRpb25PZmZzZXRQb2ludCwgb3RoZXJBeGlzKTsKKyAg
ICBhdXRvIHZpZXdwb3J0TGVuZ3RoSW5PdGhlckF4aXMgPSBheGlzID09IFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCA/IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSA6IHZpZXdwb3J0U2l6ZS53aWR0
aCgpOworCisgICAgcmV0dXJuIHNuYXBPZmZzZXQuc25hcEFyZWFJbmRpY2VzLmZpbmRNYXRjaGlu
ZyhbJl0gKGF1dG8gaW5kZXgpIHsKKyAgICAgICAgY29uc3QgYXV0byYgc25hcEFyZWEgPSBpbmZv
LnNuYXBBcmVhc1tpbmRleF07CisgICAgICAgIGF1dG8gW290aGVyQXhpc01pbiwgb3RoZXJBeGlz
TWF4XSA9IHJhbmdlRm9yQXhpczxVbml0VHlwZT4oc25hcEFyZWEsIG90aGVyQXhpcyk7CisgICAg
ICAgIHJldHVybiAoc2Nyb2xsRGVzdGluYXRpb25Jbk90aGVyQXhpcyArIHZpZXdwb3J0TGVuZ3Ro
SW5PdGhlckF4aXMpID4gb3RoZXJBeGlzTWluICYmIHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4
aXMgPCBvdGhlckF4aXNNYXg7CisgICAgfSkgIT0gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgVW5pdFR5cGUsIHR5cGVuYW1lIFBvaW50VHlwZSwg
dHlwZW5hbWUgU2l6ZVR5cGU+CitzdGF0aWMgdm9pZCBhZGp1c3RQcmV2aW91c0FuZE5leHRGb3JP
bnNjcmVlblNuYXBBcmVhcyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4
aXMsIGNvbnN0IFNpemVUeXBlJiB2aWV3cG9ydFNpemUsIFBvaW50VHlwZSBkZXN0aW5hdGlvbk9m
ZnNldFBvaW50LCBQb3RlbnRpYWxTbmFwUG9pbnRTZWFyY2hSZXN1bHQ8VW5pdFR5cGU+JiBzZWFy
Y2hSZXN1bHQpCit7CisgICAgY29uc3QgYXV0byYgc25hcE9mZnNldHMgPSBpbmZvLm9mZnNldHNG
b3JBeGlzKGF4aXMpOworICAgIGlmIChzZWFyY2hSZXN1bHQucHJldmlvdXMpIHsKKyAgICAgICAg
aW50IGluZGV4ID0gKCpzZWFyY2hSZXN1bHQucHJldmlvdXMpLnNlY29uZDsKKyAgICAgICAgc2Vh
cmNoUmVzdWx0LnByZXZpb3VzLnJlc2V0KCk7CisgICAgICAgIGZvciAoOyAhc2VhcmNoUmVzdWx0
LnByZXZpb3VzICYmIGluZGV4ID49IDA7IGluZGV4LS0pIHsKKyAgICAgICAgICAgIGNvbnN0IGF1
dG8mIHNuYXBPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpbmRleF07CisgICAgICAgICAgICBpZiAoaGFz
Q29tcGF0aWJsZVNuYXBBcmVhKGluZm8sIHNuYXBPZmZzZXQsIGF4aXMsIHZpZXdwb3J0U2l6ZSwg
ZGVzdGluYXRpb25PZmZzZXRQb2ludCkpCisgICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0LnBy
ZXZpb3VzID0gc3RkOjptYWtlX3BhaXIoc25hcE9mZnNldC5vZmZzZXQsIGluZGV4KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChzZWFyY2hSZXN1bHQubmV4dCkgeworICAgICAgICB1bnNp
Z25lZCBpbmRleCA9ICgqc2VhcmNoUmVzdWx0Lm5leHQpLnNlY29uZDsKKyAgICAgICAgc2VhcmNo
UmVzdWx0Lm5leHQucmVzZXQoKTsKKyAgICAgICAgZm9yICg7ICFzZWFyY2hSZXN1bHQubmV4dCAm
JiBpbmRleCA8IHNuYXBPZmZzZXRzLnNpemUoKTsgaW5kZXgrKykgeworICAgICAgICAgICAgY29u
c3QgYXV0byYgc25hcE9mZnNldCA9IHNuYXBPZmZzZXRzW2luZGV4XTsKKyAgICAgICAgICAgIGlm
IChoYXNDb21wYXRpYmxlU25hcEFyZWEoaW5mbywgc25hcE9mZnNldCwgYXhpcywgdmlld3BvcnRT
aXplLCBkZXN0aW5hdGlvbk9mZnNldFBvaW50KSkKKyAgICAgICAgICAgICAgICBzZWFyY2hSZXN1
bHQubmV4dCA9IHN0ZDo6bWFrZV9wYWlyKHNuYXBPZmZzZXQub2Zmc2V0LCBpbmRleCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUg
U2l6ZVR5cGUsIHR5cGVuYW1lIExheW91dFR5cGUsIHR5cGVuYW1lIFBvaW50VHlwZT4KIHN0YXRp
YyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RT
bmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKGNvbnN0IEluZm9UeXBlJiBpbmZvLCBTY3JvbGxFdmVu
dEF4aXMgYXhpcywgY29uc3QgU2l6ZVR5cGUmIHZpZXdwb3J0U2l6ZSwgUG9pbnRUeXBlIHNjcm9s
bERlc3RpbmF0aW9uT2Zmc2V0UG9pbnQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExh
eW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKIHsKQEAgLTEx
MCw5ICsxNTUsMTMgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0EKICAgICAgICAgcmV0dXJuIHBh
aXJGb3JOb1NuYXBwaW5nOwogCiAgICAgYXV0byB2aWV3cG9ydExlbmd0aCA9IGF4aXMgPT0gU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gdmlld3BvcnRTaXplLndpZHRoKCkgOiB2aWV3cG9y
dFNpemUuaGVpZ2h0KCk7Ci0gICAgYXV0byBbcHJldmlvdXMsIG5leHQsIHNuYXBTdG9wLCBsYW5k
ZWRJbnNpZGVTbmFwQXJlYVRoYXRDb25zdW1lc1ZpZXdwb3J0XSA9IHNlYXJjaEZvclBvdGVudGlh
bFNuYXBQb2ludHMoaW5mbywgYXhpcywgdmlld3BvcnRMZW5ndGgsIHNjcm9sbERlc3RpbmF0aW9u
T2Zmc2V0LCBvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpOwotICAgIGlmIChz
bmFwU3RvcCkKLSAgICAgICAgcmV0dXJuICpzbmFwU3RvcDsKKyAgICBhdXRvIHNlYXJjaFJlc3Vs
dCA9IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoaW5mbywgYXhpcywgdmlld3BvcnRMZW5n
dGgsIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFs
U25hcHBpbmcpOworICAgIGlmIChzZWFyY2hSZXN1bHQuc25hcFN0b3ApCisgICAgICAgIHJldHVy
biAqKHNlYXJjaFJlc3VsdC5zbmFwU3RvcCk7CisKKyAgICBhZGp1c3RQcmV2aW91c0FuZE5leHRG
b3JPbnNjcmVlblNuYXBBcmVhczxJbmZvVHlwZSwgTGF5b3V0VHlwZSwgUG9pbnRUeXBlLCBTaXpl
VHlwZT4oaW5mbywgYXhpcywgdmlld3BvcnRTaXplLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldFBv
aW50LCBzZWFyY2hSZXN1bHQpOworICAgIGF1dG8mIHByZXZpb3VzID0gc2VhcmNoUmVzdWx0LnBy
ZXZpb3VzOworICAgIGF1dG8mIG5leHQgPSBzZWFyY2hSZXN1bHQubmV4dDsKIAogICAgIC8vIEZy
b20gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zY3JvbGwtc25hcC0xLyNzbmFwLW92ZXJmbG93
CiAgICAgLy8gIklmIHRoZSBzbmFwIGFyZWEgaXMgbGFyZ2VyIHRoYW4gdGhlIHNuYXBwb3J0IGlu
IGEgcGFydGljdWxhciBheGlzLCB0aGVuIGFueSBzY3JvbGwgcG9zaXRpb24KQEAgLTEyMCw3ICsx
NjksNyBAQCBzdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQQogICAgIC8vIHByZXZpb3VzIGFuZCBzdWJz
ZXF1ZW50IHNuYXAgcG9zaXRpb25zIGluIHRoYXQgYXhpcyBpcyBsYXJnZXIgdGhhbiBzaXplIG9m
IHRoZSBzbmFwcG9ydCBpbgogICAgIC8vIHRoYXQgYXhpcywgaXMgYSB2YWxpZCBzbmFwIHBvc2l0
aW9uIGluIHRoYXQgYXhpcy4gVGhlIFVBIG1heSB1c2UgdGhlIHNwZWNpZmllZCBhbGlnbm1lbnQg
YXMgYQogICAgIC8vIG1vcmUgcHJlY2lzZSB0YXJnZXQgZm9yIGNlcnRhaW4gc2Nyb2xsIG9wZXJh
dGlvbnMgKGUuZy4gZXhwbGljaXQgcGFnaW5nKS4iCi0gICAgaWYgKGxhbmRlZEluc2lkZVNuYXBB
cmVhVGhhdENvbnN1bWVzVmlld3BvcnQgJiYgKCFwcmV2aW91cyB8fCAhbmV4dCB8fCAoKCpuZXh0
KS5maXJzdCAtICgqcHJldmlvdXMpLmZpcnN0KSA+PSB2aWV3cG9ydExlbmd0aCkpCisgICAgaWYg
KHNlYXJjaFJlc3VsdC5sYW5kZWRJbnNpZGVTbmFwQXJlYVRoYXRDb25zdW1lc1ZpZXdwb3J0ICYm
ICghcHJldmlvdXMgfHwgIW5leHQgfHwgKCgqbmV4dCkuZmlyc3QgLSAoKnByZXZpb3VzKS5maXJz
dCkgPj0gdmlld3BvcnRMZW5ndGgpKQogICAgICAgICByZXR1cm4gcGFpckZvck5vU25hcHBpbmc7
CiAKICAgICBhdXRvIGlzTmVhckVub3VnaFRvT2Zmc2V0Rm9yUHJveGltaXR5ID0gWyZdKExheW91
dFR5cGUgY2FuZGlkYXRlU25hcE9mZnNldCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cK
aW5kZXggYjhmMGI2NTMyZjFiMDUxYjllMjg2MTc3ODAyNTk4NzI3YmUzNzM0MS4uNjM5MjY2NDYw
OWEwYTQ5NGI4MjhkZGFlMTY1MmM1YjY1MGJjZjYyOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDgtMDkgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtjc3Mtc2Nyb2xsLXNuYXBdIERvbid0IHNu
YXAgdG8gb2Zmc2NyZWVuIHNuYXAgYXJlYXMgaW4gdW5pZGlyZWN0aW9uYWwgc2Nyb2xscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3OTQ5CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84MDg5NTc4Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9s
bC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy1ib3RoLWV4cGVjdGVkLnR4dDogVGhpcyBiaWRp
cmVjdGlvbmFsCisgICAgICAgIHNjcm9sbGluZyB0ZXN0IG5vIGxvbmdlciBzbmFwcyBiZWNhdXNl
IHdlIGRvbid0IGhhdmUgc3VwcG9ydCBmb3IgY2hvb3NpbmcgYmV0d2VlbiB0d28gY2FuZGlkYXRl
cworICAgICAgICBwcm9wZXJseSB5ZXQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLXgtYXhpcy1leHBlY3RlZC50
eHQ6IFVwZGF0ZWQgdG8gc2hvdyBuZXdseSBwYXNzaW5nIHRlc3QuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLXkt
YXhpcy1leHBlY3RlZC50eHQ6IERpdHRvLgorCiAyMDIxLTA4LTAzICBBbGV4ZXkgU2h2YXlrYSAg
PHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBSZWFkYWJsZVN0cmVhbSdzIHBpcGVU
bygpIGFuZCBwaXBlVGhyb3VnaCgpIGRvbid0IHByb3Blcmx5IGNoZWNrIGZvciBBYm9ydFNpZ25h
bApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy1ib3RoLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nz
cy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJlYXMtYm90aC1leHBlY3RlZC50eHQKaW5k
ZXggOGIwY2E3OGU4ODMyODA2OTgyMzBlZGM5MjUxZmYyM2EwNDRkZDVhNy4uNmFhZWJhZjhiYjFm
NzBhMzg2NWEzNTA1NjU2NjczOTYyMTdmZmQyMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8t
dmlzaWJsZS1hcmVhcy1ib3RoLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNp
YmxlLWFyZWFzLWJvdGgtZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMyBAQAogCi1GQUlMIE9ubHkg
c25hcCB0byB2aXNpYmxlIGFyZWFzIGluIHRoZSBjYXNlIHdoZXJlIHRha2luZyB0aGUgY2xvc2Vz
dCBzbmFwIHBvaW50IG9mICAgZWFjaCBheGlzIGRvZXMgbm90IHNuYXAgdG8gYSB2aXNpYmxlIGFy
ZWEgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgMCBidXQgZ290IDgwMAorRkFJTCBPbmx5IHNuYXAg
dG8gdmlzaWJsZSBhcmVhcyBpbiB0aGUgY2FzZSB3aGVyZSB0YWtpbmcgdGhlIGNsb3Nlc3Qgc25h
cCBwb2ludCBvZiAgIGVhY2ggYXhpcyBkb2VzIG5vdCBzbmFwIHRvIGEgdmlzaWJsZSBhcmVhIGFz
c2VydF9lcXVhbHM6IGV4cGVjdGVkIDgwMCBidXQgZ290IDAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFw
L3NuYXAtdG8tdmlzaWJsZS1hcmVhcy14LWF4aXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAt
dG8tdmlzaWJsZS1hcmVhcy14LWF4aXMtZXhwZWN0ZWQudHh0CmluZGV4IGRhZDM5NzUwOTBhN2Ex
ZWUzNWI4Njk1MzJmNWI0ODI4YzM1OTA3MTcuLjA1ZmE2MWE0ODM2MTk3MzExZjBiZTcyMDgxNDlm
NDljYzBiMjQzYmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJlYXMteC1h
eGlzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLXgtYXhp
cy1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgT25seSBzbmFwIHRvIHZpc2li
bGUgYXJlYSBvbiBYIGF4aXMsIGV2ZW4gd2hlbiB0aGUgbm9uLXZpc2libGUgb25lcyBhcmUgY2xv
c2VyIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIDgwMCBidXQgZ290IDcwMAorUEFTUyBPbmx5IHNu
YXAgdG8gdmlzaWJsZSBhcmVhIG9uIFggYXhpcywgZXZlbiB3aGVuIHRoZSBub24tdmlzaWJsZSBv
bmVzIGFyZSBjbG9zZXIKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVh
cy15LWF4aXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy15LWF4
aXMtZXhwZWN0ZWQudHh0CmluZGV4IDIwYzcwN2ZmOWQwODI5YzM2ZmQwM2I4YWQ5YTk4YWExZjUx
MjY4ZjAuLjgwNzMwN2E5NTZiYzQ2N2I4MDJhMTQ1NzQwNDU0ZDRlZTA4M2I1YjMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1z
Y3JvbGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJlYXMteS1heGlzLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Ny
b2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLXktYXhpcy1leHBlY3RlZC50eHQKQEAgLTEs
MyArMSwzIEBACiAKLUZBSUwgT25seSBzbmFwIHRvIHZpc2libGUgYXJlYSBvbiBZIGF4aXMsIGV2
ZW4gd2hlbiB0aGUgbm9uLXZpc2libGUgb25lcyBhcmUgY2xvc2VyIGFzc2VydF9lcXVhbHM6IGV4
cGVjdGVkIDgwMCBidXQgZ290IDcwMAorUEFTUyBPbmx5IHNuYXAgdG8gdmlzaWJsZSBhcmVhIG9u
IFkgYXhpcywgZXZlbiB3aGVuIHRoZSBub24tdmlzaWJsZSBvbmVzIGFyZSBjbG9zZXIKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435765</attachid>
            <date>2021-08-18 07:23:59 -0700</date>
            <delta_ts>2021-08-18 07:58:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227949-20210818162358.patch</filename>
            <type>text/plain</type>
            <size>10597</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNjYzdiNzcyOWFiOWIw
OTAxZGJmZDgzY2I4MTEzODM0NmJiZjU3NC4uNWYyYWIxNWVlYTdlMzM0ZWUwNDY0NmNmOWM4MzBj
NDRlMzRiMDFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIxLTA4LTE4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBEb24ndCBzbmFwIHRvIG9mZnNjcmVlbiBzbmFwIGFyZWFzIGluIHVuaWRpcmVjdGlv
bmFsIHNjcm9sbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNzk0OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODA4OTU3ODM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRnLDqWTDqXJpYyBXYW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhp
cyBpcyBjb3ZlcmVkIGJ5IHR3byBleGlzdGluZyBXUFQgdGVzdHMuCisKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcG9uZW50Rm9yQXhpcyk6IEFkZGVkIHRoaXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6
aGFzQ29tcGF0aWJsZVNuYXBBcmVhKTogQWRkZWQgdGhpcyBoZWxwZXIgdGhhdCBjaGVja3MgdG8g
c2VlIGlmIGFueSBvZiB0aGUgc25hcCBhcmVhcworICAgICAgICBhdCBhIGdpdmVuIHNjcm9sbCBz
bmFwIHBvc2l0aW9uIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHZpZXdwb3J0LgorICAgICAgICAo
V2ViQ29yZTo6YWRqdXN0UHJldmlvdXNBbmROZXh0Rm9yT25zY3JlZW5TbmFwQXJlYXMpOiBBZGp1
c3RzIHRoZSBzZWxlY3RlZCBwcmV2aW91cyBhbmQgbmV4dCBzbmFwCisgICAgICAgIHBvc2l0aW9u
cyBieSBsb29raW5nIGJhY2t3YXJkIGFuZCBmb3J3YXJkIGZvciB0aGUgZmlyc3QgY29tcGF0aWJs
ZSBzbmFwIHBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXRXaXRo
SW5mb0FuZEF4aXMpOiBVc2UgdGhlIG5ldyBoZWxwZXIuCisKIDIwMjEtMDgtMTggIFhhYmllciBS
b2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVh
bWVyXVtFTUVdIFRyeSB0byBwYXJzZSBYTUwgaW5pdCBkYXRhcyB0aGF0IGNvdWxkIHBvc3NpYmx5
IGNvbWUgZnJvbSBNUEQgbWFuaWZlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAppbmRleCBmMTMzMjU5ZGJiYzU0
ODgxOWU5MzNlYjc1OTYzOGUxNzFhYjdlMmE3Li5jOWE0NGRhNGU2MzNiMjJkZDU5YjBlZDVmMGUw
NTA2NmQ0ZWRlNzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTEwMCw2ICsxMDAsNTQgQEAgc3RhdGlj
IFBvdGVudGlhbFNuYXBQb2ludFNlYXJjaFJlc3VsdDxVbml0VHlwZT4gc2VhcmNoRm9yUG90ZW50
aWFsU25hcFBvaW50cyhjb24KICAgICByZXR1cm4geyBwcmV2aW91cywgbmV4dCwgc25hcFN0b3As
IGxhbmRlZEluc2lkZVNuYXBBcmVhVGhhdENvbnN1bWVzVmlld3BvcnQgfTsKIH0KIAordGVtcGxh
dGUgPHR5cGVuYW1lIFVuaXRUeXBlLCB0eXBlbmFtZSBQb2ludFR5cGU+CitzdGF0aWMgVW5pdFR5
cGUgY29tcG9uZW50Rm9yQXhpcyhQb2ludFR5cGUgcG9pbnQsIFNjcm9sbEV2ZW50QXhpcyBheGlz
KQoreworICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHBv
aW50LngoKSA6IHBvaW50LnkoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEluZm9UeXBlLCB0
eXBlbmFtZSBVbml0VHlwZSwgdHlwZW5hbWUgUG9pbnRUeXBlLCB0eXBlbmFtZSBTaXplVHlwZT4K
K3N0YXRpYyBib29sIGhhc0NvbXBhdGlibGVTbmFwQXJlYShjb25zdCBJbmZvVHlwZSYgaW5mbywg
Y29uc3QgU25hcE9mZnNldDxVbml0VHlwZT4mIHNuYXBPZmZzZXQsIFNjcm9sbEV2ZW50QXhpcyBh
eGlzLCBjb25zdCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBQb2ludFR5cGUgZGVzdGluYXRpb25P
ZmZzZXRQb2ludCkKK3sKKyAgICBhdXRvIG90aGVyQXhpcyA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsID8gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCA6IFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbDsKKyAgICBhdXRvIHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMg
PSBjb21wb25lbnRGb3JBeGlzPFVuaXRUeXBlLCBQb2ludFR5cGU+KGRlc3RpbmF0aW9uT2Zmc2V0
UG9pbnQsIG90aGVyQXhpcyk7CisgICAgYXV0byB2aWV3cG9ydExlbmd0aEluT3RoZXJBeGlzID0g
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUuaGVpZ2h0
KCkgOiB2aWV3cG9ydFNpemUud2lkdGgoKTsKKworICAgIHJldHVybiBzbmFwT2Zmc2V0LnNuYXBB
cmVhSW5kaWNlcy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvIGluZGV4KSB7CisgICAgICAgIGNvbnN0
IGF1dG8mIHNuYXBBcmVhID0gaW5mby5zbmFwQXJlYXNbaW5kZXhdOworICAgICAgICBhdXRvIFtv
dGhlckF4aXNNaW4sIG90aGVyQXhpc01heF0gPSByYW5nZUZvckF4aXM8VW5pdFR5cGU+KHNuYXBB
cmVhLCBvdGhlckF4aXMpOworICAgICAgICByZXR1cm4gKHNjcm9sbERlc3RpbmF0aW9uSW5PdGhl
ckF4aXMgKyB2aWV3cG9ydExlbmd0aEluT3RoZXJBeGlzKSA+IG90aGVyQXhpc01pbiAmJiBzY3Jv
bGxEZXN0aW5hdGlvbkluT3RoZXJBeGlzIDwgb3RoZXJBeGlzTWF4OworICAgIH0pICE9IG5vdEZv
dW5kOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5mb1R5cGUsIHR5cGVuYW1lIFVuaXRUeXBl
LCB0eXBlbmFtZSBQb2ludFR5cGUsIHR5cGVuYW1lIFNpemVUeXBlPgorc3RhdGljIHZvaWQgYWRq
dXN0UHJldmlvdXNBbmROZXh0Rm9yT25TY3JlZW5TbmFwQXJlYXMoY29uc3QgSW5mb1R5cGUmIGlu
Zm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBQ
b2ludFR5cGUgZGVzdGluYXRpb25PZmZzZXRQb2ludCwgUG90ZW50aWFsU25hcFBvaW50U2VhcmNo
UmVzdWx0PFVuaXRUeXBlPiYgc2VhcmNoUmVzdWx0KQoreworICAgIC8vIGhhc0NvbXBhdGlibGVT
bmFwQXJlYSBuZWVkcyB0byBsb29rIGF0IGFsbCBjb21wYXRpYmxlIHNuYXAgYXJlYXMsIHdoaWNo
IG1pZ2h0IGJlIGEgbGFyZ2UKKyAgICAvLyBudW1iZXIgZm9yIHNuYXAgYXJlYXMgYXJyYW5nZWQg
aW4gYSBncmlkLiBTaW5jZSB0aGlzIG1pZ2h0IGJlIGV4cGVuc2l2ZSwgdGhpcyBjb2RlIHRyaWVz
CisgICAgLy8gdG8gbG9vayBhdCB0aGUgbW9zdGx5IGNsb3Nlc3QgY29tcGF0aWJsZSBzbmFwIGFy
ZWFzIGZpcnN0LgorICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzID0gaW5mby5vZmZzZXRzRm9y
QXhpcyhheGlzKTsKKyAgICBpZiAoc2VhcmNoUmVzdWx0LnByZXZpb3VzKSB7CisgICAgICAgIHVu
c2lnbmVkIG9sZEluZGV4ID0gKCpzZWFyY2hSZXN1bHQucHJldmlvdXMpLnNlY29uZDsKKyAgICAg
ICAgc2VhcmNoUmVzdWx0LnByZXZpb3VzLnJlc2V0KCk7CisgICAgICAgIGZvciAoaW50IGluZGV4
ID0gb2xkSW5kZXg7ICFzZWFyY2hSZXN1bHQucHJldmlvdXMgJiYgaW5kZXggPj0gMDsgaW5kZXgt
LSkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgc25hcE9mZnNldCA9IHNuYXBPZmZzZXRzW2lu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChoYXNDb21wYXRpYmxlU25hcEFyZWEoaW5mbywgc25hcE9m
ZnNldCwgYXhpcywgdmlld3BvcnRTaXplLCBkZXN0aW5hdGlvbk9mZnNldFBvaW50KSkKKyAgICAg
ICAgICAgICAgICBzZWFyY2hSZXN1bHQucHJldmlvdXMgPSB7IHNuYXBPZmZzZXQub2Zmc2V0LCBp
bmRleCB9OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNlYXJjaFJlc3VsdC5uZXh0KSB7
CisgICAgICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gKCpzZWFyY2hSZXN1bHQubmV4dCkuc2Vjb25k
OworICAgICAgICBzZWFyY2hSZXN1bHQubmV4dC5yZXNldCgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gb2xkSW5kZXg7ICFzZWFyY2hSZXN1bHQubmV4dCAmJiBpbmRleCA8IHNuYXBP
ZmZzZXRzLnNpemUoKTsgaW5kZXgrKykgeworICAgICAgICAgICAgY29uc3QgYXV0byYgc25hcE9m
ZnNldCA9IHNuYXBPZmZzZXRzW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChoYXNDb21wYXRpYmxl
U25hcEFyZWEoaW5mbywgc25hcE9mZnNldCwgYXhpcywgdmlld3BvcnRTaXplLCBkZXN0aW5hdGlv
bk9mZnNldFBvaW50KSkKKyAgICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQubmV4dCA9IHsgc25h
cE9mZnNldC5vZmZzZXQsIGluZGV4IH07CisgICAgICAgIH0KKyAgICB9Cit9CisKIHRlbXBsYXRl
IDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6ZVR5cGUsIHR5cGVuYW1lIExheW91dFR5
cGUsIHR5cGVuYW1lIFBvaW50VHlwZT4KIHN0YXRpYyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKGNv
bnN0IEluZm9UeXBlJiBpbmZvLCBTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgU2l6ZVR5cGUm
IHZpZXdwb3J0U2l6ZSwgUG9pbnRUeXBlIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0UG9pbnQsIGZs
b2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9y
RGlyZWN0aW9uYWxTbmFwcGluZykKIHsKQEAgLTExMCw5ICsxNTgsMTMgQEAgc3RhdGljIHN0ZDo6
cGFpcjxMYXlvdXRUeXBlLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZz
ZXRXaXRoSW5mb0EKICAgICAgICAgcmV0dXJuIHBhaXJGb3JOb1NuYXBwaW5nOwogCiAgICAgYXV0
byB2aWV3cG9ydExlbmd0aCA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8g
dmlld3BvcnRTaXplLndpZHRoKCkgOiB2aWV3cG9ydFNpemUuaGVpZ2h0KCk7Ci0gICAgYXV0byBb
cHJldmlvdXMsIG5leHQsIHNuYXBTdG9wLCBsYW5kZWRJbnNpZGVTbmFwQXJlYVRoYXRDb25zdW1l
c1ZpZXdwb3J0XSA9IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoaW5mbywgYXhpcywgdmll
d3BvcnRMZW5ndGgsIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBvcmlnaW5hbE9mZnNldEZvckRp
cmVjdGlvbmFsU25hcHBpbmcpOwotICAgIGlmIChzbmFwU3RvcCkKLSAgICAgICAgcmV0dXJuICpz
bmFwU3RvcDsKKyAgICBhdXRvIHNlYXJjaFJlc3VsdCA9IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQ
b2ludHMoaW5mbywgYXhpcywgdmlld3BvcnRMZW5ndGgsIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0
LCBvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpOworICAgIGlmIChzZWFyY2hS
ZXN1bHQuc25hcFN0b3ApCisgICAgICAgIHJldHVybiAqKHNlYXJjaFJlc3VsdC5zbmFwU3RvcCk7
CisKKyAgICBhZGp1c3RQcmV2aW91c0FuZE5leHRGb3JPblNjcmVlblNuYXBBcmVhczxJbmZvVHlw
ZSwgTGF5b3V0VHlwZSwgUG9pbnRUeXBlLCBTaXplVHlwZT4oaW5mbywgYXhpcywgdmlld3BvcnRT
aXplLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldFBvaW50LCBzZWFyY2hSZXN1bHQpOworICAgIGF1
dG8mIHByZXZpb3VzID0gc2VhcmNoUmVzdWx0LnByZXZpb3VzOworICAgIGF1dG8mIG5leHQgPSBz
ZWFyY2hSZXN1bHQubmV4dDsKIAogICAgIC8vIEZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nz
cy1zY3JvbGwtc25hcC0xLyNzbmFwLW92ZXJmbG93CiAgICAgLy8gIklmIHRoZSBzbmFwIGFyZWEg
aXMgbGFyZ2VyIHRoYW4gdGhlIHNuYXBwb3J0IGluIGEgcGFydGljdWxhciBheGlzLCB0aGVuIGFu
eSBzY3JvbGwgcG9zaXRpb24KQEAgLTEyMCw3ICsxNzIsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPExh
eW91dFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJ
bmZvQQogICAgIC8vIHByZXZpb3VzIGFuZCBzdWJzZXF1ZW50IHNuYXAgcG9zaXRpb25zIGluIHRo
YXQgYXhpcyBpcyBsYXJnZXIgdGhhbiBzaXplIG9mIHRoZSBzbmFwcG9ydCBpbgogICAgIC8vIHRo
YXQgYXhpcywgaXMgYSB2YWxpZCBzbmFwIHBvc2l0aW9uIGluIHRoYXQgYXhpcy4gVGhlIFVBIG1h
eSB1c2UgdGhlIHNwZWNpZmllZCBhbGlnbm1lbnQgYXMgYQogICAgIC8vIG1vcmUgcHJlY2lzZSB0
YXJnZXQgZm9yIGNlcnRhaW4gc2Nyb2xsIG9wZXJhdGlvbnMgKGUuZy4gZXhwbGljaXQgcGFnaW5n
KS4iCi0gICAgaWYgKGxhbmRlZEluc2lkZVNuYXBBcmVhVGhhdENvbnN1bWVzVmlld3BvcnQgJiYg
KCFwcmV2aW91cyB8fCAhbmV4dCB8fCAoKCpuZXh0KS5maXJzdCAtICgqcHJldmlvdXMpLmZpcnN0
KSA+PSB2aWV3cG9ydExlbmd0aCkpCisgICAgaWYgKHNlYXJjaFJlc3VsdC5sYW5kZWRJbnNpZGVT
bmFwQXJlYVRoYXRDb25zdW1lc1ZpZXdwb3J0ICYmICghcHJldmlvdXMgfHwgIW5leHQgfHwgKCgq
bmV4dCkuZmlyc3QgLSAoKnByZXZpb3VzKS5maXJzdCkgPj0gdmlld3BvcnRMZW5ndGgpKQogICAg
ICAgICByZXR1cm4gcGFpckZvck5vU25hcHBpbmc7CiAKICAgICBhdXRvIGlzTmVhckVub3VnaFRv
T2Zmc2V0Rm9yUHJveGltaXR5ID0gWyZdKExheW91dFR5cGUgY2FuZGlkYXRlU25hcE9mZnNldCkg
ewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggNDk2ZGQzODA4MjI0YWYxYjM4MDMy
NmJlZTNmNzg0YzExMjk0NTA2Zi4uNmVhNDc5NTllOTgyMmQ3ODBhMmUzMDA5NTNlMWYxMjkxYjZk
MmE4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MjEtMDgtMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIFtjc3Mtc2Nyb2xsLXNuYXBdIERvbid0IHNuYXAgdG8gb2Zmc2NyZWVuIHNuYXAgYXJlYXMg
aW4gdW5pZGlyZWN0aW9uYWwgc2Nyb2xscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI3OTQ5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MDg5NTc4
Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBGcsOpZMOpcmljIFdhbmcuCisKKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJl
YXMtYm90aC1leHBlY3RlZC50eHQ6IFRoaXMgYmlkaXJlY3Rpb25hbAorICAgICAgICBzY3JvbGxp
bmcgdGVzdCBubyBsb25nZXIgc25hcHMgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHN1cHBvcnQgZm9y
IGNob29zaW5nIGJldHdlZW4gdHdvIGNhbmRpZGF0ZXMKKyAgICAgICAgcHJvcGVybHkgeWV0Lgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8t
dmlzaWJsZS1hcmVhcy14LWF4aXMtZXhwZWN0ZWQudHh0OiBVcGRhdGVkIHRvIHNob3cgbmV3bHkg
cGFzc2luZyB0ZXN0LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9s
bC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy15LWF4aXMtZXhwZWN0ZWQudHh0OiBEaXR0by4K
KwogMjAyMS0wOC0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIERvY3VtZW50IGxvYWQgZXZlbnRzIHNob3VsZCB1cGRhdGUgdGltaW5nIGlu
IFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyBldmVuIGFmdGVyIGl0cyBpbnN0YW50aWF0aW9u
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLWJvdGgtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nz
LXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy1ib3RoLWV4cGVjdGVkLnR4dAppbmRl
eCA4YjBjYTc4ZTg4MzI4MDY5ODIzMGVkYzkyNTFmZjIzYTA0NGRkNWE3Li42YWFlYmFmOGJiMWY3
MGEzODY1YTM1MDU2NTY2NzM5NjIxN2ZmZDIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12
aXNpYmxlLWFyZWFzLWJvdGgtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2li
bGUtYXJlYXMtYm90aC1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgT25seSBz
bmFwIHRvIHZpc2libGUgYXJlYXMgaW4gdGhlIGNhc2Ugd2hlcmUgdGFraW5nIHRoZSBjbG9zZXN0
IHNuYXAgcG9pbnQgb2YgICBlYWNoIGF4aXMgZG9lcyBub3Qgc25hcCB0byBhIHZpc2libGUgYXJl
YSBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAwIGJ1dCBnb3QgODAwCitGQUlMIE9ubHkgc25hcCB0
byB2aXNpYmxlIGFyZWFzIGluIHRoZSBjYXNlIHdoZXJlIHRha2luZyB0aGUgY2xvc2VzdCBzbmFw
IHBvaW50IG9mICAgZWFjaCBheGlzIGRvZXMgbm90IHNuYXAgdG8gYSB2aXNpYmxlIGFyZWEgYXNz
ZXJ0X2VxdWFsczogZXhwZWN0ZWQgODAwIGJ1dCBnb3QgMAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAv
c25hcC10by12aXNpYmxlLWFyZWFzLXgtYXhpcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10
by12aXNpYmxlLWFyZWFzLXgtYXhpcy1leHBlY3RlZC50eHQKaW5kZXggZGFkMzk3NTA5MGE3YTFl
ZTM1Yjg2OTUzMmY1YjQ4MjhjMzU5MDcxNy4uMDVmYTYxYTQ4MzYxOTczMTFmMGJlNzIwODE0OWY0
OWNjMGIyNDNiZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy14LWF4
aXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJlYXMteC1heGlz
LWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDMgQEAKIAotRkFJTCBPbmx5IHNuYXAgdG8gdmlzaWJs
ZSBhcmVhIG9uIFggYXhpcywgZXZlbiB3aGVuIHRoZSBub24tdmlzaWJsZSBvbmVzIGFyZSBjbG9z
ZXIgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgODAwIGJ1dCBnb3QgNzAwCitQQVNTIE9ubHkgc25h
cCB0byB2aXNpYmxlIGFyZWEgb24gWCBheGlzLCBldmVuIHdoZW4gdGhlIG5vbi12aXNpYmxlIG9u
ZXMgYXJlIGNsb3NlcgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFz
LXktYXhpcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLXktYXhp
cy1leHBlY3RlZC50eHQKaW5kZXggMjBjNzA3ZmY5ZDA4MjljMzZmZDAzYjhhZDlhOThhYTFmNTEy
NjhmMC4uODA3MzA3YTk1NmJjNDY3YjgwMmExNDU3NDA0NTRkNGVlMDgzYjViMyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNj
cm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy15LWF4aXMtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3Jv
bGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJlYXMteS1heGlzLWV4cGVjdGVkLnR4dApAQCAtMSwz
ICsxLDMgQEAKIAotRkFJTCBPbmx5IHNuYXAgdG8gdmlzaWJsZSBhcmVhIG9uIFkgYXhpcywgZXZl
biB3aGVuIHRoZSBub24tdmlzaWJsZSBvbmVzIGFyZSBjbG9zZXIgYXNzZXJ0X2VxdWFsczogZXhw
ZWN0ZWQgODAwIGJ1dCBnb3QgNzAwCitQQVNTIE9ubHkgc25hcCB0byB2aXNpYmxlIGFyZWEgb24g
WSBheGlzLCBldmVuIHdoZW4gdGhlIG5vbi12aXNpYmxlIG9uZXMgYXJlIGNsb3NlcgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435766</attachid>
            <date>2021-08-18 07:58:24 -0700</date>
            <delta_ts>2021-08-18 08:59:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227949-20210818165823.patch</filename>
            <type>text/plain</type>
            <size>10688</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNjYzdiNzcyOWFiOWIw
OTAxZGJmZDgzY2I4MTEzODM0NmJiZjU3NC4uNWYyYWIxNWVlYTdlMzM0ZWUwNDY0NmNmOWM4MzBj
NDRlMzRiMDFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIxLTA4LTE4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBEb24ndCBzbmFwIHRvIG9mZnNjcmVlbiBzbmFwIGFyZWFzIGluIHVuaWRpcmVjdGlv
bmFsIHNjcm9sbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNzk0OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODA4OTU3ODM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRnLDqWTDqXJpYyBXYW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhp
cyBpcyBjb3ZlcmVkIGJ5IHR3byBleGlzdGluZyBXUFQgdGVzdHMuCisKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcG9uZW50Rm9yQXhpcyk6IEFkZGVkIHRoaXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6
aGFzQ29tcGF0aWJsZVNuYXBBcmVhKTogQWRkZWQgdGhpcyBoZWxwZXIgdGhhdCBjaGVja3MgdG8g
c2VlIGlmIGFueSBvZiB0aGUgc25hcCBhcmVhcworICAgICAgICBhdCBhIGdpdmVuIHNjcm9sbCBz
bmFwIHBvc2l0aW9uIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHZpZXdwb3J0LgorICAgICAgICAo
V2ViQ29yZTo6YWRqdXN0UHJldmlvdXNBbmROZXh0Rm9yT25zY3JlZW5TbmFwQXJlYXMpOiBBZGp1
c3RzIHRoZSBzZWxlY3RlZCBwcmV2aW91cyBhbmQgbmV4dCBzbmFwCisgICAgICAgIHBvc2l0aW9u
cyBieSBsb29raW5nIGJhY2t3YXJkIGFuZCBmb3J3YXJkIGZvciB0aGUgZmlyc3QgY29tcGF0aWJs
ZSBzbmFwIHBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXRXaXRo
SW5mb0FuZEF4aXMpOiBVc2UgdGhlIG5ldyBoZWxwZXIuCisKIDIwMjEtMDgtMTggIFhhYmllciBS
b2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVh
bWVyXVtFTUVdIFRyeSB0byBwYXJzZSBYTUwgaW5pdCBkYXRhcyB0aGF0IGNvdWxkIHBvc3NpYmx5
IGNvbWUgZnJvbSBNUEQgbWFuaWZlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAppbmRleCBmMTMzMjU5ZGJiYzU0
ODgxOWU5MzNlYjc1OTYzOGUxNzFhYjdlMmE3Li5hOTA1MjUyMmIwY2ZmYmYwY2Y5MTUwZTNlMGNh
MmU2MjgwNTdlOTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTEwMCw2ICsxMDAsNTkgQEAgc3RhdGlj
IFBvdGVudGlhbFNuYXBQb2ludFNlYXJjaFJlc3VsdDxVbml0VHlwZT4gc2VhcmNoRm9yUG90ZW50
aWFsU25hcFBvaW50cyhjb24KICAgICByZXR1cm4geyBwcmV2aW91cywgbmV4dCwgc25hcFN0b3As
IGxhbmRlZEluc2lkZVNuYXBBcmVhVGhhdENvbnN1bWVzVmlld3BvcnQgfTsKIH0KIAordGVtcGxh
dGUgPHR5cGVuYW1lIFVuaXRUeXBlLCB0eXBlbmFtZSBQb2ludFR5cGU+CitzdGF0aWMgVW5pdFR5
cGUgY29tcG9uZW50Rm9yQXhpcyhQb2ludFR5cGUgcG9pbnQsIFNjcm9sbEV2ZW50QXhpcyBheGlz
KQoreworICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHBv
aW50LngoKSA6IHBvaW50LnkoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEluZm9UeXBlLCB0
eXBlbmFtZSBVbml0VHlwZSwgdHlwZW5hbWUgUG9pbnRUeXBlLCB0eXBlbmFtZSBTaXplVHlwZT4K
K3N0YXRpYyBib29sIGhhc0NvbXBhdGlibGVTbmFwQXJlYShjb25zdCBJbmZvVHlwZSYgaW5mbywg
Y29uc3QgU25hcE9mZnNldDxVbml0VHlwZT4mIHNuYXBPZmZzZXQsIFNjcm9sbEV2ZW50QXhpcyBh
eGlzLCBjb25zdCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBQb2ludFR5cGUgZGVzdGluYXRpb25P
ZmZzZXRQb2ludCkKK3sKKyAgICBhdXRvIG90aGVyQXhpcyA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsID8gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCA6IFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbDsKKyAgICBhdXRvIHNjcm9sbERlc3RpbmF0aW9uSW5PdGhlckF4aXMg
PSBjb21wb25lbnRGb3JBeGlzPFVuaXRUeXBlLCBQb2ludFR5cGU+KGRlc3RpbmF0aW9uT2Zmc2V0
UG9pbnQsIG90aGVyQXhpcyk7CisgICAgYXV0byB2aWV3cG9ydExlbmd0aEluT3RoZXJBeGlzID0g
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyB2aWV3cG9ydFNpemUuaGVpZ2h0
KCkgOiB2aWV3cG9ydFNpemUud2lkdGgoKTsKKworICAgIHJldHVybiBzbmFwT2Zmc2V0LnNuYXBB
cmVhSW5kaWNlcy5maW5kTWF0Y2hpbmcoWyZdIChhdXRvIGluZGV4KSB7CisgICAgICAgIGNvbnN0
IGF1dG8mIHNuYXBBcmVhID0gaW5mby5zbmFwQXJlYXNbaW5kZXhdOworICAgICAgICBhdXRvIFtv
dGhlckF4aXNNaW4sIG90aGVyQXhpc01heF0gPSByYW5nZUZvckF4aXM8VW5pdFR5cGU+KHNuYXBB
cmVhLCBvdGhlckF4aXMpOworICAgICAgICByZXR1cm4gKHNjcm9sbERlc3RpbmF0aW9uSW5PdGhl
ckF4aXMgKyB2aWV3cG9ydExlbmd0aEluT3RoZXJBeGlzKSA+IG90aGVyQXhpc01pbiAmJiBzY3Jv
bGxEZXN0aW5hdGlvbkluT3RoZXJBeGlzIDwgb3RoZXJBeGlzTWF4OworICAgIH0pICE9IG5vdEZv
dW5kOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5mb1R5cGUsIHR5cGVuYW1lIFVuaXRUeXBl
LCB0eXBlbmFtZSBQb2ludFR5cGUsIHR5cGVuYW1lIFNpemVUeXBlPgorc3RhdGljIHZvaWQgYWRq
dXN0UHJldmlvdXNBbmROZXh0Rm9yT25TY3JlZW5TbmFwQXJlYXMoY29uc3QgSW5mb1R5cGUmIGlu
Zm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBQ
b2ludFR5cGUgZGVzdGluYXRpb25PZmZzZXRQb2ludCwgUG90ZW50aWFsU25hcFBvaW50U2VhcmNo
UmVzdWx0PFVuaXRUeXBlPiYgc2VhcmNoUmVzdWx0KQoreworICAgIC8vIGhhc0NvbXBhdGlibGVT
bmFwQXJlYSBuZWVkcyB0byBsb29rIGF0IGFsbCBjb21wYXRpYmxlIHNuYXAgYXJlYXMsIHdoaWNo
IG1pZ2h0IGJlIGEgbGFyZ2UKKyAgICAvLyBudW1iZXIgZm9yIHNuYXAgYXJlYXMgYXJyYW5nZWQg
aW4gYSBncmlkLiBTaW5jZSB0aGlzIG1pZ2h0IGJlIGV4cGVuc2l2ZSwgdGhpcyBjb2RlIHRyaWVz
CisgICAgLy8gdG8gbG9vayBhdCB0aGUgbW9zdGx5IGNsb3Nlc3QgY29tcGF0aWJsZSBzbmFwIGFy
ZWFzIGZpcnN0LgorICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzID0gaW5mby5vZmZzZXRzRm9y
QXhpcyhheGlzKTsKKyAgICBpZiAoc2VhcmNoUmVzdWx0LnByZXZpb3VzKSB7CisgICAgICAgIHVu
c2lnbmVkIG9sZEluZGV4ID0gKCpzZWFyY2hSZXN1bHQucHJldmlvdXMpLnNlY29uZDsKKyAgICAg
ICAgc2VhcmNoUmVzdWx0LnByZXZpb3VzLnJlc2V0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
b2Zmc2V0ID0gMDsgb2Zmc2V0IDw9IG9sZEluZGV4OyBvZmZzZXQrKykgeworICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBvbGRJbmRleCAtIG9mZnNldDsKKyAgICAgICAgICAgIGNvbnN0IGF1
dG8mIHNuYXBPZmZzZXQgPSBzbmFwT2Zmc2V0c1tpbmRleF07CisgICAgICAgICAgICBpZiAoaGFz
Q29tcGF0aWJsZVNuYXBBcmVhKGluZm8sIHNuYXBPZmZzZXQsIGF4aXMsIHZpZXdwb3J0U2l6ZSwg
ZGVzdGluYXRpb25PZmZzZXRQb2ludCkpIHsKKyAgICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQu
cHJldmlvdXMgPSB7IHNuYXBPZmZzZXQub2Zmc2V0LCBpbmRleCB9OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNlYXJj
aFJlc3VsdC5uZXh0KSB7CisgICAgICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gKCpzZWFyY2hSZXN1
bHQubmV4dCkuc2Vjb25kOworICAgICAgICBzZWFyY2hSZXN1bHQubmV4dC5yZXNldCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gb2xkSW5kZXg7IGluZGV4IDwgc25hcE9mZnNldHMu
c2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0ID0g
c25hcE9mZnNldHNbaW5kZXhdOworICAgICAgICAgICAgaWYgKGhhc0NvbXBhdGlibGVTbmFwQXJl
YShpbmZvLCBzbmFwT2Zmc2V0LCBheGlzLCB2aWV3cG9ydFNpemUsIGRlc3RpbmF0aW9uT2Zmc2V0
UG9pbnQpKSB7CisgICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0Lm5leHQgPSB7IHNuYXBPZmZz
ZXQub2Zmc2V0LCBpbmRleCB9OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5mb1R5cGUsIHR5
cGVuYW1lIFNpemVUeXBlLCB0eXBlbmFtZSBMYXlvdXRUeXBlLCB0eXBlbmFtZSBQb2ludFR5cGU+
CiBzdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBj
bG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Ny
b2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFNpemVUeXBlJiB2aWV3cG9ydFNpemUsIFBvaW50VHlw
ZSBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldFBvaW50LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRp
b25hbDxMYXlvdXRUeXBlPiBvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpCiB7
CkBAIC0xMTAsOSArMTYzLDEzIEBAIHN0YXRpYyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BCiAgICAgICAgIHJl
dHVybiBwYWlyRm9yTm9TbmFwcGluZzsKIAogICAgIGF1dG8gdmlld3BvcnRMZW5ndGggPSBheGlz
ID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHZpZXdwb3J0U2l6ZS53aWR0aCgpIDog
dmlld3BvcnRTaXplLmhlaWdodCgpOwotICAgIGF1dG8gW3ByZXZpb3VzLCBuZXh0LCBzbmFwU3Rv
cCwgbGFuZGVkSW5zaWRlU25hcEFyZWFUaGF0Q29uc3VtZXNWaWV3cG9ydF0gPSBzZWFyY2hGb3JQ
b3RlbnRpYWxTbmFwUG9pbnRzKGluZm8sIGF4aXMsIHZpZXdwb3J0TGVuZ3RoLCBzY3JvbGxEZXN0
aW5hdGlvbk9mZnNldCwgb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nKTsKLSAg
ICBpZiAoc25hcFN0b3ApCi0gICAgICAgIHJldHVybiAqc25hcFN0b3A7CisgICAgYXV0byBzZWFy
Y2hSZXN1bHQgPSBzZWFyY2hGb3JQb3RlbnRpYWxTbmFwUG9pbnRzKGluZm8sIGF4aXMsIHZpZXdw
b3J0TGVuZ3RoLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgb3JpZ2luYWxPZmZzZXRGb3JEaXJl
Y3Rpb25hbFNuYXBwaW5nKTsKKyAgICBpZiAoc2VhcmNoUmVzdWx0LnNuYXBTdG9wKQorICAgICAg
ICByZXR1cm4gKihzZWFyY2hSZXN1bHQuc25hcFN0b3ApOworCisgICAgYWRqdXN0UHJldmlvdXNB
bmROZXh0Rm9yT25TY3JlZW5TbmFwQXJlYXM8SW5mb1R5cGUsIExheW91dFR5cGUsIFBvaW50VHlw
ZSwgU2l6ZVR5cGU+KGluZm8sIGF4aXMsIHZpZXdwb3J0U2l6ZSwgc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXRQb2ludCwgc2VhcmNoUmVzdWx0KTsKKyAgICBhdXRvJiBwcmV2aW91cyA9IHNlYXJjaFJl
c3VsdC5wcmV2aW91czsKKyAgICBhdXRvJiBuZXh0ID0gc2VhcmNoUmVzdWx0Lm5leHQ7CiAKICAg
ICAvLyBGcm9tIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc2Nyb2xsLXNuYXAtMS8jc25hcC1v
dmVyZmxvdwogICAgIC8vICJJZiB0aGUgc25hcCBhcmVhIGlzIGxhcmdlciB0aGFuIHRoZSBzbmFw
cG9ydCBpbiBhIHBhcnRpY3VsYXIgYXhpcywgdGhlbiBhbnkgc2Nyb2xsIHBvc2l0aW9uCkBAIC0x
MjAsNyArMTc3LDcgQEAgc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0EKICAgICAvLyBwcmV2aW91cyBh
bmQgc3Vic2VxdWVudCBzbmFwIHBvc2l0aW9ucyBpbiB0aGF0IGF4aXMgaXMgbGFyZ2VyIHRoYW4g
c2l6ZSBvZiB0aGUgc25hcHBvcnQgaW4KICAgICAvLyB0aGF0IGF4aXMsIGlzIGEgdmFsaWQgc25h
cCBwb3NpdGlvbiBpbiB0aGF0IGF4aXMuIFRoZSBVQSBtYXkgdXNlIHRoZSBzcGVjaWZpZWQgYWxp
Z25tZW50IGFzIGEKICAgICAvLyBtb3JlIHByZWNpc2UgdGFyZ2V0IGZvciBjZXJ0YWluIHNjcm9s
bCBvcGVyYXRpb25zIChlLmcuIGV4cGxpY2l0IHBhZ2luZykuIgotICAgIGlmIChsYW5kZWRJbnNp
ZGVTbmFwQXJlYVRoYXRDb25zdW1lc1ZpZXdwb3J0ICYmICghcHJldmlvdXMgfHwgIW5leHQgfHwg
KCgqbmV4dCkuZmlyc3QgLSAoKnByZXZpb3VzKS5maXJzdCkgPj0gdmlld3BvcnRMZW5ndGgpKQor
ICAgIGlmIChzZWFyY2hSZXN1bHQubGFuZGVkSW5zaWRlU25hcEFyZWFUaGF0Q29uc3VtZXNWaWV3
cG9ydCAmJiAoIXByZXZpb3VzIHx8ICFuZXh0IHx8ICgoKm5leHQpLmZpcnN0IC0gKCpwcmV2aW91
cykuZmlyc3QpID49IHZpZXdwb3J0TGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIHBhaXJGb3JOb1Nu
YXBwaW5nOwogCiAgICAgYXV0byBpc05lYXJFbm91Z2hUb09mZnNldEZvclByb3hpbWl0eSA9IFsm
XShMYXlvdXRUeXBlIGNhbmRpZGF0ZVNuYXBPZmZzZXQpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hh
bmdlTG9nCmluZGV4IDQ5NmRkMzgwODIyNGFmMWIzODAzMjZiZWUzZjc4NGMxMTI5NDUwNmYuLjZl
YTQ3OTU5ZTk4MjJkNzgwYTJlMzAwOTUzZTFmMTI5MWI2ZDJhOGIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTA4LTE4ICBNYXJ0aW4gUm9iaW5z
b24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9sbC1zbmFwXSBE
b24ndCBzbmFwIHRvIG9mZnNjcmVlbiBzbmFwIGFyZWFzIGluIHVuaWRpcmVjdGlvbmFsIHNjcm9s
bHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzk0
OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODA4OTU3ODM+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRnLDqWTDqXJpYyBXYW5nLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9j
c3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLWJvdGgtZXhwZWN0ZWQudHh0OiBU
aGlzIGJpZGlyZWN0aW9uYWwKKyAgICAgICAgc2Nyb2xsaW5nIHRlc3Qgbm8gbG9uZ2VyIHNuYXBz
IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBzdXBwb3J0IGZvciBjaG9vc2luZyBiZXR3ZWVuIHR3byBj
YW5kaWRhdGVzCisgICAgICAgIHByb3Blcmx5IHlldC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJlYXMteC1heGlzLWV4
cGVjdGVkLnR4dDogVXBkYXRlZCB0byBzaG93IG5ld2x5IHBhc3NpbmcgdGVzdC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2libGUt
YXJlYXMteS1heGlzLWV4cGVjdGVkLnR4dDogRGl0dG8uCisKIDIwMjEtMDgtMTcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBEb2N1bWVudCBs
b2FkIGV2ZW50cyBzaG91bGQgdXBkYXRlIHRpbWluZyBpbiBQZXJmb3JtYW5jZU5hdmlnYXRpb25U
aW1pbmcgZXZlbiBhZnRlciBpdHMgaW5zdGFudGlhdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3Nu
YXAtdG8tdmlzaWJsZS1hcmVhcy1ib3RoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZp
c2libGUtYXJlYXMtYm90aC1leHBlY3RlZC50eHQKaW5kZXggOGIwY2E3OGU4ODMyODA2OTgyMzBl
ZGM5MjUxZmYyM2EwNDRkZDVhNy4uNmFhZWJhZjhiYjFmNzBhMzg2NWEzNTA1NjU2NjczOTYyMTdm
ZmQyMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy1ib3RoLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLWJvdGgtZXhwZWN0ZWQu
dHh0CkBAIC0xLDMgKzEsMyBAQAogCi1GQUlMIE9ubHkgc25hcCB0byB2aXNpYmxlIGFyZWFzIGlu
IHRoZSBjYXNlIHdoZXJlIHRha2luZyB0aGUgY2xvc2VzdCBzbmFwIHBvaW50IG9mICAgZWFjaCBh
eGlzIGRvZXMgbm90IHNuYXAgdG8gYSB2aXNpYmxlIGFyZWEgYXNzZXJ0X2VxdWFsczogZXhwZWN0
ZWQgMCBidXQgZ290IDgwMAorRkFJTCBPbmx5IHNuYXAgdG8gdmlzaWJsZSBhcmVhcyBpbiB0aGUg
Y2FzZSB3aGVyZSB0YWtpbmcgdGhlIGNsb3Nlc3Qgc25hcCBwb2ludCBvZiAgIGVhY2ggYXhpcyBk
b2VzIG5vdCBzbmFwIHRvIGEgdmlzaWJsZSBhcmVhIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIDgw
MCBidXQgZ290IDAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy14
LWF4aXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy14LWF4aXMt
ZXhwZWN0ZWQudHh0CmluZGV4IGRhZDM5NzUwOTBhN2ExZWUzNWI4Njk1MzJmNWI0ODI4YzM1OTA3
MTcuLjA1ZmE2MWE0ODM2MTk3MzExZjBiZTcyMDgxNDlmNDljYzBiMjQzYmQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3Jv
bGwtc25hcC9zbmFwLXRvLXZpc2libGUtYXJlYXMteC1heGlzLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xs
LXNuYXAvc25hcC10by12aXNpYmxlLWFyZWFzLXgtYXhpcy1leHBlY3RlZC50eHQKQEAgLTEsMyAr
MSwzIEBACiAKLUZBSUwgT25seSBzbmFwIHRvIHZpc2libGUgYXJlYSBvbiBYIGF4aXMsIGV2ZW4g
d2hlbiB0aGUgbm9uLXZpc2libGUgb25lcyBhcmUgY2xvc2VyIGFzc2VydF9lcXVhbHM6IGV4cGVj
dGVkIDgwMCBidXQgZ290IDcwMAorUEFTUyBPbmx5IHNuYXAgdG8gdmlzaWJsZSBhcmVhIG9uIFgg
YXhpcywgZXZlbiB3aGVuIHRoZSBub24tdmlzaWJsZSBvbmVzIGFyZSBjbG9zZXIKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nz
LXNjcm9sbC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy15LWF4aXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXNjcm9s
bC1zbmFwL3NuYXAtdG8tdmlzaWJsZS1hcmVhcy15LWF4aXMtZXhwZWN0ZWQudHh0CmluZGV4IDIw
YzcwN2ZmOWQwODI5YzM2ZmQwM2I4YWQ5YTk4YWExZjUxMjY4ZjAuLjgwNzMwN2E5NTZiYzQ2N2I4
MDJhMTQ1NzQwNDU0ZDRlZTA4M2I1YjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1zY3JvbGwtc25hcC9zbmFwLXRvLXZpc2li
bGUtYXJlYXMteS1heGlzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mtc2Nyb2xsLXNuYXAvc25hcC10by12aXNpYmxl
LWFyZWFzLXktYXhpcy1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgT25seSBz
bmFwIHRvIHZpc2libGUgYXJlYSBvbiBZIGF4aXMsIGV2ZW4gd2hlbiB0aGUgbm9uLXZpc2libGUg
b25lcyBhcmUgY2xvc2VyIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkIDgwMCBidXQgZ290IDcwMAor
UEFTUyBPbmx5IHNuYXAgdG8gdmlzaWJsZSBhcmVhIG9uIFkgYXhpcywgZXZlbiB3aGVuIHRoZSBu
b24tdmlzaWJsZSBvbmVzIGFyZSBjbG9zZXIKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>