<?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>226538</bug_id>
          
          <creation_ts>2021-06-02 08:21:46 -0700</creation_ts>
          <short_desc>[css-scroll-snap] Snap offsets and active index are duplicated in ScrollController and ScrollableArea</short_desc>
          <delta_ts>2021-06-04 12:51:19 -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>
          
          <blocked>218115</blocked>
    
    <blocked>226630</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>pdr</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>1765999</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-02 08:21:46 -0700</bug_when>
    <thetext>Various information about the current snap &quot;situation&quot; is duplicated between these two classes needlessly. There is also some complicated code keeping the two copies of the information in sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766316</commentid>
    <comment_count>1</comment_count>
      <attachid>430450</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-03 01:29:40 -0700</bug_when>
    <thetext>Created attachment 430450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766338</commentid>
    <comment_count>2</comment_count>
      <attachid>430456</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-03 03:19:51 -0700</bug_when>
    <thetext>Created attachment 430456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766428</commentid>
    <comment_count>3</comment_count>
      <attachid>430456</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-03 10:14:49 -0700</bug_when>
    <thetext>Comment on attachment 430456
Patch

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

&gt; Source/WebCore/platform/ScrollAnimator.h:162
&gt; +    void setSnapOffsetsInfo(const LayoutScrollSnapOffsetsInfo*);

Using a pointer argument makes it unclear about whether the implementation needs to copy the data. In some places, you pass a stack pointer to this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766707</commentid>
    <comment_count>4</comment_count>
      <attachid>430558</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-04 01:03:28 -0700</bug_when>
    <thetext>Created attachment 430558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766709</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-04 01:04:58 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #3)
&gt; Comment on attachment 430456 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430456&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollAnimator.h:162
&gt; &gt; +    void setSnapOffsetsInfo(const LayoutScrollSnapOffsetsInfo*);
&gt; 
&gt; Using a pointer argument makes it unclear about whether the implementation
&gt; needs to copy the data. In some places, you pass a stack pointer to this
&gt; function.

This is a good point. I&apos;ve modified all of these methods to accept a const LayoutScrollSnapOffsetsInfo&amp;. An empty offsets info signals the inner classes to clear the data. I believe that the scrolling tree already relies on this behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766834</commentid>
    <comment_count>6</comment_count>
      <attachid>430558</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-06-04 10:41:02 -0700</bug_when>
    <thetext>Comment on attachment 430558
Patch

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

&gt; Source/WebCore/platform/ScrollableArea.cpp:489
&gt; +    if (ScrollAnimator* scrollAnimator = existingScrollAnimator())

auto

&gt; Source/WebCore/platform/ScrollableArea.cpp:495
&gt; +    if (ScrollAnimator* scrollAnimator = existingScrollAnimator())

auto

&gt; Source/WebCore/platform/ScrollableArea.cpp:502
&gt; +    if (ScrollAnimator* scrollAnimator = existingScrollAnimator())

auto

&gt; Source/WebCore/platform/ScrollableArea.cpp:504
&gt; +    return 0; // FIXME: This should really be invalidSnapOffsetIndex.

Or a std::optional&lt;&gt;

&gt; Source/WebCore/platform/ScrollableArea.cpp:531
&gt; +    size_t activeHorizontalIndex = currentHorizontalSnapPointIndex();

auto

&gt; Source/WebCore/platform/ScrollableArea.cpp:536
&gt; +    size_t activeVerticalIndex = currentVerticalSnapPointIndex();

auto

&gt; Source/WebCore/platform/ScrollableArea.cpp:548
&gt; +    ScrollAnimator* scrollAnimator = existingScrollAnimator();

auto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766847</commentid>
    <comment_count>7</comment_count>
      <attachid>430594</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-04 11:11:12 -0700</bug_when>
    <thetext>Created attachment 430594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766859</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-06-04 11:48:31 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #6)
&gt; Comment on attachment 430558 [details]
&gt; Patch

Thanks for the review!

&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430558&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.cpp:489
&gt; &gt; +    if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
&gt; 
&gt; auto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.cpp:495
&gt; &gt; +    if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
&gt; 
&gt; auto

Fixed.


&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.cpp:502
&gt; &gt; +    if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
&gt; 
&gt; auto

Fixed.


&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.cpp:504
&gt; &gt; +    return 0; // FIXME: This should really be invalidSnapOffsetIndex.
&gt; 
&gt; Or a std::optional&lt;&gt;

This is a great idea! I&apos;ve opened https://bugs.webkit.org/show_bug.cgi?id=226654 for this.
&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.cpp:531
&gt; &gt; +    size_t activeHorizontalIndex = currentHorizontalSnapPointIndex();
&gt; 
&gt; auto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.cpp:536
&gt; &gt; +    size_t activeVerticalIndex = currentVerticalSnapPointIndex();
&gt; 
&gt; auto

Fixed.


&gt; 
&gt; &gt; Source/WebCore/platform/ScrollableArea.cpp:548
&gt; &gt; +    ScrollAnimator* scrollAnimator = existingScrollAnimator();
&gt; 
&gt; auto

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766888</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-04 12:50:40 -0700</bug_when>
    <thetext>Committed r278484 (238502@main): &lt;https://commits.webkit.org/238502@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430594.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766889</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-04 12:51:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/78881467&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430450</attachid>
            <date>2021-06-03 01:29:40 -0700</date>
            <delta_ts>2021-06-03 03:19:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226538-20210603102938.patch</filename>
            <type>text/plain</type>
            <size>26523</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIwMTY1OWU4ODQ4MGJl
YTNhZjJmZDFhNTFiY2YxNDkwYjFjNDRjZi4uZjI3MDI4NzM4YTU1MDQ3MjkxYzE2OGNlOTY4YmUy
ZDA5NWU5MTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTA2LTAyICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTbmFwIG9mZnNldHMgYW5kIGFjdGl2ZSBpbmRleCBhcmUgZHVwbGljYXRlZCBpbiBT
Y3JvbGxDb250cm9sbGVyIGFuZCBTY3JvbGxhYmxlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1cGxpY2F0ZSBjc3Mtc2Nyb2xsLXNu
YXAgc3RhdGUgZnJvbSBTY3JvbGxhYmxlQXJlYS4gVGhpcyBzdGF0ZSBpcyBhbHJlYWR5CisgICAg
ICAgIHN0b3JlZCBpbiBTY3JvbGxDb250cm9sbGVyLCBzbyB3ZSBkbyBub3QgbmVlZCB0byBzdG9y
ZSBpdCBhbHNvIGluIFNjcm9sbGFibGVBcmVhLgorICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJl
bmFtZXMgYSBjb3VwbGUgbWV0aG9kcyBzbyB0aGF0IHRoZXkgaGF2ZSBjbGVhcmVyIGFuZCBtb3Jl
CisgICAgICAgIGNvbnNpc3RlbnQgbmFtZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlz
IHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tz
KTogdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkgaXMgbm93IGNhbGxlZAorICAgICAgICByZXNuYXBB
ZnRlckxheW91dCgpLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwOiBzbmFwT2Zmc2V0SW5mbygpIGlzIG5vdyBjYWxsZWQKKyAgICAgICAgc25h
cE9mZnNldHNJbmZvKCkuCisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsU25h
cFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVG
cm9tU3RhdGVOb2RlKTogVXNlIG5ldyBtZXRob2QgbmFtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6dXBk
YXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KTogV2Ugbm8gbG9uZ2VyIG5lZWQgdG8K
KyAgICAgICAgc3luYyBzdGF0ZSB3aXRoIFNjcm9sbGFibGUgQXJlYS4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRTbmFwT2Zmc2V0c0luZm8pOiBBZGRlZCB0aGlzIHNldHRl
ciB3aGljaAorICAgICAgICBjYWxscyB0aHJvdWdoIHRvIFNjcm9sbENvbnRyb2xsZXIuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogQWRk
ZWQgdGhpcyBnZXR0ZXIgd2hpY2ggY2FsbHMgdGhyb3VnaAorICAgICAgICB0byBTY3JvbGxDb250
cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRleEZvckF4aXMpOiBBZGRlZCB0aGlzIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOiBVcGRhdGUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nIGNvbnN0KTogVXNlIG5l
dyBtZXRob2QgbmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxs
b3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xs
ZXI6OnNldFNuYXBPZmZzZXRzSW5mbyk6IENvbWJpbmVkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSBh
bmQKKyAgICAgICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyBpbnRvIHRoaXMgbWV0aG9kLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTog
QWRkZWQgdGhpcyBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5o
OiBVcGRhdGUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hl
ZWxFdmVudEZvclNjcm9sbGluZyk6IFdlIG5vIGxvbmdlciBuZWVkIHRvIHN5bmMKKyAgICAgICAg
ZnJvbSB0aGUgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogUmVuYW1lZCB0aGlzIGdldHRlci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyk6IFRoaXMg
bm93IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgU2Nyb2xsQ29udHJvbGxlci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJ
bmRleCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQpOiBSZW5hbWVkIHRoaXMgbWV0aG9kIGFuZCBtb3ZlZAor
ICAgICAgICBzZXR0aW5nIHRoZSBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gdG8gc2V0U2Nyb2xsU25h
cE9mZnNldEluZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZG9Qb3N0VGh1
bWJNb3ZlU25hcHBpbmcpOiBVc2UgbmV3IG1ldGhvZHMgdG8gYWNjZXNzCisgICAgICAgIHNjcm9s
bCBzbmFwIHN0YXRlIGFuZCByZXR1cm4gZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBhIFNjcm9sbEFu
aW1hdG9yIGFscmVhZHkuCisgICAgICAgIFRoaXMgd2FzIGRvbmUgaW1wbGljaXRseSBpbiB0aGUg
cHJldmlvdXMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA6
IFVwZGF0ZSBtZXRob2QgZGVmaW5pdGlvbnMgYW5kCisgICAgICAgIHJlbW92ZSBtZW1iZXJzIHRo
YXQgYXJlIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogVXNlIG5ldyBtZXRob2Qg
bmFtZS4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnNjcm9sbFNuYXBPZmZzZXRzKTogRGl0dG8uCisKIDIwMjEtMDYtMDIgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI3
Njg4Mik6IFN0eWxlIG5vdCBpbnZhbGlkYXRlZCBjb3JyZWN0bHkgZm9yIG1lZGlhIHF1ZXJpZXMg
aW4gc2hhZG93IHRyZWVzIHRoYXQgc2hhcmUgc3R5bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCAyYTk1NmMyOWEzNzRlMGIxZDg3MzRjMWM3ZTg5ZWQ0ODRhYWVlZjZlLi5hMjQ0N2Vh
Y2JlOGIyZjg5MzYyMWJjYmQ3ZmFlNTFmMzU5NDQxNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0zMzU5LDcgKzMzNTksNyBAQCB2b2lkIEZyYW1lVmlldzo6cGVyZm9ybVBvc3RM
YXlvdXRUYXNrcygpCiAgICAgdXBkYXRlTGF5b3V0Vmlld3BvcnQoKTsKICAgICB2aWV3cG9ydENv
bnRlbnRzQ2hhbmdlZCgpOwogCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgcmVz
bmFwQWZ0ZXJMYXlvdXQoKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGZyYW1l
KCkuZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5w
ZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCBl
ODA1N2YzOGQ3MDNkNjY2ZmYwNGIwODkyZGYwNTljMDVkZWIwZGE3Li4yZjIyODc0ZGMxMGU3ZWQx
MzM0MDFkNzE0MGMxYWJmYzRkMDhhOTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtNzA4
LDcgKzcwOCw3IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsaW5n
Tm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkoU2Nyb2xsaW5nCiAKICNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQogICAgIHNjcm9sbGFibGVBcmVhLnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAg
c2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KHNjcm9sbGluZ05vZGUsIHNj
cm9sbGFibGVBcmVhLnNuYXBPZmZzZXRJbmZvKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CisgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KHNjcm9sbGlu
Z05vZGUsIHNjcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRzSW5mbygpLCBtX3BhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCkpOwogICAgIHNjcm9sbGluZ05vZGUuc2V0Q3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleChzY3JvbGxhYmxlQXJlYS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KCkpOwogICAgIHNjcm9sbGluZ05vZGUuc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgo
c2Nyb2xsYWJsZUFyZWEuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSk7CiAjZW5kaWYK
QEAgLTkwMiw3ICs5MDIsNyBAQCBib29sIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgYwogdm9pZCBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZp
ZXcoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgaWYgKGF1dG8gbm9kZSA9IGRv
d25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+c3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSkpIHsKLSAg
ICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KCpub2RlLCBmcmFt
ZVZpZXcuc25hcE9mZnNldEluZm8oKSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAg
ICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KCpub2RlLCBmcmFt
ZVZpZXcuc25hcE9mZnNldHNJbmZvKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAg
ICAgICAgIG5vZGUtPnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoZnJhbWVWaWV3
LmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CiAgICAgICAgIG5vZGUtPnNldEN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGZyYW1lVmlldy5jdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjLm1tCmluZGV4IDlhYjczYWE5MmIyMWY1YjMzMWNkNTAwMmZiODhhNjBkYjRj
ZjUzMDYuLmU4MDViNTZjYTFhNmFlODZkNDgyY2UxOGRjMTAwYzM4ZTY1M2Y2ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCkBAIC02NCw4ICs2
NCwxMCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0
ZUZyb21TdGF0ZU5vZGUoY29uc3QgU2Nyb2xsaW5nUwogICAgIH0KIAogI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6U25hcE9mZnNldHNJbmZvKSkKLSAgICAg
ICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpLmNvbnZlcnRVbml0czxMYXlvdXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8+KCkpOworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OlNuYXBPZmZzZXRzSW5mbykpIHsKKyAg
ICAgICAgYXV0byBpbmZvID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpLmNv
bnZlcnRVbml0czxMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+KCk7CisgICAgICAgIG1fc2Ny
b2xsQ29udHJvbGxlci5zZXRTbmFwT2Zmc2V0c0luZm8oJmluZm8pOworICAgIH0KIAogICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9k
ZTo6UHJvcGVydHk6OkN1cnJlbnRIb3Jpem9udGFsU25hcE9mZnNldEluZGV4KSkKICAgICAgICAg
bV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsLCBzY3JvbGxpbmdTdGF0ZU5vZGUuY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcAppbmRleCBiMzBlZDNmM2ZhMjFmYzk0NTdjM2NmYTllYzdmMGFlZmYzMTVkZDJhLi4y
YmQyMjk4MTI4NjJlNGNjOTdiNWRmMDAyNzM3MzllOTdmZmJjZjVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0xODgsNiArMTg4LDExIEBAIHVuc2ln
bmVkIFNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzKSBjb25zCiB7CiAgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJvbGxlci5hY3Rp
dmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMpOwogfQorCit2b2lkIFNjcm9sbEFuaW1hdG9y
OjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCB1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgaW5kZXgpOworfQogI2VuZGlmCiAKIGJvb2wg
U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiBlKQpAQCAtMjcwLDEwICsyNzUsNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRhdGVBY3Rp
dmVTY3JvbGxTbmFwSW5kZXhGb3JPZmZzZXQoKQogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CiAgICAgYXV0byBzY3JvbGxPZmZzZXQgPSBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihyb3VuZGVkSW50UG9pbnQoY3VycmVudFBvc2l0aW9uKCkpKTsKICAgICBtX3Nj
cm9sbENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoc2Nyb2xs
T2Zmc2V0KTsKLSAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRl
eERpZENoYW5nZSgpKSB7Ci0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleChtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcElu
ZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKLSAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChtX3Njcm9sbENvbnRy
b2xsZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsKSk7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTI4OCw5ICsyODksMTQgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEp
CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotdm9pZCBTY3JvbGxBbmltYXRvcjo6
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldFNuYXBPZmZz
ZXRzSW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8qIGluZm8pCit7CisgICAg
bV9zY3JvbGxDb250cm9sbGVyLnNldFNuYXBPZmZzZXRzSW5mbyhpbmZvKTsKK30KKworY29uc3Qg
TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBTY3JvbGxBbmltYXRvcjo6c25hcE9mZnNldHNJ
bmZvKCkgY29uc3QKIHsKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFN0
YXRlKG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuc25h
cE9mZnNldHNJbmZvKCk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbE9m
ZnNldCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRl
eCBiNTdkMzM2MGU5NTU1ODE1YjIzM2YxNTg5ODU2ZTdkYzNlYjQyODBmLi4xYmZmOTMxZDAwODk2
OGJiZjY5MzZjOTg0YTViMWMwYmY4YWI1N2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmgKQEAgLTE1OCw2ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVTY3JvbGxTbmFwU3RhdGUoKTsKICAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENo
YW5nZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRl
eEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCBpbmRleCk7CisgICAgdm9pZCBzZXRT
bmFwT2Zmc2V0c0luZm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKik7CisgICAg
Y29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBzbmFwT2Zmc2V0c0luZm8oKSBjb25z
dDsKICNlbmRpZgogCiAgICAgLy8gU2Nyb2xsQ29udHJvbGxlckNsaWVudC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKaW5kZXggNzllYTU3MjhkNWMxNzI4
ODhhYTA4ZDYzZDlkOTg5MjAxYWI2OTgzMS4uZjMxYzJmMzUyNDA1NWRjMjA4MjU5NDJkNGExNzVh
NWVjOGE0MDcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxl
ci5jcHAKQEAgLTk5LDIwICs5OSw5IEBAIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNlc1Njcm9s
bFNuYXAoKSBjb25zdAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIAotdm9pZCBTY3Jv
bGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEm
IHNjcm9sbGFibGVBcmVhKQordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRTbmFwT2Zmc2V0c0lu
Zm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBzbmFwT2Zmc2V0SW5mbykKIHsK
LSAgICBjb25zdCBhdXRvKiBzbmFwT2Zmc2V0SW5mbyA9IHNjcm9sbGFibGVBcmVhLnNuYXBPZmZz
ZXRJbmZvKCk7Ci0gICAgaWYgKCFzbmFwT2Zmc2V0SW5mbykgewotICAgICAgICBtX3Njcm9sbFNu
YXBTdGF0ZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1cGRhdGVT
Y3JvbGxTbmFwUG9pbnRzKCpzbmFwT2Zmc2V0SW5mbyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJv
bGxlcjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0
c0luZm8mIHNuYXBPZmZzZXRJbmZvKQotewotICAgIGlmIChzbmFwT2Zmc2V0SW5mby5pc0VtcHR5
KCkpIHsKKyAgICBpZiAoIXNuYXBPZmZzZXRJbmZvIHx8IHNuYXBPZmZzZXRJbmZvLT5pc0VtcHR5
KCkpIHsKICAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTIxLDEyICsxMTAsMTcgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1
cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYK
ICAgICBpZiAoIW1fc2Nyb2xsU25hcFN0YXRlKQogICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9
IG1ha2VVbmlxdWU8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+KCk7CiAKLSAgICBtX3Njcm9sbFNu
YXBTdGF0ZS0+c2V0U25hcE9mZnNldEluZm8oc25hcE9mZnNldEluZm8pOworICAgIG1fc2Nyb2xs
U25hcFN0YXRlLT5zZXRTbmFwT2Zmc2V0SW5mbygqc25hcE9mZnNldEluZm8pOwogCiAgICAgaWYg
KHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMpCiAgICAgICAgIHNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRpY2VzRm9yT2Zmc2V0KHJvdW5kZWRJbnRQb2ludChtX2NsaWVudC5zY3JvbGxPZmZz
ZXQoKSkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Ny
b2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGUgbmV3IHN0
YXRlOiAiIDw8IFZhbHVlT3JOdWxsKG1fc2Nyb2xsU25hcFN0YXRlLmdldCgpKSk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8
IHRoaXMgPDwgIiBzZXRTbmFwT2Zmc2V0c0luZm8gbmV3IHN0YXRlOiAiIDw8IFZhbHVlT3JOdWxs
KG1fc2Nyb2xsU25hcFN0YXRlLmdldCgpKSk7Cit9CisKK2NvbnN0IExheW91dFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbyogU2Nyb2xsQ29udHJvbGxlcjo6c25hcE9mZnNldHNJbmZvKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zY3JvbGxTbmFwU3RhdGUgPyAmbV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBP
ZmZzZXRJbmZvKCkgOiBudWxscHRyOwogfQogCiB1bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjph
Y3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCmluZGV4IGZlNDU4YjM2
ODIwNzliNDkzYjY4MTkwYzZhZGMxYzY1ZWRmMGI4ZmYuLmY5MGE0M2Y4ZTg3NGE2YmUzMzBlYjRi
MjRmMjczYWE3MDI4NDNhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250
cm9sbGVyLmgKQEAgLTEzOSw3ICsxMzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbmltYXRpb25D
YWxsYmFjayhNb25vdG9uaWNUaW1lKTsKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbyYpOworICAgIHZvaWQgc2V0U25hcE9mZnNldHNJbmZvKGNvbnN0IExheW91dFNjcm9s
bFNuYXBPZmZzZXRzSW5mbyopOworICAgIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5m
byogc25hcE9mZnNldHNJbmZvKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFw
SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywgdW5zaWduZWQpOwogICAgIHZvaWQgc2V0QWN0
aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Nyb2xsT2Zmc2V0KTsKICAgICBib29sIGFj
dGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Ny
b2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHAKaW5kZXggYTE3N2U4MGQ1ZGMzMjFhODg3ZjgwYmZiYjQxNDIyYWEzNTQ0ZTc0
ZS4uYTBmZjY1Y2EwZjZhYTc2NzdhY2Y5MzczNTAyZjBmNDFjN2Y5Y2M1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtNTAsMTIgKzUwLDcgQEAgc3Ry
dWN0IFNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBi
b29sIHdlYWtQdHJGYWN0b3JXYXNDb25zdHJ1Y3RlZE9uTWFpblRocmVhZDsKICNlbmRpZgotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCogcG9pbnRlcnNbM107Ci0gICAgdW5z
aWduZWQgY3VycmVudEluZGljZXNbMl07Ci0jZWxzZQogICAgIHZvaWQqIHBvaW50ZXJbMl07Ci0j
ZW5kaWYKICAgICBJbnRQb2ludCBvcmlnaW47CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7
CiB9OwpAQCAtMjE3LDEyICsyMTIsNiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZQogICAgIGJv
b2wgaGFuZGxlZEV2ZW50ID0gc2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVs
RXZlbnQpOwogICAgIAogICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAi
U2Nyb2xsYWJsZUFyZWEgKCIgPDwgKnRoaXMgPDwgIikgaGFuZGxlV2hlZWxFdmVudCAtIGhhbmRs
ZWQgIiA8PCBoYW5kbGVkRXZlbnQpOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAg
aWYgKHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkpIHsK
LSAgICAgICAgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxBbmltYXRv
cigpLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsKSk7Ci0gICAgICAgIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNjcm9sbEFu
aW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZl
cnRpY2FsKSk7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIGhhbmRsZWRFdmVudDsKIH0KIApA
QCAtNDc5LDE2ICs0NjgsOSBAQCBTdHJpbmcgU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xs
YmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi1MYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8mIFNjcm9sbGFibGVBcmVhOjplbnN1cmVT
bmFwT2Zmc2V0c0luZm8oKQorY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBTY3Jv
bGxhYmxlQXJlYTo6c25hcE9mZnNldHNJbmZvKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fc25hcE9m
ZnNldHNJbmZvKQotICAgICAgICBtX3NuYXBPZmZzZXRzSW5mbyA9IG1ha2VVbmlxdWU8TGF5b3V0
U2Nyb2xsU25hcE9mZnNldHNJbmZvPigpOwotICAgIHJldHVybiAqbV9zbmFwT2Zmc2V0c0luZm87
Ci19Ci0KLWNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFyZWE6
OnNuYXBPZmZzZXRJbmZvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm8u
Z2V0KCk7CisgICAgcmV0dXJuIGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSA/IGV4aXN0aW5nU2Ny
b2xsQW5pbWF0b3IoKS0+c25hcE9mZnNldHNJbmZvKCkgOiBudWxscHRyOwogfQogCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxT
bmFwT2Zmc2V0c0luZm8mIGluZm8pCkBAIC00OTksNTggKzQ4MSw2MSBAQCB2b2lkIFNjcm9sbGFi
bGVBcmVhOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8mCiAgICAgfQogCiAgICAgLy8gQ29uc2lkZXIgaGF2aW5nIGEgbm9uLWVtcHR5IHNl
dCBvZiBzbmFwIG9mZnNldHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0aGUgU2Nyb2xsQW5pbWF0
b3IuCi0gICAgc2Nyb2xsQW5pbWF0b3IoKTsKLSAgICBlbnN1cmVTbmFwT2Zmc2V0c0luZm8oKSA9
IGluZm87CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRTbmFwT2Zmc2V0c0luZm8oJmluZm8pOwog
fQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKCkKIHsKLSAgICBtX3Nu
YXBPZmZzZXRzSW5mbyA9IG51bGxwdHI7CisgICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxB
bmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9s
bEFuaW1hdG9yLT5zZXRTbmFwT2Zmc2V0c0luZm8obnVsbHB0cik7CiB9CiAKLWJvb2wgU2Nyb2xs
YWJsZUFyZWE6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKK3Vuc2lnbmVkIFNjcm9sbGFibGVBcmVh
OjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ISFtX3NuYXBPZmZzZXRzSW5mbzsKKyAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5p
bWF0b3ItPmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKTsKKyAgICByZXR1cm4gaW52YWxpZFNuYXBPZmZzZXRJbmRleDsKIH0KIAotSW50UG9p
bnQgU2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQoY29uc3QgSW50UG9pbnQm
IGN1cnJlbnRQb3NpdGlvbikKK3Vuc2lnbmVkIFNjcm9sbGFibGVBcmVhOjpjdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3NuYXBPZmZzZXRzSW5mbykK
LSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKLSAgICAKLSAgICBpZiAoIWV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKLQotICAg
IEludFBvaW50IGNvcnJlY3RlZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uOwotCi0gICAgY29u
c3QgYXV0byYgaG9yaXpvbnRhbCA9IG1fc25hcE9mZnNldHNJbmZvLT5ob3Jpem9udGFsU25hcE9m
ZnNldHM7Ci0gICAgc2l6ZV90IGFjdGl2ZUhvcml6b250YWxJbmRleCA9IGN1cnJlbnRIb3Jpem9u
dGFsU25hcFBvaW50SW5kZXgoKTsKLSAgICBpZiAoYWN0aXZlSG9yaXpvbnRhbEluZGV4IDwgaG9y
aXpvbnRhbC5zaXplKCkpCi0gICAgICAgIGNvcnJlY3RlZFBvc2l0aW9uLnNldFgoaG9yaXpvbnRh
bFthY3RpdmVIb3Jpem9udGFsSW5kZXhdLm9mZnNldC50b0ludCgpKTsKKyAgICBpZiAoU2Nyb2xs
QW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAg
ICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgcmV0dXJuIGludmFsaWRTbmFwT2Zmc2V0
SW5kZXg7Cit9CiAKLSAgICBjb25zdCBhdXRvJiB2ZXJ0aWNhbCA9IG1fc25hcE9mZnNldHNJbmZv
LT52ZXJ0aWNhbFNuYXBPZmZzZXRzOwotICAgIHNpemVfdCBhY3RpdmVWZXJ0aWNhbEluZGV4ID0g
Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKLSAgICBpZiAoYWN0aXZlVmVydGljYWxJ
bmRleCA8IHZlcnRpY2FsLnNpemUoKSkKLSAgICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WSh2
ZXJ0aWNhbFthY3RpdmVWZXJ0aWNhbEluZGV4XS5vZmZzZXQudG9JbnQoKSk7Cit2b2lkIFNjcm9s
bGFibGVBcmVhOjpzZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGlu
ZGV4KQoreworICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
QXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGluZGV4KTsKK30KIAotICAgIHJldHVy
biBjb3JyZWN0ZWRQb3NpdGlvbjsKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldEN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHNjcm9sbEFuaW1hdG9y
KCkuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsLCBpbmRleCk7CiB9CiAKLXZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFNuYXBT
dGF0ZSgpCit2b2lkIFNjcm9sbGFibGVBcmVhOjpyZXNuYXBBZnRlckxheW91dCgpCiB7Ci0gICAg
aWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKSkKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwor
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRh
dGVTY3JvbGxTbmFwU3RhdGU6IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNu
YXBJblByb2dyZXNzKCkgPDwgIiBpc1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpKTsKIAotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICBpZiAo
IWV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSB8fCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgfHwg
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICp0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25h
cFN0YXRlOiBpc1Njcm9sbFNuYXBJblByb2dyZXNzICIgPDwgaXNTY3JvbGxTbmFwSW5Qcm9ncmVz
cygpIDw8ICIgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyAiIDw8IGlzVXNlclNjcm9sbEluUHJvZ3Jl
c3MoKSk7Ci0KLSAgICBpZiAoaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIHx8IGlzVXNlclNjcm9s
bEluUHJvZ3Jlc3MoKSkKKyAgICBjb25zdCBhdXRvKiBpbmZvID0gc25hcE9mZnNldHNJbmZvKCk7
CisgICAgaWYgKCFpbmZvKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRQb2ludCBjdXJyZW50
UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbigpOwotICAgIEludFBvaW50IGNvcnJlY3RlZFBvc2l0
aW9uID0gbmVhcmVzdEFjdGl2ZVNuYXBQb2ludChjdXJyZW50UG9zaXRpb24pOworICAgIEludFBv
aW50IGNvcnJlY3RlZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uOworICAgIGNvbnN0IGF1dG8m
IGhvcml6b250YWwgPSBpbmZvLT5ob3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgc2l6ZV90IGFj
dGl2ZUhvcml6b250YWxJbmRleCA9IGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsK
KyAgICBpZiAoYWN0aXZlSG9yaXpvbnRhbEluZGV4IDwgaG9yaXpvbnRhbC5zaXplKCkpCisgICAg
ICAgIGNvcnJlY3RlZFBvc2l0aW9uLnNldFgoaG9yaXpvbnRhbFthY3RpdmVIb3Jpem9udGFsSW5k
ZXhdLm9mZnNldC50b0ludCgpKTsKKworICAgIGNvbnN0IGF1dG8mIHZlcnRpY2FsID0gaW5mby0+
dmVydGljYWxTbmFwT2Zmc2V0czsKKyAgICBzaXplX3QgYWN0aXZlVmVydGljYWxJbmRleCA9IGN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CisgICAgaWYgKGFjdGl2ZVZlcnRpY2FsSW5k
ZXggPCB2ZXJ0aWNhbC5zaXplKCkpCisgICAgICAgIGNvcnJlY3RlZFBvc2l0aW9uLnNldFkodmVy
dGljYWxbYWN0aXZlVmVydGljYWxJbmRleF0ub2Zmc2V0LnRvSW50KCkpOwogCiAgICAgaWYgKGNv
cnJlY3RlZFBvc2l0aW9uICE9IGN1cnJlbnRQb3NpdGlvbikgewogICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICIgYWRqdXN0aW5nIHBvc2l0aW9uIGZyb20gIiA8
PCBjdXJyZW50UG9zaXRpb24gPDwgIiB0byAiIDw8IGNvcnJlY3RlZFBvc2l0aW9uKTsKQEAgLTU2
MCwyMiArNTQ1LDIzIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0
ZSgpCiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRvUG9zdFRodW1iTW92ZVNuYXBwaW5nKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAo
KSkKKyAgICBTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCk7CisgICAgaWYgKCFzY3JvbGxBbmltYXRvcikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byBjdXJyZW50T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CiAgICAgYXV0byBuZXdPZmZz
ZXQgPSBjdXJyZW50T2Zmc2V0OwogICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICBuZXdPZmZzZXQuc2V0WChtX3Njcm9sbEFuaW1hdG9yLT5hZGp1c3RT
Y3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCwgY3VycmVudE9mZnNldC54KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xv
c2VzdCkpOworICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Ny
b2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWws
IGN1cnJlbnRPZmZzZXQueCgpLCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2Q6OkNsb3Nl
c3QpKTsKICAgICBlbHNlCi0gICAgICAgIG5ld09mZnNldC5zZXRZKG1fc2Nyb2xsQW5pbWF0b3It
PmFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCwgY3VycmVudE9mZnNldC55KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhv
ZDo6Q2xvc2VzdCkpOworICAgICAgICBuZXdPZmZzZXQuc2V0WShzY3JvbGxBbmltYXRvci0+YWRq
dXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsLCBjdXJyZW50T2Zmc2V0LnkoKSwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kOjpD
bG9zZXN0KSk7CiAgICAgaWYgKG5ld09mZnNldCA9PSBjdXJyZW50T2Zmc2V0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBzY3JvbGxBbmltYXRvcigpLnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihuZXdPZmZzZXQpOworICAgIHNjcm9sbEFuaW1hdG9yLT5zY3JvbGxUb09mZnNldFdpdGhBbmlt
YXRpb24obmV3T2Zmc2V0KTsKIH0KICNlbHNlCi12b2lkIFNjcm9sbGFibGVBcmVhOjp1cGRhdGVT
Y3JvbGxTbmFwU3RhdGUoKQordm9pZCBTY3JvbGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQo
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCAw
MTk1YTE1NTQzNzlhOWMzZTE2OTVmN2M0NGVjZGQzZGVmZDA3N2ZlLi5lMjdlMDFjYzgwMzQzMWEx
ODVmNmQxYjQ1NTM4YTVjNGU1ZjczMzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmgKQEAgLTg4LDIxICs4OCwxOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmLCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPik7
CiAKLSAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7Ci0KICNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbyogc25hcE9mZnNldEluZm8oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
U25hcE9mZnNldHMoKSB7IH07CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgTGF5b3V0U2Nyb2xs
U25hcE9mZnNldHNJbmZvKiBzbmFwT2Zmc2V0c0luZm8oKSBjb25zdDsKICAgICB2b2lkIHNldFNj
cm9sbFNuYXBPZmZzZXRJbmZvKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYpOwog
ICAgIHZvaWQgY2xlYXJTbmFwT2Zmc2V0cygpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRIb3Jpem9u
dGFsU25hcFBvaW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXg7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0g
aW5kZXg7IH0KLSAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7IH0KLSAgICB2b2lk
IHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fY3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggPSBpbmRleDsgfQotICAgIEludFBvaW50IG5lYXJl
c3RBY3RpdmVTbmFwUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB1
bnNpZ25lZCBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgdW5zaWduZWQgY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50
SW5kZXgodW5zaWduZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXgodW5zaWduZWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIHVwZGF0ZVNj
cm9sbFNuYXBTdGF0ZSgpOworICAgIHZvaWQgcmVzbmFwQWZ0ZXJMYXlvdXQoKTsKICAgICB2b2lk
IGRvUG9zdFRodW1iTW92ZVNuYXBwaW5nKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKIAogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCkBAIC0zODQsMTMgKzM4MSw2IEBAIHByaXZhdGU6CiAKICAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsK
IAotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgTGF5b3V0U2Nyb2xsU25hcE9mZnNl
dHNJbmZvJiBlbnN1cmVTbmFwT2Zmc2V0c0luZm8oKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5
b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvPiBtX3NuYXBPZmZzZXRzSW5mbzsKLSAgICB1bnNpZ25l
ZCBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggeyAwIH07Ci0gICAgdW5zaWduZWQg
bV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKLSNlbmRpZgotCiAgICAgLy8g
VGhlcmUgYXJlIDggcG9zc2libGUgY29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9kZSBhbmQgZGly
ZWN0aW9uLiBTY3JvbGwgb3JpZ2luIHdpbGwgYmUgbm9uLXplcm8gaW4gdGhlIHggb3IgeSBheGlz
CiAgICAgLy8gaWYgdGhlcmUgaXMgYW55IHJldmVyc2VkIGRpcmVjdGlvbiBvciB3cml0aW5nLW1v
ZGUuIFRoZSBjb21iaW5hdGlvbnMgYXJlOgogICAgIC8vIHdyaXRpbmctbW9kZSAvIGRpcmVjdGlv
biAgICAgc2Nyb2xsT3JpZ2luLngoKSBzZXQgICAgc2Nyb2xsT3JpZ2luLnkoKSBzZXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCBi
MWYzNzViZmE1N2JkYTE1MDkzZGEyYmFmYTUzNTViMWRhZmY0YWM4Li5iMWVjMmM2NGJlNWI2NzMw
Y2RkYzJjMGM4MDg1ZWQyOWI3NDg5OTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0xMzAzLDcgKzEzMDMsNyBAQCBib29sIFNj
cm9sbEFuaW1hdG9yTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbAogICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0g
bV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkg
JiYgd2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpICYmIG1fc2Nyb2xsYWJsZUFyZWEuaXNQaW5u
ZWRGb3JTY3JvbGxEZWx0YU9uQXhpcygtd2hlZWxFdmVudC5kZWx0YVkoKSwgU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICAgICAgaWYg
KCFldmVudFByZXZlbnRzU3RyZXRjaGluZykKLSAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJl
dGNoaW5nID0gZ2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsLCBtX3Njcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRJbmZvKCkpOworICAgICAg
ICAgICAgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdo
ZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG1fc2Nyb2xsYWJsZUFyZWEuc25h
cE9mZnNldHNJbmZvKCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dT
dHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9CkBAIC0xMzI3LDcg
KzEzMjcsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRj
aGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZQogICAgICAgICBib29sIGV2ZW50UHJl
dmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCkgJiYgd2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpICYmIG1fc2Ny
b2xsYWJsZUFyZWEuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YU9uQXhpcygtd2hlZWxFdmVudC5kZWx0
YVgoKSwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQogICAgICAgICBpZiAoIWV2ZW50UHJldmVudHNTdHJldGNoaW5nKQotICAgICAgICAg
ICAgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVs
RXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgbV9zY3JvbGxhYmxlQXJlYS5zbmFw
T2Zmc2V0SW5mbygpKTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2Vz
dHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwsIG1fc2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNldHNJbmZvKCkpOwogI2VuZGlmCiAgICAgICAg
IHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRj
aGluZzsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggYjQwZDBiODkxZDI0YzliYmQxZmNhOTNmNDQ3
N2Y3ZWQ1OGVjM2YxNi4uMzY5MzE1OWFiOTVmNWViN2Y2YjBhN2U1MTQyNWQ0NWJjYjIzMWIxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmNwcApAQCAtMTIxMiw3ICsxMjEyLDcgQEAgdm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgIGlmIChjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0
Q29tcG9zaXRpbmdVcGRhdGUoKTsKIAotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAg
IHJlc25hcEFmdGVyTGF5b3V0KCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGFlMjQ1ZjA5OThi
OWVlMjhhM2NkYmY2NDk1NmNiYWYzZDRhOTNkNDAuLmYwZmZjZTNiN2E3NTBhODg2M2M4MTRhMzBm
YTQzODk3ZWY1Y2Y2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ3
MjksNyArNDcyOSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpzY3JvbGxTbmFw
T2Zmc2V0cyhFbGVtZW50JiBlbGVtZW50KQogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGF1dG8q
IG9mZnNldEluZm8gPSBzY3JvbGxhYmxlQXJlYS0+c25hcE9mZnNldEluZm8oKTsKKyAgICBhdXRv
KiBvZmZzZXRJbmZvID0gc2Nyb2xsYWJsZUFyZWEtPnNuYXBPZmZzZXRzSW5mbygpOwogICAgIFN0
cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIGlmIChvZmZzZXRJbmZvICYmICFvZmZzZXRJbmZvLT5o
b3Jpem9udGFsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
Imhvcml6b250YWwgPSAiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430456</attachid>
            <date>2021-06-03 03:19:51 -0700</date>
            <delta_ts>2021-06-04 01:03:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226538-20210603121949.patch</filename>
            <type>text/plain</type>
            <size>26593</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIwMTY1OWU4ODQ4MGJl
YTNhZjJmZDFhNTFiY2YxNDkwYjFjNDRjZi4uZjI3MDI4NzM4YTU1MDQ3MjkxYzE2OGNlOTY4YmUy
ZDA5NWU5MTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTA2LTAyICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTbmFwIG9mZnNldHMgYW5kIGFjdGl2ZSBpbmRleCBhcmUgZHVwbGljYXRlZCBpbiBT
Y3JvbGxDb250cm9sbGVyIGFuZCBTY3JvbGxhYmxlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1cGxpY2F0ZSBjc3Mtc2Nyb2xsLXNu
YXAgc3RhdGUgZnJvbSBTY3JvbGxhYmxlQXJlYS4gVGhpcyBzdGF0ZSBpcyBhbHJlYWR5CisgICAg
ICAgIHN0b3JlZCBpbiBTY3JvbGxDb250cm9sbGVyLCBzbyB3ZSBkbyBub3QgbmVlZCB0byBzdG9y
ZSBpdCBhbHNvIGluIFNjcm9sbGFibGVBcmVhLgorICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJl
bmFtZXMgYSBjb3VwbGUgbWV0aG9kcyBzbyB0aGF0IHRoZXkgaGF2ZSBjbGVhcmVyIGFuZCBtb3Jl
CisgICAgICAgIGNvbnNpc3RlbnQgbmFtZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlz
IHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tz
KTogdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkgaXMgbm93IGNhbGxlZAorICAgICAgICByZXNuYXBB
ZnRlckxheW91dCgpLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwOiBzbmFwT2Zmc2V0SW5mbygpIGlzIG5vdyBjYWxsZWQKKyAgICAgICAgc25h
cE9mZnNldHNJbmZvKCkuCisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsU25h
cFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVG
cm9tU3RhdGVOb2RlKTogVXNlIG5ldyBtZXRob2QgbmFtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6dXBk
YXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KTogV2Ugbm8gbG9uZ2VyIG5lZWQgdG8K
KyAgICAgICAgc3luYyBzdGF0ZSB3aXRoIFNjcm9sbGFibGUgQXJlYS4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRTbmFwT2Zmc2V0c0luZm8pOiBBZGRlZCB0aGlzIHNldHRl
ciB3aGljaAorICAgICAgICBjYWxscyB0aHJvdWdoIHRvIFNjcm9sbENvbnRyb2xsZXIuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogQWRk
ZWQgdGhpcyBnZXR0ZXIgd2hpY2ggY2FsbHMgdGhyb3VnaAorICAgICAgICB0byBTY3JvbGxDb250
cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRleEZvckF4aXMpOiBBZGRlZCB0aGlzIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOiBVcGRhdGUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nIGNvbnN0KTogVXNlIG5l
dyBtZXRob2QgbmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxs
b3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xs
ZXI6OnNldFNuYXBPZmZzZXRzSW5mbyk6IENvbWJpbmVkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSBh
bmQKKyAgICAgICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyBpbnRvIHRoaXMgbWV0aG9kLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTog
QWRkZWQgdGhpcyBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5o
OiBVcGRhdGUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hl
ZWxFdmVudEZvclNjcm9sbGluZyk6IFdlIG5vIGxvbmdlciBuZWVkIHRvIHN5bmMKKyAgICAgICAg
ZnJvbSB0aGUgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogUmVuYW1lZCB0aGlzIGdldHRlci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyk6IFRoaXMg
bm93IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgU2Nyb2xsQ29udHJvbGxlci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJ
bmRleCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQpOiBSZW5hbWVkIHRoaXMgbWV0aG9kIGFuZCBtb3ZlZAor
ICAgICAgICBzZXR0aW5nIHRoZSBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gdG8gc2V0U2Nyb2xsU25h
cE9mZnNldEluZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZG9Qb3N0VGh1
bWJNb3ZlU25hcHBpbmcpOiBVc2UgbmV3IG1ldGhvZHMgdG8gYWNjZXNzCisgICAgICAgIHNjcm9s
bCBzbmFwIHN0YXRlIGFuZCByZXR1cm4gZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBhIFNjcm9sbEFu
aW1hdG9yIGFscmVhZHkuCisgICAgICAgIFRoaXMgd2FzIGRvbmUgaW1wbGljaXRseSBpbiB0aGUg
cHJldmlvdXMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA6
IFVwZGF0ZSBtZXRob2QgZGVmaW5pdGlvbnMgYW5kCisgICAgICAgIHJlbW92ZSBtZW1iZXJzIHRo
YXQgYXJlIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogVXNlIG5ldyBtZXRob2Qg
bmFtZS4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnNjcm9sbFNuYXBPZmZzZXRzKTogRGl0dG8uCisKIDIwMjEtMDYtMDIgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI3
Njg4Mik6IFN0eWxlIG5vdCBpbnZhbGlkYXRlZCBjb3JyZWN0bHkgZm9yIG1lZGlhIHF1ZXJpZXMg
aW4gc2hhZG93IHRyZWVzIHRoYXQgc2hhcmUgc3R5bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCAyYTk1NmMyOWEzNzRlMGIxZDg3MzRjMWM3ZTg5ZWQ0ODRhYWVlZjZlLi5hMjQ0N2Vh
Y2JlOGIyZjg5MzYyMWJjYmQ3ZmFlNTFmMzU5NDQxNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0zMzU5LDcgKzMzNTksNyBAQCB2b2lkIEZyYW1lVmlldzo6cGVyZm9ybVBvc3RM
YXlvdXRUYXNrcygpCiAgICAgdXBkYXRlTGF5b3V0Vmlld3BvcnQoKTsKICAgICB2aWV3cG9ydENv
bnRlbnRzQ2hhbmdlZCgpOwogCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgcmVz
bmFwQWZ0ZXJMYXlvdXQoKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGZyYW1l
KCkuZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5w
ZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCBl
ODA1N2YzOGQ3MDNkNjY2ZmYwNGIwODkyZGYwNTljMDVkZWIwZGE3Li4yZjIyODc0ZGMxMGU3ZWQx
MzM0MDFkNzE0MGMxYWJmYzRkMDhhOTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtNzA4
LDcgKzcwOCw3IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsaW5n
Tm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkoU2Nyb2xsaW5nCiAKICNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQogICAgIHNjcm9sbGFibGVBcmVhLnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAg
c2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KHNjcm9sbGluZ05vZGUsIHNj
cm9sbGFibGVBcmVhLnNuYXBPZmZzZXRJbmZvKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CisgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KHNjcm9sbGlu
Z05vZGUsIHNjcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRzSW5mbygpLCBtX3BhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCkpOwogICAgIHNjcm9sbGluZ05vZGUuc2V0Q3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleChzY3JvbGxhYmxlQXJlYS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KCkpOwogICAgIHNjcm9sbGluZ05vZGUuc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgo
c2Nyb2xsYWJsZUFyZWEuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSk7CiAjZW5kaWYK
QEAgLTkwMiw3ICs5MDIsNyBAQCBib29sIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgYwogdm9pZCBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZp
ZXcoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgaWYgKGF1dG8gbm9kZSA9IGRv
d25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+c3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSkpIHsKLSAg
ICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KCpub2RlLCBmcmFt
ZVZpZXcuc25hcE9mZnNldEluZm8oKSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAg
ICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KCpub2RlLCBmcmFt
ZVZpZXcuc25hcE9mZnNldHNJbmZvKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAg
ICAgICAgIG5vZGUtPnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoZnJhbWVWaWV3
LmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CiAgICAgICAgIG5vZGUtPnNldEN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGZyYW1lVmlldy5jdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjLm1tCmluZGV4IDlhYjczYWE5MmIyMWY1YjMzMWNkNTAwMmZiODhhNjBkYjRj
ZjUzMDYuLmU4MDViNTZjYTFhNmFlODZkNDgyY2UxOGRjMTAwYzM4ZTY1M2Y2ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCkBAIC02NCw4ICs2
NCwxMCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnVwZGF0
ZUZyb21TdGF0ZU5vZGUoY29uc3QgU2Nyb2xsaW5nUwogICAgIH0KIAogI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0gICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9wZXJ0eTo6U25hcE9mZnNldHNJbmZvKSkKLSAgICAg
ICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoc2Nyb2xsaW5nU3Rh
dGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpLmNvbnZlcnRVbml0czxMYXlvdXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8+KCkpOworICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OlNuYXBPZmZzZXRzSW5mbykpIHsKKyAg
ICAgICAgYXV0byBpbmZvID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpLmNv
bnZlcnRVbml0czxMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+KCk7CisgICAgICAgIG1fc2Ny
b2xsQ29udHJvbGxlci5zZXRTbmFwT2Zmc2V0c0luZm8oJmluZm8pOworICAgIH0KIAogICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9k
ZTo6UHJvcGVydHk6OkN1cnJlbnRIb3Jpem9udGFsU25hcE9mZnNldEluZGV4KSkKICAgICAgICAg
bV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsLCBzY3JvbGxpbmdTdGF0ZU5vZGUuY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcAppbmRleCBiMzBlZDNmM2ZhMjFmYzk0NTdjM2NmYTllYzdmMGFlZmYzMTVkZDJhLi4y
YmQyMjk4MTI4NjJlNGNjOTdiNWRmMDAyNzM3MzllOTdmZmJjZjVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0xODgsNiArMTg4LDExIEBAIHVuc2ln
bmVkIFNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2
ZW50QXhpcyBheGlzKSBjb25zCiB7CiAgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJvbGxlci5hY3Rp
dmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMpOwogfQorCit2b2lkIFNjcm9sbEFuaW1hdG9y
OjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCB1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgaW5kZXgpOworfQogI2VuZGlmCiAKIGJvb2wg
U2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiBlKQpAQCAtMjcwLDEwICsyNzUsNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRhdGVBY3Rp
dmVTY3JvbGxTbmFwSW5kZXhGb3JPZmZzZXQoKQogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CiAgICAgYXV0byBzY3JvbGxPZmZzZXQgPSBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihyb3VuZGVkSW50UG9pbnQoY3VycmVudFBvc2l0aW9uKCkpKTsKICAgICBtX3Nj
cm9sbENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoc2Nyb2xs
T2Zmc2V0KTsKLSAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRl
eERpZENoYW5nZSgpKSB7Ci0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleChtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcElu
ZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKLSAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChtX3Njcm9sbENvbnRy
b2xsZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsKSk7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTI4OCw5ICsyODksMTQgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEp
CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotdm9pZCBTY3JvbGxBbmltYXRvcjo6
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldFNuYXBPZmZz
ZXRzSW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8qIGluZm8pCit7CisgICAg
bV9zY3JvbGxDb250cm9sbGVyLnNldFNuYXBPZmZzZXRzSW5mbyhpbmZvKTsKK30KKworY29uc3Qg
TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBTY3JvbGxBbmltYXRvcjo6c25hcE9mZnNldHNJ
bmZvKCkgY29uc3QKIHsKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRlU2Nyb2xsU25hcFN0
YXRlKG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuc25h
cE9mZnNldHNJbmZvKCk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbE9m
ZnNldCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRl
eCBiNTdkMzM2MGU5NTU1ODE1YjIzM2YxNTg5ODU2ZTdkYzNlYjQyODBmLi4xYmZmOTMxZDAwODk2
OGJiZjY5MzZjOTg0YTViMWMwYmY4YWI1N2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmgKQEAgLTE1OCw2ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVTY3JvbGxTbmFwU3RhdGUoKTsKICAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENo
YW5nZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRl
eEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCBpbmRleCk7CisgICAgdm9pZCBzZXRT
bmFwT2Zmc2V0c0luZm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKik7CisgICAg
Y29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBzbmFwT2Zmc2V0c0luZm8oKSBjb25z
dDsKICNlbmRpZgogCiAgICAgLy8gU2Nyb2xsQ29udHJvbGxlckNsaWVudC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKaW5kZXggNzllYTU3MjhkNWMxNzI4
ODhhYTA4ZDYzZDlkOTg5MjAxYWI2OTgzMS4uZjMxYzJmMzUyNDA1NWRjMjA4MjU5NDJkNGExNzVh
NWVjOGE0MDcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxl
ci5jcHAKQEAgLTk5LDIwICs5OSw5IEBAIGJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNlc1Njcm9s
bFNuYXAoKSBjb25zdAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIAotdm9pZCBTY3Jv
bGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEm
IHNjcm9sbGFibGVBcmVhKQordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRTbmFwT2Zmc2V0c0lu
Zm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBzbmFwT2Zmc2V0SW5mbykKIHsK
LSAgICBjb25zdCBhdXRvKiBzbmFwT2Zmc2V0SW5mbyA9IHNjcm9sbGFibGVBcmVhLnNuYXBPZmZz
ZXRJbmZvKCk7Ci0gICAgaWYgKCFzbmFwT2Zmc2V0SW5mbykgewotICAgICAgICBtX3Njcm9sbFNu
YXBTdGF0ZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1cGRhdGVT
Y3JvbGxTbmFwUG9pbnRzKCpzbmFwT2Zmc2V0SW5mbyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJv
bGxlcjo6dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0
c0luZm8mIHNuYXBPZmZzZXRJbmZvKQotewotICAgIGlmIChzbmFwT2Zmc2V0SW5mby5pc0VtcHR5
KCkpIHsKKyAgICBpZiAoIXNuYXBPZmZzZXRJbmZvIHx8IHNuYXBPZmZzZXRJbmZvLT5pc0VtcHR5
KCkpIHsKICAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTIxLDEyICsxMTAsMTcgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1
cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYK
ICAgICBpZiAoIW1fc2Nyb2xsU25hcFN0YXRlKQogICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9
IG1ha2VVbmlxdWU8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+KCk7CiAKLSAgICBtX3Njcm9sbFNu
YXBTdGF0ZS0+c2V0U25hcE9mZnNldEluZm8oc25hcE9mZnNldEluZm8pOworICAgIG1fc2Nyb2xs
U25hcFN0YXRlLT5zZXRTbmFwT2Zmc2V0SW5mbygqc25hcE9mZnNldEluZm8pOwogCiAgICAgaWYg
KHNob3VsZENvbXB1dGVDdXJyZW50U25hcEluZGljZXMpCiAgICAgICAgIHNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRpY2VzRm9yT2Zmc2V0KHJvdW5kZWRJbnRQb2ludChtX2NsaWVudC5zY3JvbGxPZmZz
ZXQoKSkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Ny
b2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFwU3RhdGUgbmV3IHN0
YXRlOiAiIDw8IFZhbHVlT3JOdWxsKG1fc2Nyb2xsU25hcFN0YXRlLmdldCgpKSk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8
IHRoaXMgPDwgIiBzZXRTbmFwT2Zmc2V0c0luZm8gbmV3IHN0YXRlOiAiIDw8IFZhbHVlT3JOdWxs
KG1fc2Nyb2xsU25hcFN0YXRlLmdldCgpKSk7Cit9CisKK2NvbnN0IExheW91dFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbyogU2Nyb2xsQ29udHJvbGxlcjo6c25hcE9mZnNldHNJbmZvKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zY3JvbGxTbmFwU3RhdGUgPyAmbV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBP
ZmZzZXRJbmZvKCkgOiBudWxscHRyOwogfQogCiB1bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjph
Y3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCmluZGV4IGZlNDU4YjM2
ODIwNzliNDkzYjY4MTkwYzZhZGMxYzY1ZWRmMGI4ZmYuLmY5MGE0M2Y4ZTg3NGE2YmUzMzBlYjRi
MjRmMjczYWE3MDI4NDNhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250
cm9sbGVyLmgKQEAgLTEzOSw3ICsxMzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbmltYXRpb25D
YWxsYmFjayhNb25vdG9uaWNUaW1lKTsKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbyYpOworICAgIHZvaWQgc2V0U25hcE9mZnNldHNJbmZvKGNvbnN0IExheW91dFNjcm9s
bFNuYXBPZmZzZXRzSW5mbyopOworICAgIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5m
byogc25hcE9mZnNldHNJbmZvKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFw
SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywgdW5zaWduZWQpOwogICAgIHZvaWQgc2V0QWN0
aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQoU2Nyb2xsT2Zmc2V0KTsKICAgICBib29sIGFj
dGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Ny
b2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHAKaW5kZXggYTE3N2U4MGQ1ZGMzMjFhODg3ZjgwYmZiYjQxNDIyYWEzNTQ0ZTc0
ZS4uYmQ4ODE0N2ZiMGQ5MGZmMWY3ZjhkNTRjNmRiMzM0YWU4NTU0ZDFlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcApAQCAtNTAsMTIgKzUwLDcgQEAgc3Ry
dWN0IFNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBi
b29sIHdlYWtQdHJGYWN0b3JXYXNDb25zdHJ1Y3RlZE9uTWFpblRocmVhZDsKICNlbmRpZgotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCogcG9pbnRlcnNbM107Ci0gICAgdW5z
aWduZWQgY3VycmVudEluZGljZXNbMl07Ci0jZWxzZQogICAgIHZvaWQqIHBvaW50ZXJbMl07Ci0j
ZW5kaWYKICAgICBJbnRQb2ludCBvcmlnaW47CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7
CiB9OwpAQCAtMjE3LDEyICsyMTIsNiBAQCBib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZQogICAgIGJv
b2wgaGFuZGxlZEV2ZW50ID0gc2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVs
RXZlbnQpOwogICAgIAogICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAi
U2Nyb2xsYWJsZUFyZWEgKCIgPDwgKnRoaXMgPDwgIikgaGFuZGxlV2hlZWxFdmVudCAtIGhhbmRs
ZWQgIiA8PCBoYW5kbGVkRXZlbnQpOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAg
aWYgKHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkpIHsK
LSAgICAgICAgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxBbmltYXRv
cigpLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsKSk7Ci0gICAgICAgIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNjcm9sbEFu
aW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZl
cnRpY2FsKSk7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIGhhbmRsZWRFdmVudDsKIH0KIApA
QCAtNDc5LDE2ICs0NjgsOSBAQCBTdHJpbmcgU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xs
YmFyU3RhdGVGb3JUZXN0aW5nKCkgY29uc3QKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi1MYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8mIFNjcm9sbGFibGVBcmVhOjplbnN1cmVT
bmFwT2Zmc2V0c0luZm8oKQorY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBTY3Jv
bGxhYmxlQXJlYTo6c25hcE9mZnNldHNJbmZvKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fc25hcE9m
ZnNldHNJbmZvKQotICAgICAgICBtX3NuYXBPZmZzZXRzSW5mbyA9IG1ha2VVbmlxdWU8TGF5b3V0
U2Nyb2xsU25hcE9mZnNldHNJbmZvPigpOwotICAgIHJldHVybiAqbV9zbmFwT2Zmc2V0c0luZm87
Ci19Ci0KLWNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFyZWE6
OnNuYXBPZmZzZXRJbmZvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zbmFwT2Zmc2V0c0luZm8u
Z2V0KCk7CisgICAgcmV0dXJuIGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSA/IGV4aXN0aW5nU2Ny
b2xsQW5pbWF0b3IoKS0+c25hcE9mZnNldHNJbmZvKCkgOiBudWxscHRyOwogfQogCiB2b2lkIFNj
cm9sbGFibGVBcmVhOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxT
bmFwT2Zmc2V0c0luZm8mIGluZm8pCkBAIC00OTksNTggKzQ4MSw2MSBAQCB2b2lkIFNjcm9sbGFi
bGVBcmVhOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8mCiAgICAgfQogCiAgICAgLy8gQ29uc2lkZXIgaGF2aW5nIGEgbm9uLWVtcHR5IHNl
dCBvZiBzbmFwIG9mZnNldHMgYXMgYSBjdWUgdG8gaW5pdGlhbGl6ZSB0aGUgU2Nyb2xsQW5pbWF0
b3IuCi0gICAgc2Nyb2xsQW5pbWF0b3IoKTsKLSAgICBlbnN1cmVTbmFwT2Zmc2V0c0luZm8oKSA9
IGluZm87CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRTbmFwT2Zmc2V0c0luZm8oJmluZm8pOwog
fQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKCkKIHsKLSAgICBtX3Nu
YXBPZmZzZXRzSW5mbyA9IG51bGxwdHI7CisgICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxB
bmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9s
bEFuaW1hdG9yLT5zZXRTbmFwT2Zmc2V0c0luZm8obnVsbHB0cik7CiB9CiAKLWJvb2wgU2Nyb2xs
YWJsZUFyZWE6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKK3Vuc2lnbmVkIFNjcm9sbGFibGVBcmVh
OjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ISFtX3NuYXBPZmZzZXRzSW5mbzsKKyAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5p
bWF0b3ItPmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKTsKKyAgICByZXR1cm4gMDsgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBp
bnZhbGlkU25hcE9mZnNldEluZGV4LgogfQogCi1JbnRQb2ludCBTY3JvbGxhYmxlQXJlYTo6bmVh
cmVzdEFjdGl2ZVNuYXBQb2ludChjb25zdCBJbnRQb2ludCYgY3VycmVudFBvc2l0aW9uKQordW5z
aWduZWQgU2Nyb2xsYWJsZUFyZWE6OmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fc25hcE9mZnNldHNJbmZvKQotICAgICAgICByZXR1cm4gY3VycmVu
dFBvc2l0aW9uOwotICAgIAotICAgIGlmICghZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAg
ICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOwotCi0gICAgSW50UG9pbnQgY29ycmVjdGVkUG9z
aXRpb24gPSBjdXJyZW50UG9zaXRpb247Ci0KLSAgICBjb25zdCBhdXRvJiBob3Jpem9udGFsID0g
bV9zbmFwT2Zmc2V0c0luZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0czsKLSAgICBzaXplX3QgYWN0
aXZlSG9yaXpvbnRhbEluZGV4ID0gY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpOwot
ICAgIGlmIChhY3RpdmVIb3Jpem9udGFsSW5kZXggPCBob3Jpem9udGFsLnNpemUoKSkKLSAgICAg
ICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WChob3Jpem9udGFsW2FjdGl2ZUhvcml6b250YWxJbmRl
eF0ub2Zmc2V0LnRvSW50KCkpOworICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsKTsKKyAgICByZXR1cm4gMDsgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbnZh
bGlkU25hcE9mZnNldEluZGV4LgorfQogCi0gICAgY29uc3QgYXV0byYgdmVydGljYWwgPSBtX3Nu
YXBPZmZzZXRzSW5mby0+dmVydGljYWxTbmFwT2Zmc2V0czsKLSAgICBzaXplX3QgYWN0aXZlVmVy
dGljYWxJbmRleCA9IGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAgaWYgKGFj
dGl2ZVZlcnRpY2FsSW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkpCi0gICAgICAgIGNvcnJlY3RlZFBv
c2l0aW9uLnNldFkodmVydGljYWxbYWN0aXZlVmVydGljYWxJbmRleF0ub2Zmc2V0LnRvSW50KCkp
Owordm9pZCBTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBzY3JvbGxBbmltYXRvcigpLnNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBpbmRleCk7Cit9
CiAKLSAgICByZXR1cm4gY29ycmVjdGVkUG9zaXRpb247Cit2b2lkIFNjcm9sbGFibGVBcmVhOjpz
ZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBz
Y3JvbGxBbmltYXRvcigpLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCwgaW5kZXgpOwogfQogCi12b2lkIFNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxTbmFwU3RhdGUoKQordm9pZCBTY3JvbGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlv
dXQoKQogewotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxT
bmFwU3RhdGUoKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICp0
aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlOiBpc1Njcm9sbFNuYXBJblByb2dyZXNzICIg
PDwgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIDw8ICIgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyAi
IDw8IGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSk7CiAKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFw
KCkpCisgICAgaWYgKCFleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkgfHwgaXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIHx8IGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZTogaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyAiIDw8IGlzU2Nyb2xs
U25hcEluUHJvZ3Jlc3MoKSA8PCAiIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgIiA8PCBpc1VzZXJT
Y3JvbGxJblByb2dyZXNzKCkpOwotCi0gICAgaWYgKGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSB8
fCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCisgICAgY29uc3QgYXV0byogaW5mbyA9IHNuYXBP
ZmZzZXRzSW5mbygpOworICAgIGlmICghaW5mbykKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50
UG9pbnQgY3VycmVudFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKLSAgICBJbnRQb2ludCBj
b3JyZWN0ZWRQb3NpdGlvbiA9IG5lYXJlc3RBY3RpdmVTbmFwUG9pbnQoY3VycmVudFBvc2l0aW9u
KTsKKyAgICBJbnRQb2ludCBjb3JyZWN0ZWRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKKyAg
ICBjb25zdCBhdXRvJiBob3Jpem9udGFsID0gaW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzOwor
ICAgIHNpemVfdCBhY3RpdmVIb3Jpem9udGFsSW5kZXggPSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KCk7CisgICAgaWYgKGFjdGl2ZUhvcml6b250YWxJbmRleCA8IGhvcml6b250YWwu
c2l6ZSgpKQorICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRYKGhvcml6b250YWxbYWN0aXZl
SG9yaXpvbnRhbEluZGV4XS5vZmZzZXQudG9JbnQoKSk7CisKKyAgICBjb25zdCBhdXRvJiB2ZXJ0
aWNhbCA9IGluZm8tPnZlcnRpY2FsU25hcE9mZnNldHM7CisgICAgc2l6ZV90IGFjdGl2ZVZlcnRp
Y2FsSW5kZXggPSBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOworICAgIGlmIChhY3Rp
dmVWZXJ0aWNhbEluZGV4IDwgdmVydGljYWwuc2l6ZSgpKQorICAgICAgICBjb3JyZWN0ZWRQb3Np
dGlvbi5zZXRZKHZlcnRpY2FsW2FjdGl2ZVZlcnRpY2FsSW5kZXhdLm9mZnNldC50b0ludCgpKTsK
IAogICAgIGlmIChjb3JyZWN0ZWRQb3NpdGlvbiAhPSBjdXJyZW50UG9zaXRpb24pIHsKICAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiIGFkanVzdGluZyBwb3Np
dGlvbiBmcm9tICIgPDwgY3VycmVudFBvc2l0aW9uIDw8ICIgdG8gIiA8PCBjb3JyZWN0ZWRQb3Np
dGlvbik7CkBAIC01NjAsMjIgKzU0NSwyMyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjp1cGRhdGVT
Y3JvbGxTbmFwU3RhdGUoKQogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpkb1Bvc3RUaHVtYk1vdmVT
bmFwcGluZyhTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICBpZiAoIXVz
ZXNTY3JvbGxTbmFwKCkpCisgICAgU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpOworICAgIGlmICghc2Nyb2xsQW5pbWF0b3IpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGF1dG8gY3VycmVudE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwogICAg
IGF1dG8gbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldDsKICAgICBpZiAob3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbmV3T2Zmc2V0LnNldFgobV9zY3JvbGxBbmlt
YXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwsIGN1cnJlbnRPZmZzZXQueCgpLCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rp
b25NZXRob2Q6OkNsb3Nlc3QpKTsKKyAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsQW5pbWF0
b3ItPmFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsLCBjdXJyZW50T2Zmc2V0LngoKSwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9u
TWV0aG9kOjpDbG9zZXN0KSk7CiAgICAgZWxzZQotICAgICAgICBuZXdPZmZzZXQuc2V0WShtX3Nj
cm9sbEFuaW1hdG9yLT5hZGp1c3RTY3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwsIGN1cnJlbnRPZmZzZXQueSgpLCBTY3JvbGxTbmFwUG9pbnRT
ZWxlY3Rpb25NZXRob2Q6OkNsb3Nlc3QpKTsKKyAgICAgICAgbmV3T2Zmc2V0LnNldFkoc2Nyb2xs
QW5pbWF0b3ItPmFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCwgY3VycmVudE9mZnNldC55KCksIFNjcm9sbFNuYXBQb2ludFNlbGVj
dGlvbk1ldGhvZDo6Q2xvc2VzdCkpOwogICAgIGlmIChuZXdPZmZzZXQgPT0gY3VycmVudE9mZnNl
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2Nyb2xsQW5pbWF0b3IoKS5zY3JvbGxUb09mZnNl
dFdpdGhBbmltYXRpb24obmV3T2Zmc2V0KTsKKyAgICBzY3JvbGxBbmltYXRvci0+c2Nyb2xsVG9P
ZmZzZXRXaXRoQW5pbWF0aW9uKG5ld09mZnNldCk7CiB9CiAjZWxzZQotdm9pZCBTY3JvbGxhYmxl
QXJlYTo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnJlc25h
cEFmdGVyTGF5b3V0KCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKaW5kZXggMDE5NWExNTU0Mzc5YTljM2UxNjk1ZjdjNDRlY2RkM2RlZmQwNzdmZS4uZTI3
ZTAxY2M4MDM0MzFhMTg1ZjZkMWI0NTUzOGE1YzRlNWY3MzM4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC04OCwyMSArODgsMTggQEAgcHVibGljOgogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxp
bmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jiwgc3RkOjpvcHRpb25hbDxXaGVlbFNjcm9sbEdl
c3R1cmVTdGF0ZT4pOwogCi0gICAgYm9vbCB1c2VzU2Nyb2xsU25hcCgpIGNvbnN0OwotCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBMYXlvdXRT
Y3JvbGxTbmFwT2Zmc2V0c0luZm8qIHNuYXBPZmZzZXRJbmZvKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgeyB9OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0
IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogc25hcE9mZnNldHNJbmZvKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8mKTsKICAgICB2b2lkIGNsZWFyU25hcE9mZnNldHMoKTsKLSAgICB1bnNpZ25lZCBj
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4OyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50SG9yaXpvbnRh
bFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCA9IGluZGV4OyB9Ci0gICAgdW5zaWduZWQgY3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4
OyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh1bnNpZ25lZCBp
bmRleCkgeyBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0gaW5kZXg7IH0KLSAgICBJ
bnRQb2ludCBuZWFyZXN0QWN0aXZlU25hcFBvaW50KGNvbnN0IEludFBvaW50Jik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdW5zaWduZWQgY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDdXJyZW50SG9yaXpv
bnRhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkKTsKICNlbmRpZgogCi0gICAg
dm9pZCB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICB2b2lkIHJlc25hcEFmdGVyTGF5b3V0
KCk7CiAgICAgdm9pZCBkb1Bvc3RUaHVtYk1vdmVTbmFwcGluZyhTY3JvbGxiYXJPcmllbnRhdGlv
bik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzg0LDEzICszODEsNiBAQCBwcml2
YXRlOgogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Ny
b2xsQW5pbWF0b3I7CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIExheW91dFNj
cm9sbFNuYXBPZmZzZXRzSW5mbyYgZW5zdXJlU25hcE9mZnNldHNJbmZvKCk7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbz4gbV9zbmFwT2Zmc2V0c0luZm87
Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4IHsgMCB9Owot
ICAgIHVuc2lnbmVkIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggeyAwIH07Ci0jZW5k
aWYKLQogICAgIC8vIFRoZXJlIGFyZSA4IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5n
IG1vZGUgYW5kIGRpcmVjdGlvbi4gU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRo
ZSB4IG9yIHkgYXhpcwogICAgIC8vIGlmIHRoZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24g
b3Igd3JpdGluZy1tb2RlLiBUaGUgY29tYmluYXRpb25zIGFyZToKICAgICAvLyB3cml0aW5nLW1v
ZGUgLyBkaXJlY3Rpb24gICAgIHNjcm9sbE9yaWdpbi54KCkgc2V0ICAgIHNjcm9sbE9yaWdpbi55
KCkgc2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5p
bWF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMubW0KaW5kZXggYjFmMzc1YmZhNTdiZGExNTA5M2RhMmJhZmE1MzU1YjFkYWZmNGFjOC4uYjFl
YzJjNjRiZTViNjczMGNkZGMyYzBjODA4NWVkMjliNzQ4OTkwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQpAQCAtMTMwMyw3ICsxMzAz
LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWwKICAgICAgICAgYm9vbCBldmVudFByZXZlbnRz
U3RyZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEuaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3RvcigpICYmIHdoZWVsRXZlbnQuaXNHZXN0dXJlU3RhcnQoKSAmJiBtX3Njcm9sbGFi
bGVBcmVhLmlzUGlubmVkRm9yU2Nyb2xsRGVsdGFPbkF4aXMoLXdoZWVsRXZlbnQuZGVsdGFZKCks
IFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CiAgICAgICAgIGlmICghZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcpCi0gICAgICAgICAgICBldmVu
dFByZXZlbnRzU3RyZXRjaGluZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwg
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgbV9zY3JvbGxhYmxlQXJlYS5zbmFwT2Zmc2V0SW5m
bygpKTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3Vs
ZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBtX3Njcm9s
bGFibGVBcmVhLnNuYXBPZmZzZXRzSW5mbygpKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gc2Ny
b2xsYmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAg
fQpAQCAtMTMyNyw3ICsxMzI3LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6YWxsb3dzSG9y
aXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGUKICAgICAgICAg
Ym9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG1fc2Nyb2xsYWJsZUFyZWEuaGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpICYmIHdoZWVsRXZlbnQuaXNHZXN0dXJlU3Rh
cnQoKSAmJiBtX3Njcm9sbGFibGVBcmVhLmlzUGlubmVkRm9yU2Nyb2xsRGVsdGFPbkF4aXMoLXdo
ZWVsRXZlbnQuZGVsdGFYKCksIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKICAgICAgICAgaWYgKCFldmVudFByZXZlbnRzU3RyZXRjaGlu
ZykKLSAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3VsZEJl
Z2luU25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG1fc2Nyb2xs
YWJsZUFyZWEuc25hcE9mZnNldEluZm8oKSk7CisgICAgICAgICAgICBldmVudFByZXZlbnRzU3Ry
ZXRjaGluZyA9IGdlc3R1cmVTaG91bGRCZWdpblNuYXAod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsLCBtX3Njcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRzSW5mbygpKTsKICNl
bmRpZgogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQ
cmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IGI0MGQwYjg5MWQyNGM5
YmJkMWZjYTkzZjQ0NzdmN2VkNThlYzNmMTYuLjM2OTMxNTlhYjk1ZjVlYjdmNmIwYTdlNTE0MjVk
NDViY2IyMzFiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAg
ICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICBtX2xheWVyLnNldE5l
ZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CiAKLSAgICB1cGRhdGVTY3JvbGxTbmFw
U3RhdGUoKTsKKyAgICByZXNuYXBBZnRlckxheW91dCgpOwogfQogCiBib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCBhZTI0NWYwOTk4YjllZTI4YTNjZGJmNjQ5NTZjYmFmM2Q0YTkzZDQwLi5mMGZmY2UzYjdhNzUw
YTg4NjNjODE0YTMwZmE0Mzg5N2VmNWNmNmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC00NzI5LDcgKzQ3MjksNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFs
czo6c2Nyb2xsU25hcE9mZnNldHMoRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoIXNjcm9sbGFi
bGVBcmVhKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
CiAKLSAgICBhdXRvKiBvZmZzZXRJbmZvID0gc2Nyb2xsYWJsZUFyZWEtPnNuYXBPZmZzZXRJbmZv
KCk7CisgICAgYXV0byogb2Zmc2V0SW5mbyA9IHNjcm9sbGFibGVBcmVhLT5zbmFwT2Zmc2V0c0lu
Zm8oKTsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAob2Zmc2V0SW5mbyAmJiAh
b2Zmc2V0SW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJob3Jpem9udGFsID0gIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430558</attachid>
            <date>2021-06-04 01:03:28 -0700</date>
            <delta_ts>2021-06-04 11:11:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226538-20210604100326.patch</filename>
            <type>text/plain</type>
            <size>26172</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIwMTY1OWU4ODQ4MGJl
YTNhZjJmZDFhNTFiY2YxNDkwYjFjNDRjZi4uZjI3MDI4NzM4YTU1MDQ3MjkxYzE2OGNlOTY4YmUy
ZDA5NWU5MTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTA2LTAyICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTbmFwIG9mZnNldHMgYW5kIGFjdGl2ZSBpbmRleCBhcmUgZHVwbGljYXRlZCBpbiBT
Y3JvbGxDb250cm9sbGVyIGFuZCBTY3JvbGxhYmxlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1cGxpY2F0ZSBjc3Mtc2Nyb2xsLXNu
YXAgc3RhdGUgZnJvbSBTY3JvbGxhYmxlQXJlYS4gVGhpcyBzdGF0ZSBpcyBhbHJlYWR5CisgICAg
ICAgIHN0b3JlZCBpbiBTY3JvbGxDb250cm9sbGVyLCBzbyB3ZSBkbyBub3QgbmVlZCB0byBzdG9y
ZSBpdCBhbHNvIGluIFNjcm9sbGFibGVBcmVhLgorICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJl
bmFtZXMgYSBjb3VwbGUgbWV0aG9kcyBzbyB0aGF0IHRoZXkgaGF2ZSBjbGVhcmVyIGFuZCBtb3Jl
CisgICAgICAgIGNvbnNpc3RlbnQgbmFtZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlz
IHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tz
KTogdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkgaXMgbm93IGNhbGxlZAorICAgICAgICByZXNuYXBB
ZnRlckxheW91dCgpLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwOiBzbmFwT2Zmc2V0SW5mbygpIGlzIG5vdyBjYWxsZWQKKyAgICAgICAgc25h
cE9mZnNldHNJbmZvKCkuCisgICAgICAgIChXZWJDb3JlOjpBc3luY1Njcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsU25h
cFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVG
cm9tU3RhdGVOb2RlKTogVXNlIG5ldyBtZXRob2QgbmFtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6dXBk
YXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KTogV2Ugbm8gbG9uZ2VyIG5lZWQgdG8K
KyAgICAgICAgc3luYyBzdGF0ZSB3aXRoIFNjcm9sbGFibGUgQXJlYS4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRTbmFwT2Zmc2V0c0luZm8pOiBBZGRlZCB0aGlzIHNldHRl
ciB3aGljaAorICAgICAgICBjYWxscyB0aHJvdWdoIHRvIFNjcm9sbENvbnRyb2xsZXIuCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogQWRk
ZWQgdGhpcyBnZXR0ZXIgd2hpY2ggY2FsbHMgdGhyb3VnaAorICAgICAgICB0byBTY3JvbGxDb250
cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldEFjdGl2ZVNjcm9s
bFNuYXBJbmRleEZvckF4aXMpOiBBZGRlZCB0aGlzIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOiBVcGRhdGUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nIGNvbnN0KTogVXNlIG5l
dyBtZXRob2QgbmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6YWxs
b3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xs
ZXI6OnNldFNuYXBPZmZzZXRzSW5mbyk6IENvbWJpbmVkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSBh
bmQKKyAgICAgICAgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyBpbnRvIHRoaXMgbWV0aG9kLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTog
QWRkZWQgdGhpcyBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5o
OiBVcGRhdGUgbWV0aG9kIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hl
ZWxFdmVudEZvclNjcm9sbGluZyk6IFdlIG5vIGxvbmdlciBuZWVkIHRvIHN5bmMKKyAgICAgICAg
ZnJvbSB0aGUgU2Nyb2xsQW5pbWF0b3IuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YTo6c25hcE9mZnNldHNJbmZvIGNvbnN0KTogUmVuYW1lZCB0aGlzIGdldHRlci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5mbyk6IFRoaXMg
bm93IGNhbGxzIHRocm91Z2ggdG8KKyAgICAgICAgU2Nyb2xsQ29udHJvbGxlci4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJ
bmRleCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQpOiBSZW5hbWVkIHRoaXMgbWV0aG9kIGFuZCBtb3ZlZAor
ICAgICAgICBzZXR0aW5nIHRoZSBTY3JvbGxTbmFwT2Zmc2V0c0luZm8gdG8gc2V0U2Nyb2xsU25h
cE9mZnNldEluZm8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6ZG9Qb3N0VGh1
bWJNb3ZlU25hcHBpbmcpOiBVc2UgbmV3IG1ldGhvZHMgdG8gYWNjZXNzCisgICAgICAgIHNjcm9s
bCBzbmFwIHN0YXRlIGFuZCByZXR1cm4gZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBhIFNjcm9sbEFu
aW1hdG9yIGFscmVhZHkuCisgICAgICAgIFRoaXMgd2FzIGRvbmUgaW1wbGljaXRseSBpbiB0aGUg
cHJldmlvdXMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA6
IFVwZGF0ZSBtZXRob2QgZGVmaW5pdGlvbnMgYW5kCisgICAgICAgIHJlbW92ZSBtZW1iZXJzIHRo
YXQgYXJlIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogVXNlIG5ldyBtZXRob2Qg
bmFtZS4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnNjcm9sbFNuYXBPZmZzZXRzKTogRGl0dG8uCisKIDIwMjEtMDYtMDIgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI3
Njg4Mik6IFN0eWxlIG5vdCBpbnZhbGlkYXRlZCBjb3JyZWN0bHkgZm9yIG1lZGlhIHF1ZXJpZXMg
aW4gc2hhZG93IHRyZWVzIHRoYXQgc2hhcmUgc3R5bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCAyYTk1NmMyOWEzNzRlMGIxZDg3MzRjMWM3ZTg5ZWQ0ODRhYWVlZjZlLi5hMjQ0N2Vh
Y2JlOGIyZjg5MzYyMWJjYmQ3ZmFlNTFmMzU5NDQxNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0zMzU5LDcgKzMzNTksNyBAQCB2b2lkIEZyYW1lVmlldzo6cGVyZm9ybVBvc3RM
YXlvdXRUYXNrcygpCiAgICAgdXBkYXRlTGF5b3V0Vmlld3BvcnQoKTsKICAgICB2aWV3cG9ydENv
bnRlbnRzQ2hhbmdlZCgpOwogCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgcmVz
bmFwQWZ0ZXJMYXlvdXQoKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGZyYW1l
KCkuZG9jdW1lbnQoKS0+ZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5w
ZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCBl
ODA1N2YzOGQ3MDNkNjY2ZmYwNGIwODkyZGYwNTljMDVkZWIwZGE3Li4yZjIyODc0ZGMxMGU3ZWQx
MzM0MDFkNzE0MGMxYWJmYzRkMDhhOTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtNzA4
LDcgKzcwOCw3IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsaW5n
Tm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkoU2Nyb2xsaW5nCiAKICNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQogICAgIHNjcm9sbGFibGVBcmVhLnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAg
c2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KHNjcm9sbGluZ05vZGUsIHNj
cm9sbGFibGVBcmVhLnNuYXBPZmZzZXRJbmZvKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CisgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KHNjcm9sbGlu
Z05vZGUsIHNjcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRzSW5mbygpLCBtX3BhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCkpOwogICAgIHNjcm9sbGluZ05vZGUuc2V0Q3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleChzY3JvbGxhYmxlQXJlYS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KCkpOwogICAgIHNjcm9sbGluZ05vZGUuc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgo
c2Nyb2xsYWJsZUFyZWEuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSk7CiAjZW5kaWYK
QEAgLTkwMiw3ICs5MDIsNyBAQCBib29sIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgYwogdm9pZCBBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZp
ZXcoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgaWYgKGF1dG8gbm9kZSA9IGRv
d25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+c3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LnNjcm9sbGluZ05vZGVJRCgpKSkpIHsKLSAg
ICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KCpub2RlLCBmcmFt
ZVZpZXcuc25hcE9mZnNldEluZm8oKSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAg
ICAgICAgc2V0U3RhdGVTY3JvbGxpbmdOb2RlU25hcE9mZnNldHNBc0Zsb2F0KCpub2RlLCBmcmFt
ZVZpZXcuc25hcE9mZnNldHNJbmZvKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAg
ICAgICAgIG5vZGUtPnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoZnJhbWVWaWV3
LmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CiAgICAgICAgIG5vZGUtPnNldEN1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KGZyYW1lVmlldy5jdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCgpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlTWFjLm1tCmluZGV4IDlhYjczYWE5MmIyMWY1YjMzMWNkNTAwMmZiODhhNjBkYjRj
ZjUzMDYuLmRjNmJkZWY4ZGZlNTkyNTBiMTc2NjllNDYxZDZlYmI5MmRiYWY2OGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCkBAIC02NSw3ICs2
NSw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRl
RnJvbVN0YXRlTm9kZShjb25zdCBTY3JvbGxpbmdTCiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OlNuYXBPZmZzZXRzSW5mbykpCi0gICAgICAgIG1fc2Ny
b2xsQ29udHJvbGxlci51cGRhdGVTY3JvbGxTbmFwUG9pbnRzKHNjcm9sbGluZ1N0YXRlTm9kZS5z
bmFwT2Zmc2V0c0luZm8oKS5jb252ZXJ0VW5pdHM8TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZv
PigpKTsKKyAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldFNuYXBPZmZzZXRzSW5mbyhzY3Jv
bGxpbmdTdGF0ZU5vZGUuc25hcE9mZnNldHNJbmZvKCkuY29udmVydFVuaXRzPExheW91dFNjcm9s
bFNuYXBPZmZzZXRzSW5mbz4oKSk7CiAKICAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlByb3BlcnR5OjpDdXJyZW50SG9yaXpv
bnRhbFNuYXBPZmZzZXRJbmRleCkpCiAgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zZXRBY3Rp
dmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Ny
b2xsaW5nU3RhdGVOb2RlLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggYjMwZWQzZjNmYTIx
ZmM5NDU3YzNjZmE5ZWM3ZjBhZWZmMzE1ZGQyYS4uZWMyMGIxNzA3NDQyNDYwZTc1NmRmNmExZDkz
MDJmZWRmYWNhNWZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcApAQCAtMTg4LDYgKzE4OCwxMSBAQCB1bnNpZ25lZCBTY3JvbGxBbmltYXRvcjo6YWN0aXZl
U2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29ucwogewogICAg
IHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhh
eGlzKTsKIH0KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0
dXJuIG1fc2Nyb2xsQ29udHJvbGxlci5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4
aXMsIGluZGV4KTsKK30KICNlbmRpZgogCiBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKQEAgLTI3MCwxMCArMjc1LDYgQEAg
dm9pZCBTY3JvbGxBbmltYXRvcjo6dXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0
KCkKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGF1dG8gc2Nyb2xsT2Zmc2V0ID0g
bV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocm91bmRlZEludFBvaW50
KGN1cnJlbnRQb3NpdGlvbigpKSk7CiAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2ZVNj
cm9sbFNuYXBJbmRpY2VzRm9yT2Zmc2V0KHNjcm9sbE9mZnNldCk7Ci0gICAgaWYgKG1fc2Nyb2xs
Q29udHJvbGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSkgewotICAgICAgICBt
X3Njcm9sbGFibGVBcmVhLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgobV9zY3Jv
bGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsKSk7Ci0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXgobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRl
eEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOwotICAgIH0KICNlbmRpZgogfQog
CkBAIC0yODgsOSArMjg5LDE0IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGlmeVBvc2l0aW9u
Q2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogfQogCiAjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCit2
b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTbmFwT2Zmc2V0c0luZm8oY29uc3QgTGF5b3V0U2Nyb2xs
U25hcE9mZnNldHNJbmZvJiBpbmZvKQoreworICAgIG1fc2Nyb2xsQ29udHJvbGxlci5zZXRTbmFw
T2Zmc2V0c0luZm8oaW5mbyk7Cit9CisKK2NvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5m
byogU2Nyb2xsQW5pbWF0b3I6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0CiB7Ci0gICAgbV9zY3Jv
bGxDb250cm9sbGVyLnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZShtX3Njcm9sbGFibGVBcmVhKTsKKyAg
ICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLnNuYXBPZmZzZXRzSW5mbygpOwogfQogCiBGbG9h
dFBvaW50IFNjcm9sbEFuaW1hdG9yOjpzY3JvbGxPZmZzZXQoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggYjU3ZDMzNjBlOTU1NTgxNWIyMzNmMTU4
OTg1NmU3ZGMzZWI0MjgwZi4uNWEyODYxN2ZmOGU2ZjdmMmVkYjJiOGFiM2ExYjhiZmQ3ZDJiOGEw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0xNTgsNiAr
MTU4LDkgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAg
Ym9vbCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBhY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7Cisg
ICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywg
dW5zaWduZWQgaW5kZXgpOworICAgIHZvaWQgc2V0U25hcE9mZnNldHNJbmZvKGNvbnN0IExheW91
dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYpOworICAgIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbyogc25hcE9mZnNldHNJbmZvKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIC8vIFNjcm9s
bENvbnRyb2xsZXJDbGllbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRy
b2xsZXIuY3BwCmluZGV4IDc5ZWE1NzI4ZDVjMTcyODg4YWEwOGQ2M2Q5ZDk4OTIwMWFiNjk4MzEu
LmQ4NmY1ZGVjMTNhNDM1OGI4N2M1MWM5MjBiNmIyYjNkMWIxNmFmZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC05OSwxOCArOTksNyBAQCBi
b29sIFNjcm9sbENvbnRyb2xsZXI6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKIAogI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCiAKLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xs
U25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKLXsKLSAgICBj
b25zdCBhdXRvKiBzbmFwT2Zmc2V0SW5mbyA9IHNjcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRJbmZv
KCk7Ci0gICAgaWYgKCFzbmFwT2Zmc2V0SW5mbykgewotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0
ZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxT
bmFwUG9pbnRzKCpzbmFwT2Zmc2V0SW5mbyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
dXBkYXRlU2Nyb2xsU25hcFBvaW50cyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8m
IHNuYXBPZmZzZXRJbmZvKQordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRTbmFwT2Zmc2V0c0lu
Zm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJiBzbmFwT2Zmc2V0SW5mbykKIHsK
ICAgICBpZiAoc25hcE9mZnNldEluZm8uaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fc2Nyb2xsU25h
cFN0YXRlID0gbnVsbHB0cjsKQEAgLTEyNiw3ICsxMTUsMTIgQEAgdm9pZCBTY3JvbGxDb250cm9s
bGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRz
SW5mbyYKICAgICBpZiAoc2hvdWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcykKICAgICAgICAg
c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQocm91bmRlZEludFBvaW50KG1fY2xp
ZW50LnNjcm9sbE9mZnNldCgpKSk7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwg
c3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHVwZGF0ZVNjcm9sbFNu
YXBTdGF0ZSBuZXcgc3RhdGU6ICIgPDwgVmFsdWVPck51bGwobV9zY3JvbGxTbmFwU3RhdGUuZ2V0
KCkpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxD
b250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHNldFNuYXBPZmZzZXRzSW5mbyBuZXcgc3RhdGU6ICIg
PDwgVmFsdWVPck51bGwobV9zY3JvbGxTbmFwU3RhdGUuZ2V0KCkpKTsKK30KKworY29uc3QgTGF5
b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBTY3JvbGxDb250cm9sbGVyOjpzbmFwT2Zmc2V0c0lu
Zm8oKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbFNuYXBTdGF0ZSA/ICZtX3Njcm9sbFNu
YXBTdGF0ZS0+c25hcE9mZnNldEluZm8oKSA6IG51bGxwdHI7CiB9CiAKIHVuc2lnbmVkIFNjcm9s
bENvbnRyb2xsZXI6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
IGF4aXMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgK
aW5kZXggZmU0NThiMzY4MjA3OWI0OTNiNjgxOTBjNmFkYzFjNjVlZGYwYjhmZi4uMjNhYzNhNGZj
OTRlOGMxMDcyZmE0ZDBhZjFjZGI1YWVkZjBiNzFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbENvbnRyb2xsZXIuaApAQCAtMTM5LDcgKzEzOSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFuaW1hdGlvbkNhbGxiYWNrKE1vbm90b25pY1RpbWUpOwogCiAjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoY29uc3QgTGF5b3V0
U2Nyb2xsU25hcE9mZnNldHNJbmZvJik7CisgICAgdm9pZCBzZXRTbmFwT2Zmc2V0c0luZm8oY29u
c3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJik7CisgICAgY29uc3QgTGF5b3V0U2Nyb2xs
U25hcE9mZnNldHNJbmZvKiBzbmFwT2Zmc2V0c0luZm8oKSBjb25zdDsKICAgICB2b2lkIHNldEFj
dGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCk7CiAg
ICAgdm9pZCBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kaWNlc0Zvck9mZnNldChTY3JvbGxPZmZzZXQp
OwogICAgIGJvb2wgYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCBhMTc3ZTgwZDVkYzMyMWE4ODdmODBiZmJi
NDE0MjJhYTM1NDRlNzRlLi5hNTIxOGI5MGE2MTE4ZDkxZjI2OTc1YWQ5YzBkN2JkNzAyMTVjYmYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC01MCwx
MiArNTAsNyBAQCBzdHJ1Y3QgU2FtZVNpemVBc1Njcm9sbGFibGVBcmVhIHsKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgIGJvb2wgd2Vha1B0ckZhY3Rvcldhc0NvbnN0cnVjdGVkT25NYWluVGhyZWFk
OwogI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkKiBwb2ludGVy
c1szXTsKLSAgICB1bnNpZ25lZCBjdXJyZW50SW5kaWNlc1syXTsKLSNlbHNlCiAgICAgdm9pZCog
cG9pbnRlclsyXTsKLSNlbmRpZgogICAgIEludFBvaW50IG9yaWdpbjsKICAgICB1bnNpZ25lZCBi
aXRmaWVsZHMgOiAxNjsKIH07CkBAIC0yMTcsMTIgKzIxMiw2IEBAIGJvb2wgU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlCiAgICAgYm9vbCBoYW5kbGVkRXZlbnQgPSBzY3JvbGxBbmltYXRvcigpLmhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCk7CiAgICAgCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGlu
Zywgc3RyZWFtIDw8ICJTY3JvbGxhYmxlQXJlYSAoIiA8PCAqdGhpcyA8PCAiKSBoYW5kbGVXaGVl
bEV2ZW50IC0gaGFuZGxlZCAiIDw8IGhhbmRsZWRFdmVudCk7Ci0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSAgICBpZiAoc2Nyb2xsQW5pbWF0b3IoKS5hY3RpdmVTY3JvbGxTbmFwSW5kZXhE
aWRDaGFuZ2UoKSkgewotICAgICAgICBzZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4
KHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwpKTsKLSAgICAgICAgc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50
SW5kZXgoc2Nyb2xsQW5pbWF0b3IoKS5hY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwpKTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gaGFuZGxl
ZEV2ZW50OwogfQogCkBAIC00NzksMTYgKzQ2OCw5IEBAIFN0cmluZyBTY3JvbGxhYmxlQXJlYTo6
dmVydGljYWxTY3JvbGxiYXJTdGF0ZUZvclRlc3RpbmcoKSBjb25zdAogfQogCiAjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKLUxheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYgU2Nyb2xsYWJs
ZUFyZWE6OmVuc3VyZVNuYXBPZmZzZXRzSW5mbygpCitjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8qIFNjcm9sbGFibGVBcmVhOjpzbmFwT2Zmc2V0c0luZm8oKSBjb25zdAogewotICAg
IGlmICghbV9zbmFwT2Zmc2V0c0luZm8pCi0gICAgICAgIG1fc25hcE9mZnNldHNJbmZvID0gbWFr
ZVVuaXF1ZTxMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+KCk7Ci0gICAgcmV0dXJuICptX3Nu
YXBPZmZzZXRzSW5mbzsKLX0KLQotY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBT
Y3JvbGxhYmxlQXJlYTo6c25hcE9mZnNldEluZm8oKSBjb25zdAotewotICAgIHJldHVybiBtX3Nu
YXBPZmZzZXRzSW5mby5nZXQoKTsKKyAgICByZXR1cm4gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigp
ID8gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpLT5zbmFwT2Zmc2V0c0luZm8oKSA6IG51bGxwdHI7
CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFNuYXBPZmZzZXRJbmZvKGNvbnN0
IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYgaW5mbykKQEAgLTQ5OSw1OCArNDgxLDYxIEBA
IHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFNuYXBPZmZzZXRJbmZvKGNvbnN0IExheW91
dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYKICAgICB9CiAKICAgICAvLyBDb25zaWRlciBoYXZpbmcg
YSBub24tZW1wdHkgc2V0IG9mIHNuYXAgb2Zmc2V0cyBhcyBhIGN1ZSB0byBpbml0aWFsaXplIHRo
ZSBTY3JvbGxBbmltYXRvci4KLSAgICBzY3JvbGxBbmltYXRvcigpOwotICAgIGVuc3VyZVNuYXBP
ZmZzZXRzSW5mbygpID0gaW5mbzsKKyAgICBzY3JvbGxBbmltYXRvcigpLnNldFNuYXBPZmZzZXRz
SW5mbyhpbmZvKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTbmFwT2Zmc2V0cygp
CiB7Ci0gICAgbV9zbmFwT2Zmc2V0c0luZm8gPSBudWxscHRyOworICAgIGlmIChTY3JvbGxBbmlt
YXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAg
IHJldHVybiBzY3JvbGxBbmltYXRvci0+c2V0U25hcE9mZnNldHNJbmZvKExheW91dFNjcm9sbFNu
YXBPZmZzZXRzSW5mbygpKTsKIH0KIAotYm9vbCBTY3JvbGxhYmxlQXJlYTo6dXNlc1Njcm9sbFNu
YXAoKSBjb25zdAordW5zaWduZWQgU2Nyb2xsYWJsZUFyZWE6OmN1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXgoKSBjb25zdAogewotICAgIHJldHVybiAhIW1fc25hcE9mZnNldHNJbmZvOwor
ICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+YWN0aXZlU2Nyb2xsU25h
cEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgIHJldHVybiAw
OyAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGludmFsaWRTbmFwT2Zmc2V0SW5kZXgu
CiB9CiAKLUludFBvaW50IFNjcm9sbGFibGVBcmVhOjpuZWFyZXN0QWN0aXZlU25hcFBvaW50KGNv
bnN0IEludFBvaW50JiBjdXJyZW50UG9zaXRpb24pCit1bnNpZ25lZCBTY3JvbGxhYmxlQXJlYTo6
Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSBjb25zdAogewotICAgIGlmICghbV9zbmFw
T2Zmc2V0c0luZm8pCi0gICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247Ci0gICAgCi0gICAg
aWYgKCFleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBjdXJyZW50UG9z
aXRpb247Ci0KLSAgICBJbnRQb2ludCBjb3JyZWN0ZWRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlv
bjsKLQotICAgIGNvbnN0IGF1dG8mIGhvcml6b250YWwgPSBtX3NuYXBPZmZzZXRzSW5mby0+aG9y
aXpvbnRhbFNuYXBPZmZzZXRzOwotICAgIHNpemVfdCBhY3RpdmVIb3Jpem9udGFsSW5kZXggPSBj
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAgaWYgKGFjdGl2ZUhvcml6b250
YWxJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQotICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5z
ZXRYKGhvcml6b250YWxbYWN0aXZlSG9yaXpvbnRhbEluZGV4XS5vZmZzZXQudG9JbnQoKSk7Cisg
ICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5hY3RpdmVTY3JvbGxTbmFw
SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOworICAgIHJldHVybiAwOyAv
LyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGludmFsaWRTbmFwT2Zmc2V0SW5kZXguCit9
CiAKLSAgICBjb25zdCBhdXRvJiB2ZXJ0aWNhbCA9IG1fc25hcE9mZnNldHNJbmZvLT52ZXJ0aWNh
bFNuYXBPZmZzZXRzOwotICAgIHNpemVfdCBhY3RpdmVWZXJ0aWNhbEluZGV4ID0gY3VycmVudFZl
cnRpY2FsU25hcFBvaW50SW5kZXgoKTsKLSAgICBpZiAoYWN0aXZlVmVydGljYWxJbmRleCA8IHZl
cnRpY2FsLnNpemUoKSkKLSAgICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WSh2ZXJ0aWNhbFth
Y3RpdmVWZXJ0aWNhbEluZGV4XS5vZmZzZXQudG9JbnQoKSk7Cit2b2lkIFNjcm9sbGFibGVBcmVh
OjpzZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4KQorewor
ICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwsIGluZGV4KTsKK30KIAotICAgIHJldHVybiBjb3JyZWN0
ZWRQb3NpdGlvbjsKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0QWN0
aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBpbmRl
eCk7CiB9CiAKLXZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCit2
b2lkIFNjcm9sbGFibGVBcmVhOjpyZXNuYXBBZnRlckxheW91dCgpCiB7Ci0gICAgaWYgKFNjcm9s
bEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAg
ICAgICAgc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRhdGVTY3JvbGxT
bmFwU3RhdGU6IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgPDwgIiBpc1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Nyb2xsSW5Qcm9n
cmVzcygpKTsKIAotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICBpZiAoIWV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSB8fCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgfHwgaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0o
U2Nyb2xsU25hcCwgc3RyZWFtIDw8ICp0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlOiBp
c1Njcm9sbFNuYXBJblByb2dyZXNzICIgPDwgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIDw8ICIg
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyAiIDw8IGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSk7Ci0K
LSAgICBpZiAoaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIHx8IGlzVXNlclNjcm9sbEluUHJvZ3Jl
c3MoKSkKKyAgICBjb25zdCBhdXRvKiBpbmZvID0gc25hcE9mZnNldHNJbmZvKCk7CisgICAgaWYg
KCFpbmZvKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRQb2ludCBjdXJyZW50UG9zaXRpb24g
PSBzY3JvbGxQb3NpdGlvbigpOwotICAgIEludFBvaW50IGNvcnJlY3RlZFBvc2l0aW9uID0gbmVh
cmVzdEFjdGl2ZVNuYXBQb2ludChjdXJyZW50UG9zaXRpb24pOworICAgIEludFBvaW50IGNvcnJl
Y3RlZFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uOworICAgIGNvbnN0IGF1dG8mIGhvcml6b250
YWwgPSBpbmZvLT5ob3Jpem9udGFsU25hcE9mZnNldHM7CisgICAgc2l6ZV90IGFjdGl2ZUhvcml6
b250YWxJbmRleCA9IGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsKKyAgICBpZiAo
YWN0aXZlSG9yaXpvbnRhbEluZGV4IDwgaG9yaXpvbnRhbC5zaXplKCkpCisgICAgICAgIGNvcnJl
Y3RlZFBvc2l0aW9uLnNldFgoaG9yaXpvbnRhbFthY3RpdmVIb3Jpem9udGFsSW5kZXhdLm9mZnNl
dC50b0ludCgpKTsKKworICAgIGNvbnN0IGF1dG8mIHZlcnRpY2FsID0gaW5mby0+dmVydGljYWxT
bmFwT2Zmc2V0czsKKyAgICBzaXplX3QgYWN0aXZlVmVydGljYWxJbmRleCA9IGN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KCk7CisgICAgaWYgKGFjdGl2ZVZlcnRpY2FsSW5kZXggPCB2ZXJ0
aWNhbC5zaXplKCkpCisgICAgICAgIGNvcnJlY3RlZFBvc2l0aW9uLnNldFkodmVydGljYWxbYWN0
aXZlVmVydGljYWxJbmRleF0ub2Zmc2V0LnRvSW50KCkpOwogCiAgICAgaWYgKGNvcnJlY3RlZFBv
c2l0aW9uICE9IGN1cnJlbnRQb3NpdGlvbikgewogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Ny
b2xsU25hcCwgc3RyZWFtIDw8ICIgYWRqdXN0aW5nIHBvc2l0aW9uIGZyb20gIiA8PCBjdXJyZW50
UG9zaXRpb24gPDwgIiB0byAiIDw8IGNvcnJlY3RlZFBvc2l0aW9uKTsKQEAgLTU2MCwyMiArNTQ1
LDIzIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCiAKIHZv
aWQgU2Nyb2xsYWJsZUFyZWE6OmRvUG9zdFRodW1iTW92ZVNuYXBwaW5nKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQogewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICBT
Y3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCk7
CisgICAgaWYgKCFzY3JvbGxBbmltYXRvcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBj
dXJyZW50T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CiAgICAgYXV0byBuZXdPZmZzZXQgPSBjdXJy
ZW50T2Zmc2V0OwogICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQot
ICAgICAgICBuZXdPZmZzZXQuc2V0WChtX3Njcm9sbEFuaW1hdG9yLT5hZGp1c3RTY3JvbGxPZmZz
ZXRGb3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY3VycmVu
dE9mZnNldC54KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOwor
ICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0
Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJlbnRP
ZmZzZXQueCgpLCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2Q6OkNsb3Nlc3QpKTsKICAg
ICBlbHNlCi0gICAgICAgIG5ld09mZnNldC5zZXRZKG1fc2Nyb2xsQW5pbWF0b3ItPmFkanVzdFNj
cm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwg
Y3VycmVudE9mZnNldC55KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2Vz
dCkpOworICAgICAgICBuZXdPZmZzZXQuc2V0WShzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xs
T2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjdXJy
ZW50T2Zmc2V0LnkoKSwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kOjpDbG9zZXN0KSk7
CiAgICAgaWYgKG5ld09mZnNldCA9PSBjdXJyZW50T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBzY3JvbGxBbmltYXRvcigpLnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdPZmZz
ZXQpOworICAgIHNjcm9sbEFuaW1hdG9yLT5zY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3
T2Zmc2V0KTsKIH0KICNlbHNlCi12b2lkIFNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxTbmFw
U3RhdGUoKQordm9pZCBTY3JvbGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCAwMTk1YTE1NTQz
NzlhOWMzZTE2OTVmN2M0NGVjZGQzZGVmZDA3N2ZlLi5lMjdlMDFjYzgwMzQzMWExODVmNmQxYjQ1
NTM4YTVjNGU1ZjczMzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmgKQEAgLTg4LDIxICs4OCwxOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmLCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPik7CiAKLSAgICBi
b29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7Ci0KICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyog
c25hcE9mZnNldEluZm8oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU25hcE9mZnNl
dHMoKSB7IH07CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNl
dHNJbmZvKiBzbmFwT2Zmc2V0c0luZm8oKSBjb25zdDsKICAgICB2b2lkIHNldFNjcm9sbFNuYXBP
ZmZzZXRJbmZvKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYpOwogICAgIHZvaWQg
Y2xlYXJTbmFwT2Zmc2V0cygpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXg7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5zaWdu
ZWQgaW5kZXgpIHsgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gaW5kZXg7IH0K
LSAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7IH0KLSAgICB2b2lkIHNldEN1cnJl
bnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fY3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXggPSBpbmRleDsgfQotICAgIEludFBvaW50IG5lYXJlc3RBY3RpdmVT
bmFwUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBj
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgdW5zaWduZWQgY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSBjb25zdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5z
aWduZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgodW5zaWduZWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBT
dGF0ZSgpOworICAgIHZvaWQgcmVzbmFwQWZ0ZXJMYXlvdXQoKTsKICAgICB2b2lkIGRvUG9zdFRo
dW1iTW92ZVNuYXBwaW5nKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKIAogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCkBAIC0zODQsMTMgKzM4MSw2IEBAIHByaXZhdGU6CiAKICAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIAotI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJiBl
bnN1cmVTbmFwT2Zmc2V0c0luZm8oKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0U2Nyb2xs
U25hcE9mZnNldHNJbmZvPiBtX3NuYXBPZmZzZXRzSW5mbzsKLSAgICB1bnNpZ25lZCBtX2N1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggeyAwIH07Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50
VmVydGljYWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKLSNlbmRpZgotCiAgICAgLy8gVGhlcmUgYXJl
IDggcG9zc2libGUgY29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9uLiBT
Y3JvbGwgb3JpZ2luIHdpbGwgYmUgbm9uLXplcm8gaW4gdGhlIHggb3IgeSBheGlzCiAgICAgLy8g
aWYgdGhlcmUgaXMgYW55IHJldmVyc2VkIGRpcmVjdGlvbiBvciB3cml0aW5nLW1vZGUuIFRoZSBj
b21iaW5hdGlvbnMgYXJlOgogICAgIC8vIHdyaXRpbmctbW9kZSAvIGRpcmVjdGlvbiAgICAgc2Ny
b2xsT3JpZ2luLngoKSBzZXQgICAgc2Nyb2xsT3JpZ2luLnkoKSBzZXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCBiMWYzNzViZmE1
N2JkYTE1MDkzZGEyYmFmYTUzNTViMWRhZmY0YWM4Li5iMWVjMmM2NGJlNWI2NzMwY2RkYzJjMGM4
MDg1ZWQyOWI3NDg5OTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0xMzAzLDcgKzEzMDMsNyBAQCBib29sIFNjcm9sbEFuaW1h
dG9yTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbAogICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxh
YmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgJiYgd2hlZWxF
dmVudC5pc0dlc3R1cmVTdGFydCgpICYmIG1fc2Nyb2xsYWJsZUFyZWEuaXNQaW5uZWRGb3JTY3Jv
bGxEZWx0YU9uQXhpcygtd2hlZWxFdmVudC5kZWx0YVkoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0
aWNhbCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICAgICAgaWYgKCFldmVudFBy
ZXZlbnRzU3RyZXRjaGluZykKLSAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0g
Z2VzdHVyZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsLCBtX3Njcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRJbmZvKCkpOworICAgICAgICAgICAgZXZl
bnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQs
IFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG1fc2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNldHNJ
bmZvKCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5n
ICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9CkBAIC0xMzI3LDcgKzEzMjcsNyBA
QCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZQogICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJl
dGNoaW5nID0gbV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCkgJiYgd2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpICYmIG1fc2Nyb2xsYWJsZUFy
ZWEuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YU9uQXhpcygtd2hlZWxFdmVudC5kZWx0YVgoKSwgU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQog
ICAgICAgICBpZiAoIWV2ZW50UHJldmVudHNTdHJldGNoaW5nKQotICAgICAgICAgICAgZXZlbnRQ
cmV2ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgbV9zY3JvbGxhYmxlQXJlYS5zbmFwT2Zmc2V0SW5m
bygpKTsKKyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3Vs
ZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG1fc2Ny
b2xsYWJsZUFyZWEuc25hcE9mZnNldHNJbmZvKCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBz
Y3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAKaW5kZXggYjQwZDBiODkxZDI0YzliYmQxZmNhOTNmNDQ3N2Y3ZWQ1OGVj
M2YxNi4uMzY5MzE1OWFiOTVmNWViN2Y2YjBhN2U1MTQyNWQ0NWJjYjIzMWIxNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcApAQCAtMTIxMiw3ICsxMjEyLDcgQEAgdm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgIGlmIChjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpCiAgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRp
bmdVcGRhdGUoKTsKIAotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgIHJlc25hcEFm
dGVyTGF5b3V0KCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZs
b3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGFlMjQ1ZjA5OThiOWVlMjhhM2Nk
YmY2NDk1NmNiYWYzZDRhOTNkNDAuLmYwZmZjZTNiN2E3NTBhODg2M2M4MTRhMzBmYTQzODk3ZWY1
Y2Y2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ3MjksNyArNDcy
OSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpzY3JvbGxTbmFwT2Zmc2V0cyhF
bGVtZW50JiBlbGVtZW50KQogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGF1dG8qIG9mZnNldElu
Zm8gPSBzY3JvbGxhYmxlQXJlYS0+c25hcE9mZnNldEluZm8oKTsKKyAgICBhdXRvKiBvZmZzZXRJ
bmZvID0gc2Nyb2xsYWJsZUFyZWEtPnNuYXBPZmZzZXRzSW5mbygpOwogICAgIFN0cmluZ0J1aWxk
ZXIgcmVzdWx0OwogICAgIGlmIChvZmZzZXRJbmZvICYmICFvZmZzZXRJbmZvLT5ob3Jpem9udGFs
U25hcE9mZnNldHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoImhvcml6b250
YWwgPSAiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430594</attachid>
            <date>2021-06-04 11:11:12 -0700</date>
            <delta_ts>2021-06-04 12:50:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226538-20210604201111.patch</filename>
            <type>text/plain</type>
            <size>26109</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTI3NTFiMGJiY2JhN2Rm
MTJmNzcxMmQ2MGYwYTgxMWQ5Njk3OTA0YS4uN2YxMTk0N2I5YWQ2MmUzMDZmZWJjZGIyMmExZDBh
ZGZlMGI2ZTBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTA2LTA0ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBTbmFwIG9mZnNldHMgYW5kIGFjdGl2ZSBpbmRleCBhcmUgZHVwbGljYXRlZCBpbiBT
Y3JvbGxDb250cm9sbGVyIGFuZCBTY3JvbGxhYmxlQXJlYQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gRnJhc2VyLgorCisgICAgICAgIFJlbW92ZSBkdXBsaWNhdGUgY3NzLXNjcm9sbC1zbmFw
IHN0YXRlIGZyb20gU2Nyb2xsYWJsZUFyZWEuIFRoaXMgc3RhdGUgaXMgYWxyZWFkeQorICAgICAg
ICBzdG9yZWQgaW4gU2Nyb2xsQ29udHJvbGxlciwgc28gd2UgZG8gbm90IG5lZWQgdG8gc3RvcmUg
aXQgYWxzbyBpbiBTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyByZW5h
bWVzIGEgY291cGxlIG1ldGhvZHMgc28gdGhhdCB0aGV5IGhhdmUgY2xlYXJlciBhbmQgbW9yZQor
ICAgICAgICBjb25zaXN0ZW50IG5hbWVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBz
aG91bGQgbm90IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGVyZm9ybVBvc3RMYXlvdXRUYXNrcyk6
IHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpIGlzIG5vdyBjYWxsZWQKKyAgICAgICAgcmVzbmFwQWZ0
ZXJMYXlvdXQoKS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcDogc25hcE9mZnNldEluZm8oKSBpcyBub3cgY2FsbGVkCisgICAgICAgIHNuYXBP
ZmZzZXRzSW5mbygpLgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBQ
cm9wZXJ0aWVzV2l0aEZyYW1lVmlldyk6IERpdHRvLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6dXBkYXRlRnJv
bVN0YXRlTm9kZSk6IFVzZSBuZXcgbWV0aG9kIG5hbWUuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnVwZGF0
ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvck9mZnNldCk6IFdlIG5vIGxvbmdlciBuZWVkIHRvCisg
ICAgICAgIHN5bmMgc3RhdGUgd2l0aCBTY3JvbGxhYmxlIEFyZWEuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6c2V0U25hcE9mZnNldHNJbmZvKTogQWRkZWQgdGhpcyBzZXR0ZXIg
d2hpY2gKKyAgICAgICAgY2FsbHMgdGhyb3VnaCB0byBTY3JvbGxDb250cm9sbGVyLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNuYXBPZmZzZXRzSW5mbyBjb25zdCk6IEFkZGVk
IHRoaXMgZ2V0dGVyIHdoaWNoIGNhbGxzIHRocm91Z2gKKyAgICAgICAgdG8gU2Nyb2xsQ29udHJv
bGxlci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRBY3RpdmVTY3JvbGxT
bmFwSW5kZXhGb3JBeGlzKTogQWRkZWQgdGhpcyBtZXRob2QuCisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaDogVXBkYXRlIG1ldGhvZCBkZWNsYXJhdGlvbnMuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JNYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyBjb25zdCk6IFVzZSBuZXcg
bWV0aG9kIG5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmFsbG93
c0hvcml6b250YWxTdHJldGNoaW5nIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVy
OjpzZXRTbmFwT2Zmc2V0c0luZm8pOiBDb21iaW5lZCB1cGRhdGVTY3JvbGxTbmFwU3RhdGUgYW5k
CisgICAgICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMgaW50byB0aGlzIG1ldGhvZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OnNuYXBPZmZzZXRzSW5mbyBjb25zdCk6IEFk
ZGVkIHRoaXMgZ2V0dGVyLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaDog
VXBkYXRlIG1ldGhvZCBkZWNsYXJhdGlvbnMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVs
RXZlbnRGb3JTY3JvbGxpbmcpOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jCisgICAgICAgIGZy
b20gdGhlIFNjcm9sbEFuaW1hdG9yLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6
OnNuYXBPZmZzZXRzSW5mbyBjb25zdCk6IFJlbmFtZWQgdGhpcyBnZXR0ZXIuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsU25hcE9mZnNldEluZm8pOiBUaGlzIG5v
dyBjYWxscyB0aHJvdWdoIHRvCisgICAgICAgIFNjcm9sbENvbnRyb2xsZXIuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTbmFwT2Zmc2V0cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpjdXJy
ZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWE6OnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRDdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OnJlc25hcEFmdGVyTGF5b3V0KTogUmVuYW1lZCB0aGlzIG1ldGhvZCBhbmQgbW92ZWQKKyAg
ICAgICAgc2V0dGluZyB0aGUgU2Nyb2xsU25hcE9mZnNldHNJbmZvIHRvIHNldFNjcm9sbFNuYXBP
ZmZzZXRJbmZvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRvUG9zdFRodW1i
TW92ZVNuYXBwaW5nKTogVXNlIG5ldyBtZXRob2RzIHRvIGFjY2VzcworICAgICAgICBzY3JvbGwg
c25hcCBzdGF0ZSBhbmQgcmV0dXJuIGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgYSBTY3JvbGxBbmlt
YXRvciBhbHJlYWR5LgorICAgICAgICBUaGlzIHdhcyBkb25lIGltcGxpY2l0bHkgaW4gdGhlIHBy
ZXZpb3VzIGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVh
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOiBV
cGRhdGUgbWV0aG9kIGRlZmluaXRpb25zIGFuZAorICAgICAgICByZW1vdmUgbWVtYmVycyB0aGF0
IGFyZSBubyBsb25nZXIgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6IFVzZSBuZXcgbWV0aG9kIG5h
bWUuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjpzY3JvbGxTbmFwT2Zmc2V0cyk6IERpdHRvLgorCiAyMDIxLTA2LTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW4gZm9udCBsb2FkaW5nIGNvZGUgaW5zdGVhZCBvZiBwb2ludGVycyB3aGljaCBjYW4g
bmV2ZXIgYmUgbnVsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGFlNTE5YzhkNzRm
N2FmZTQwNDQ3YjRhNTgxYjYzM2M3ZGY4NmViYjUuLjRmNjcwNzM2Yjc4NDFhOTNlMDBlNTRhOTg4
OWU3ZTgyM2IwN2I4NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTMzNTMsNyAr
MzM1Myw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKCkKICAgICB1
cGRhdGVMYXlvdXRWaWV3cG9ydCgpOwogICAgIHZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CiAK
LSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICByZXNuYXBBZnRlckxheW91dCgpOwog
CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZnJhbWUoKS5kb2N1bWVudCgpLT5leGlz
dGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPnBlcmZvcm1EZWZlcnJlZENhY2hl
VXBkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDMzNmRjOWU4NzAzMWZmOWU2Mzhm
YTNlMjkxNTE2ZTI4ZjM5M2M1MDQuLmYxNGU4OGIwMzE3MDQ4MTJjNmIzNzEyODRkNjBjYjI4MDU5
MTlhNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBB
c3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFH
ZW9tZXRyeShTY3JvbGxpbmcKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgc2Ny
b2xsYWJsZUFyZWEudXBkYXRlU25hcE9mZnNldHMoKTsKLSAgICBzZXRTdGF0ZVNjcm9sbGluZ05v
ZGVTbmFwT2Zmc2V0c0FzRmxvYXQoc2Nyb2xsaW5nTm9kZSwgc2Nyb2xsYWJsZUFyZWEuc25hcE9m
ZnNldEluZm8oKSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBzZXRTdGF0ZVNj
cm9sbGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoc2Nyb2xsaW5nTm9kZSwgc2Nyb2xsYWJsZUFy
ZWEuc25hcE9mZnNldHNJbmZvKCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAg
c2Nyb2xsaW5nTm9kZS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KHNjcm9sbGFi
bGVBcmVhLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSk7CiAgICAgc2Nyb2xsaW5n
Tm9kZS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChzY3JvbGxhYmxlQXJlYS5jdXJy
ZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpKTsKICNlbmRpZgpAQCAtOTAyLDcgKzkwMiw3IEBA
IGJvb2wgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhT
Y3JvbGxpbmdOb2RlSUQgbm9kZUlEKSBjCiB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZyYW1lVmlldyhjb25zdCBGcmFtZVZpZXcm
IGZyYW1lVmlldykKIHsKICAgICBpZiAoYXV0byBub2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3Rh
dGVGcmFtZVNjcm9sbGluZ05vZGU+KG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5vZGVGb3JJ
RChmcmFtZVZpZXcuc2Nyb2xsaW5nTm9kZUlEKCkpKSkgewotICAgICAgICBzZXRTdGF0ZVNjcm9s
bGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUsIGZyYW1lVmlldy5zbmFwT2Zmc2V0SW5m
bygpLCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBzZXRTdGF0ZVNjcm9s
bGluZ05vZGVTbmFwT2Zmc2V0c0FzRmxvYXQoKm5vZGUsIGZyYW1lVmlldy5zbmFwT2Zmc2V0c0lu
Zm8oKSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgbm9kZS0+c2V0Q3Vy
cmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChmcmFtZVZpZXcuY3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCgpKTsKICAgICAgICAgbm9kZS0+c2V0Q3VycmVudFZlcnRpY2FsU25hcFBv
aW50SW5kZXgoZnJhbWVWaWV3LmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KaW5k
ZXggOWFiNzNhYTkyYjIxZjViMzMxY2Q1MDAyZmI4OGE2MGRiNGNmNTMwNi4uZGM2YmRlZjhkZmU1
OTI1MGIxNzY2OWU0NjFkNmViYjkyZGJhZjY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjp1cGRhdGVGcm9tU3RhdGVOb2RlKGNvbnN0
IFNjcm9sbGluZ1MKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgaWYgKHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpQcm9w
ZXJ0eTo6U25hcE9mZnNldHNJbmZvKSkKLSAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnVwZGF0
ZVNjcm9sbFNuYXBQb2ludHMoc2Nyb2xsaW5nU3RhdGVOb2RlLnNuYXBPZmZzZXRzSW5mbygpLmNv
bnZlcnRVbml0czxMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8+KCkpOworICAgICAgICBtX3Nj
cm9sbENvbnRyb2xsZXIuc2V0U25hcE9mZnNldHNJbmZvKHNjcm9sbGluZ1N0YXRlTm9kZS5zbmFw
T2Zmc2V0c0luZm8oKS5jb252ZXJ0VW5pdHM8TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvPigp
KTsKIAogICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlTm9kZTo6UHJvcGVydHk6OkN1cnJlbnRIb3Jpem9udGFsU25hcE9mZnNldEluZGV4
KSkKICAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBzY3JvbGxpbmdTdGF0ZU5vZGUuY3Vy
cmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcAppbmRleCBiMzBlZDNmM2ZhMjFmYzk0NTdjM2NmYTllYzdmMGFl
ZmYzMTVkZDJhLi5lYzIwYjE3MDc0NDI0NjBlNzU2ZGY2YTFkOTMwMmZlZGZhY2E1ZmNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0xODgsNiArMTg4
LDExIEBAIHVuc2lnbmVkIFNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JB
eGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zCiB7CiAgICAgcmV0dXJuIG1fc2Nyb2xsQ29u
dHJvbGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMpOwogfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yOjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9s
bGVyLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywgaW5kZXgpOworfQogI2Vu
ZGlmCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiBlKQpAQCAtMjcwLDEwICsyNzUsNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
Ojp1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JPZmZzZXQoKQogI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCiAgICAgYXV0byBzY3JvbGxPZmZzZXQgPSBtX3Njcm9sbGFibGVBcmVhLnNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihyb3VuZGVkSW50UG9pbnQoY3VycmVudFBvc2l0aW9uKCkp
KTsKICAgICBtX3Njcm9sbENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKLSAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNj
cm9sbFNuYXBJbmRleERpZENoYW5nZSgpKSB7Ci0gICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0
Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZl
U2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKLSAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCht
X3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsKSk7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTI4OCw5ICsyODksMTQg
QEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0
U2l6ZSYgZGVsdGEpCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotdm9pZCBTY3Jv
bGxBbmltYXRvcjo6dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6
OnNldFNuYXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8mIGlu
Zm8pCit7CisgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldFNuYXBPZmZzZXRzSW5mbyhpbmZvKTsK
K30KKworY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBTY3JvbGxBbmltYXRvcjo6
c25hcE9mZnNldHNJbmZvKCkgY29uc3QKIHsKLSAgICBtX3Njcm9sbENvbnRyb2xsZXIudXBkYXRl
U2Nyb2xsU25hcFN0YXRlKG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIHJldHVybiBtX3Njcm9sbENv
bnRyb2xsZXIuc25hcE9mZnNldHNJbmZvKCk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0
b3I6OnNjcm9sbE9mZnNldCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAppbmRleCBiNTdkMzM2MGU5NTU1ODE1YjIzM2YxNTg5ODU2ZTdkYzNlYjQyODBmLi41
YTI4NjE3ZmY4ZTZmN2YyZWRiMmI4YWIzYTFiOGJmZDdkMmI4YTBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKQEAgLTE1OCw2ICsxNTgsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKICAgICBib29sIGFjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdDsKKyAgICB2b2lkIHNldEFjdGl2ZVNj
cm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCBpbmRleCk7Cisg
ICAgdm9pZCBzZXRTbmFwT2Zmc2V0c0luZm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJ
bmZvJik7CisgICAgY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvKiBzbmFwT2Zmc2V0
c0luZm8oKSBjb25zdDsKICNlbmRpZgogCiAgICAgLy8gU2Nyb2xsQ29udHJvbGxlckNsaWVudC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKaW5kZXggNzll
YTU3MjhkNWMxNzI4ODhhYTA4ZDYzZDlkOTg5MjAxYWI2OTgzMS4uZDg2ZjVkZWMxM2E0MzU4Yjg3
YzUxYzkyMGI2YjJiM2QxYjE2YWZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQ29udHJvbGxlci5jcHAKQEAgLTk5LDE4ICs5OSw3IEBAIGJvb2wgU2Nyb2xsQ29udHJvbGxl
cjo6dXNlc1Njcm9sbFNuYXAoKSBjb25zdAogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
IAotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Ny
b2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQotewotICAgIGNvbnN0IGF1dG8qIHNuYXBPZmZz
ZXRJbmZvID0gc2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNldEluZm8oKTsKLSAgICBpZiAoIXNuYXBP
ZmZzZXRJbmZvKSB7Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoKnNuYXBPZmZz
ZXRJbmZvKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwUG9p
bnRzKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYgc25hcE9mZnNldEluZm8pCit2
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldFNuYXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8mIHNuYXBPZmZzZXRJbmZvKQogewogICAgIGlmIChzbmFwT2Zmc2V0
SW5mby5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOwpA
QCAtMTI2LDcgKzExNSwxMiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNu
YXBQb2ludHMoY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJgogICAgIGlmIChzaG91
bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzKQogICAgICAgICBzZXRBY3RpdmVTY3JvbGxTbmFw
SW5kaWNlc0Zvck9mZnNldChyb3VuZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkp
KTsKIAotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENv
bnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRlU2Nyb2xsU25hcFN0YXRlIG5ldyBzdGF0ZTog
IiA8PCBWYWx1ZU9yTnVsbChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkpOworICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlz
IDw8ICIgc2V0U25hcE9mZnNldHNJbmZvIG5ldyBzdGF0ZTogIiA8PCBWYWx1ZU9yTnVsbChtX3Nj
cm9sbFNuYXBTdGF0ZS5nZXQoKSkpOworfQorCitjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0
c0luZm8qIFNjcm9sbENvbnRyb2xsZXI6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2Nyb2xsU25hcFN0YXRlID8gJm1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0
SW5mbygpIDogbnVsbHB0cjsKIH0KIAogdW5zaWduZWQgU2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZl
U2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaAppbmRleCBmZTQ1OGIzNjgyMDc5
YjQ5M2I2ODE5MGM2YWRjMWM2NWVkZjBiOGZmLi4yM2FjM2E0ZmM5NGU4YzEwNzJmYTRkMGFmMWNk
YjVhZWRmMGI3MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxl
ci5oCkBAIC0xMzksNyArMTM5LDggQEAgcHVibGljOgogICAgIHZvaWQgYW5pbWF0aW9uQ2FsbGJh
Y2soTW9ub3RvbmljVGltZSk7CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZv
aWQgdXBkYXRlU2Nyb2xsU25hcFBvaW50cyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8mKTsKKyAgICB2b2lkIHNldFNuYXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFw
T2Zmc2V0c0luZm8mKTsKKyAgICBjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8qIHNu
YXBPZmZzZXRzSW5mbygpIGNvbnN0OwogICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMsIHVuc2lnbmVkKTsKICAgICB2b2lkIHNldEFjdGl2ZVNj
cm9sbFNuYXBJbmRpY2VzRm9yT2Zmc2V0KFNjcm9sbE9mZnNldCk7CiAgICAgYm9vbCBhY3RpdmVT
Y3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwCmluZGV4IGExNzdlODBkNWRjMzIxYTg4N2Y4MGJmYmI0MTQyMmFhMzU0NGU3NGUuLjdm
ZGNlNzMyMTU0YTJhOTY5ZTdhYzY0MmM3ZmFiNDdhMDg1N2U4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTUwLDEyICs1MCw3IEBAIHN0cnVjdCBT
YW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEgewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCB3
ZWFrUHRyRmFjdG9yV2FzQ29uc3RydWN0ZWRPbk1haW5UaHJlYWQ7CiAjZW5kaWYKLSNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQqIHBvaW50ZXJzWzNdOwotICAgIHVuc2lnbmVk
IGN1cnJlbnRJbmRpY2VzWzJdOwotI2Vsc2UKICAgICB2b2lkKiBwb2ludGVyWzJdOwotI2VuZGlm
CiAgICAgSW50UG9pbnQgb3JpZ2luOwogICAgIHVuc2lnbmVkIGJpdGZpZWxkcyA6IDE2OwogfTsK
QEAgLTIxNywxMiArMjEyLDYgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVu
dEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWUKICAgICBib29sIGhh
bmRsZWRFdmVudCA9IHNjcm9sbEFuaW1hdG9yKCkuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50
KTsKICAgICAKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9s
bGFibGVBcmVhICgiIDw8ICp0aGlzIDw8ICIpIGhhbmRsZVdoZWVsRXZlbnQgLSBoYW5kbGVkICIg
PDwgaGFuZGxlZEV2ZW50KTsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGlmIChz
Y3JvbGxBbmltYXRvcigpLmFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpKSB7Ci0gICAg
ICAgIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoc2Nyb2xsQW5pbWF0b3IoKS5h
Y3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkp
OwotICAgICAgICBzZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChzY3JvbGxBbmltYXRv
cigpLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCkpOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBoYW5kbGVkRXZlbnQ7CiB9CiAKQEAgLTQ3
OSwxNiArNDY4LDkgQEAgU3RyaW5nIFNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhclN0
YXRlRm9yVGVzdGluZygpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJiBTY3JvbGxhYmxlQXJlYTo6ZW5zdXJlU25hcE9m
ZnNldHNJbmZvKCkKLXsKLSAgICBpZiAoIW1fc25hcE9mZnNldHNJbmZvKQotICAgICAgICBtX3Nu
YXBPZmZzZXRzSW5mbyA9IG1ha2VVbmlxdWU8TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvPigp
OwotICAgIHJldHVybiAqbV9zbmFwT2Zmc2V0c0luZm87Ci19Ci0KLWNvbnN0IExheW91dFNjcm9s
bFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFyZWE6OnNuYXBPZmZzZXRJbmZvKCkgY29uc3QK
K2NvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsYWJsZUFyZWE6OnNuYXBP
ZmZzZXRzSW5mbygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc25hcE9mZnNldHNJbmZvLmdldCgp
OworICAgIHJldHVybiBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkgPyBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCktPnNuYXBPZmZzZXRzSW5mbygpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBTY3JvbGxh
YmxlQXJlYTo6c2V0U2Nyb2xsU25hcE9mZnNldEluZm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvJiBpbmZvKQpAQCAtNDk5LDU4ICs0ODEsNjEgQEAgdm9pZCBTY3JvbGxhYmxlQXJl
YTo6c2V0U2Nyb2xsU25hcE9mZnNldEluZm8oY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJ
bmZvJgogICAgIH0KIAogICAgIC8vIENvbnNpZGVyIGhhdmluZyBhIG5vbi1lbXB0eSBzZXQgb2Yg
c25hcCBvZmZzZXRzIGFzIGEgY3VlIHRvIGluaXRpYWxpemUgdGhlIFNjcm9sbEFuaW1hdG9yLgot
ICAgIHNjcm9sbEFuaW1hdG9yKCk7Ci0gICAgZW5zdXJlU25hcE9mZnNldHNJbmZvKCkgPSBpbmZv
OworICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0U25hcE9mZnNldHNJbmZvKGluZm8pOwogfQogCiB2
b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhclNuYXBPZmZzZXRzKCkKIHsKLSAgICBtX3NuYXBPZmZz
ZXRzSW5mbyA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnNldFNu
YXBPZmZzZXRzSW5mbyhMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8oKSk7CiB9CiAKLWJvb2wg
U2Nyb2xsYWJsZUFyZWE6OnVzZXNTY3JvbGxTbmFwKCkgY29uc3QKK3Vuc2lnbmVkIFNjcm9sbGFi
bGVBcmVhOjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gISFtX3NuYXBPZmZzZXRzSW5mbzsKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3Ig
PSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRv
ci0+YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwpOworICAgIHJldHVybiAwOyAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGludmFs
aWRTbmFwT2Zmc2V0SW5kZXguCiB9CiAKLUludFBvaW50IFNjcm9sbGFibGVBcmVhOjpuZWFyZXN0
QWN0aXZlU25hcFBvaW50KGNvbnN0IEludFBvaW50JiBjdXJyZW50UG9zaXRpb24pCit1bnNpZ25l
ZCBTY3JvbGxhYmxlQXJlYTo6Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSBjb25zdAog
ewotICAgIGlmICghbV9zbmFwT2Zmc2V0c0luZm8pCi0gICAgICAgIHJldHVybiBjdXJyZW50UG9z
aXRpb247Ci0gICAgCi0gICAgaWYgKCFleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAg
IHJldHVybiBjdXJyZW50UG9zaXRpb247Ci0KLSAgICBJbnRQb2ludCBjb3JyZWN0ZWRQb3NpdGlv
biA9IGN1cnJlbnRQb3NpdGlvbjsKLQotICAgIGNvbnN0IGF1dG8mIGhvcml6b250YWwgPSBtX3Nu
YXBPZmZzZXRzSW5mby0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzOwotICAgIHNpemVfdCBhY3RpdmVI
b3Jpem9udGFsSW5kZXggPSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7Ci0gICAg
aWYgKGFjdGl2ZUhvcml6b250YWxJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQotICAgICAgICBj
b3JyZWN0ZWRQb3NpdGlvbi5zZXRYKGhvcml6b250YWxbYWN0aXZlSG9yaXpvbnRhbEluZGV4XS5v
ZmZzZXQudG9JbnQoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmFjdGl2ZVNj
cm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgcmV0
dXJuIDA7IC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgaW52YWxpZFNuYXBPZmZzZXRJ
bmRleC4KK30KIAotICAgIGNvbnN0IGF1dG8mIHZlcnRpY2FsID0gbV9zbmFwT2Zmc2V0c0luZm8t
PnZlcnRpY2FsU25hcE9mZnNldHM7Ci0gICAgc2l6ZV90IGFjdGl2ZVZlcnRpY2FsSW5kZXggPSBj
dXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOwotICAgIGlmIChhY3RpdmVWZXJ0aWNhbElu
ZGV4IDwgdmVydGljYWwuc2l6ZSgpKQotICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRZKHZl
cnRpY2FsW2FjdGl2ZVZlcnRpY2FsSW5kZXhdLm9mZnNldC50b0ludCgpKTsKK3ZvaWQgU2Nyb2xs
YWJsZUFyZWE6OnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5k
ZXgpCit7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JB
eGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgaW5kZXgpOworfQogCi0gICAgcmV0dXJu
IGNvcnJlY3RlZFBvc2l0aW9uOwordm9pZCBTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudFZlcnRp
Y2FsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgc2Nyb2xsQW5pbWF0b3Io
KS5zZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwsIGluZGV4KTsKIH0KIAotdm9pZCBTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsU25hcFN0
YXRlKCkKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnJlc25hcEFmdGVyTGF5b3V0KCkKIHsKLSAgICBp
ZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQotICAgICAgICBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cisg
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHVwZGF0
ZVNjcm9sbFNuYXBTdGF0ZTogaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyAiIDw8IGlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MoKSA8PCAiIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgIiA8PCBpc1VzZXJTY3Jv
bGxJblByb2dyZXNzKCkpOwogCi0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgIGlmICgh
ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpIHx8IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSB8fCBp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiB1cGRhdGVTY3JvbGxTbmFw
U3RhdGU6IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgIiA8PCBpc1Njcm9sbFNuYXBJblByb2dyZXNz
KCkgPDwgIiBpc1VzZXJTY3JvbGxJblByb2dyZXNzICIgPDwgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpKTsKLQotICAgIGlmIChpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgfHwgaXNVc2VyU2Nyb2xs
SW5Qcm9ncmVzcygpKQorICAgIGNvbnN0IGF1dG8qIGluZm8gPSBzbmFwT2Zmc2V0c0luZm8oKTsK
KyAgICBpZiAoIWluZm8pCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFBvaW50IGN1cnJlbnRQ
b3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgSW50UG9pbnQgY29ycmVjdGVkUG9zaXRp
b24gPSBuZWFyZXN0QWN0aXZlU25hcFBvaW50KGN1cnJlbnRQb3NpdGlvbik7CisgICAgSW50UG9p
bnQgY29ycmVjdGVkUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247CisgICAgY29uc3QgYXV0byYg
aG9yaXpvbnRhbCA9IGluZm8tPmhvcml6b250YWxTbmFwT2Zmc2V0czsKKyAgICBhdXRvIGFjdGl2
ZUhvcml6b250YWxJbmRleCA9IGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsKKyAg
ICBpZiAoYWN0aXZlSG9yaXpvbnRhbEluZGV4IDwgaG9yaXpvbnRhbC5zaXplKCkpCisgICAgICAg
IGNvcnJlY3RlZFBvc2l0aW9uLnNldFgoaG9yaXpvbnRhbFthY3RpdmVIb3Jpem9udGFsSW5kZXhd
Lm9mZnNldC50b0ludCgpKTsKKworICAgIGNvbnN0IGF1dG8mIHZlcnRpY2FsID0gaW5mby0+dmVy
dGljYWxTbmFwT2Zmc2V0czsKKyAgICBhdXRvIGFjdGl2ZVZlcnRpY2FsSW5kZXggPSBjdXJyZW50
VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOworICAgIGlmIChhY3RpdmVWZXJ0aWNhbEluZGV4IDwg
dmVydGljYWwuc2l6ZSgpKQorICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRZKHZlcnRpY2Fs
W2FjdGl2ZVZlcnRpY2FsSW5kZXhdLm9mZnNldC50b0ludCgpKTsKIAogICAgIGlmIChjb3JyZWN0
ZWRQb3NpdGlvbiAhPSBjdXJyZW50UG9zaXRpb24pIHsKICAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiIGFkanVzdGluZyBwb3NpdGlvbiBmcm9tICIgPDwgY3Vy
cmVudFBvc2l0aW9uIDw8ICIgdG8gIiA8PCBjb3JyZWN0ZWRQb3NpdGlvbik7CkBAIC01NjAsMjIg
KzU0NSwyMyBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKQog
CiB2b2lkIFNjcm9sbGFibGVBcmVhOjpkb1Bvc3RUaHVtYk1vdmVTbmFwcGluZyhTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisg
ICAgYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCk7CisgICAg
aWYgKCFzY3JvbGxBbmltYXRvcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBjdXJyZW50
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CiAgICAgYXV0byBuZXdPZmZzZXQgPSBjdXJyZW50T2Zm
c2V0OwogICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAg
ICBuZXdPZmZzZXQuc2V0WChtX3Njcm9sbEFuaW1hdG9yLT5hZGp1c3RTY3JvbGxPZmZzZXRGb3JT
bmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY3VycmVudE9mZnNl
dC54KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOworICAgICAg
ICBuZXdPZmZzZXQuc2V0WChzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25h
cHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJlbnRPZmZzZXQu
eCgpLCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2Q6OkNsb3Nlc3QpKTsKICAgICBlbHNl
Ci0gICAgICAgIG5ld09mZnNldC5zZXRZKG1fc2Nyb2xsQW5pbWF0b3ItPmFkanVzdFNjcm9sbE9m
ZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgY3VycmVu
dE9mZnNldC55KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOwor
ICAgICAgICBuZXdPZmZzZXQuc2V0WShzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0
Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjdXJyZW50T2Zm
c2V0LnkoKSwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kOjpDbG9zZXN0KSk7CiAgICAg
aWYgKG5ld09mZnNldCA9PSBjdXJyZW50T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAKLSAgICBz
Y3JvbGxBbmltYXRvcigpLnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdPZmZzZXQpOwor
ICAgIHNjcm9sbEFuaW1hdG9yLT5zY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3T2Zmc2V0
KTsKIH0KICNlbHNlCi12b2lkIFNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxTbmFwU3RhdGUo
KQordm9pZCBTY3JvbGxhYmxlQXJlYTo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCAwMTk1YTE1NTQzNzlhOWMz
ZTE2OTVmN2M0NGVjZGQzZGVmZDA3N2ZlLi5lMjdlMDFjYzgwMzQzMWExODVmNmQxYjQ1NTM4YTVj
NGU1ZjczMzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxl
QXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKQEAg
LTg4LDIxICs4OCwxOCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJv
b2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBzdGQ6Om9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPik7CiAKLSAgICBib29sIHVz
ZXNTY3JvbGxTbmFwKCkgY29uc3Q7Ci0KICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogc25hcE9m
ZnNldEluZm8oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSB7
IH07CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZv
KiBzbmFwT2Zmc2V0c0luZm8oKSBjb25zdDsKICAgICB2b2lkIHNldFNjcm9sbFNuYXBPZmZzZXRJ
bmZvKGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYpOwogICAgIHZvaWQgY2xlYXJT
bmFwT2Zmc2V0cygpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXg7IH0K
LSAgICB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5k
ZXgpIHsgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gaW5kZXg7IH0KLSAgICB1
bnNpZ25lZCBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRWZXJ0
aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4KSB7IG1fY3VycmVudFZlcnRpY2FsU25h
cFBvaW50SW5kZXggPSBpbmRleDsgfQotICAgIEludFBvaW50IG5lYXJlc3RBY3RpdmVTbmFwUG9p
bnQoY29uc3QgSW50UG9pbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBjdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdW5z
aWduZWQgY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgodW5zaWduZWQp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5k
ZXgodW5zaWduZWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgp
OworICAgIHZvaWQgcmVzbmFwQWZ0ZXJMYXlvdXQoKTsKICAgICB2b2lkIGRvUG9zdFRodW1iTW92
ZVNuYXBwaW5nKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCkBAIC0zODQsMTMgKzM4MSw2IEBAIHByaXZhdGU6CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIAotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi0gICAgTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvJiBlbnN1cmVT
bmFwT2Zmc2V0c0luZm8oKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvPiBtX3NuYXBPZmZzZXRzSW5mbzsKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXggeyAwIH07Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKLSNlbmRpZgotCiAgICAgLy8gVGhlcmUgYXJlIDggcG9z
c2libGUgY29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9uLiBTY3JvbGwg
b3JpZ2luIHdpbGwgYmUgbm9uLXplcm8gaW4gdGhlIHggb3IgeSBheGlzCiAgICAgLy8gaWYgdGhl
cmUgaXMgYW55IHJldmVyc2VkIGRpcmVjdGlvbiBvciB3cml0aW5nLW1vZGUuIFRoZSBjb21iaW5h
dGlvbnMgYXJlOgogICAgIC8vIHdyaXRpbmctbW9kZSAvIGRpcmVjdGlvbiAgICAgc2Nyb2xsT3Jp
Z2luLngoKSBzZXQgICAgc2Nyb2xsT3JpZ2luLnkoKSBzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCBiMWYzNzViZmE1N2JkYTE1
MDkzZGEyYmFmYTUzNTViMWRhZmY0YWM4Li5iMWVjMmM2NGJlNWI2NzMwY2RkYzJjMGM4MDg1ZWQy
OWI3NDg5OTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLm1tCkBAIC0xMzAzLDcgKzEzMDMsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFj
OjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVl
bAogICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbV9zY3JvbGxhYmxlQXJl
YS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgJiYgd2hlZWxFdmVudC5p
c0dlc3R1cmVTdGFydCgpICYmIG1fc2Nyb2xsYWJsZUFyZWEuaXNQaW5uZWRGb3JTY3JvbGxEZWx0
YU9uQXhpcygtd2hlZWxFdmVudC5kZWx0YVkoKSwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7
CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICAgICAgaWYgKCFldmVudFByZXZlbnRz
U3RyZXRjaGluZykKLSAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVy
ZVNob3VsZEJlZ2luU25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBt
X3Njcm9sbGFibGVBcmVhLnNuYXBPZmZzZXRJbmZvKCkpOworICAgICAgICAgICAgZXZlbnRQcmV2
ZW50c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIFNjcm9s
bEV2ZW50QXhpczo6VmVydGljYWwsIG1fc2Nyb2xsYWJsZUFyZWEuc25hcE9mZnNldHNJbmZvKCkp
OwogI2VuZGlmCiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nICYmICFl
dmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9CkBAIC0xMzI3LDcgKzEzMjcsNyBAQCBib29s
IFNjcm9sbEFuaW1hdG9yTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZQogICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5n
ID0gbV9zY3JvbGxhYmxlQXJlYS5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9y
KCkgJiYgd2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpICYmIG1fc2Nyb2xsYWJsZUFyZWEuaXNQ
aW5uZWRGb3JTY3JvbGxEZWx0YU9uQXhpcygtd2hlZWxFdmVudC5kZWx0YVgoKSwgU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgICAg
ICBpZiAoIWV2ZW50UHJldmVudHNTdHJldGNoaW5nKQotICAgICAgICAgICAgZXZlbnRQcmV2ZW50
c1N0cmV0Y2hpbmcgPSBnZXN0dXJlU2hvdWxkQmVnaW5TbmFwKHdoZWVsRXZlbnQsIFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCwgbV9zY3JvbGxhYmxlQXJlYS5zbmFwT2Zmc2V0SW5mbygpKTsK
KyAgICAgICAgICAgIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gZ2VzdHVyZVNob3VsZEJlZ2lu
U25hcCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG1fc2Nyb2xsYWJs
ZUFyZWEuc25hcE9mZnNldHNJbmZvKCkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBzY3JvbGxi
YXJzQWxsb3dTdHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5jcHAKaW5kZXggMWJlZDY0OTlhODdmMGY0YmM1NDJjOTgwZGRhMWY1MDYwMDE1OWE2MC4u
MDk0NTg0NjBhMzRkODk4YmI0NGU0ZWJjMDZmNDRkMmE5ZTgzODczNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcApA
QCAtMTIxMyw3ICsxMjEzLDcgQEAgdm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpCiAgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRh
dGUoKTsKIAotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgIHJlc25hcEFmdGVyTGF5
b3V0KCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250
cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGExOTk4OTNhMTg2Yzg4NTU0YTY1N2ZhYjE2
MGM2ZTZjYjVlMThhYjEuLmIwMGFiNGVhOTA5MTQ3NjdhNGM2MzBmZTE1YjRjNTU4YzM4YWQyNmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ3MzYsNyArNDczNiw3IEBA
IEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpzY3JvbGxTbmFwT2Zmc2V0cyhFbGVtZW50
JiBlbGVtZW50KQogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGF1dG8qIG9mZnNldEluZm8gPSBz
Y3JvbGxhYmxlQXJlYS0+c25hcE9mZnNldEluZm8oKTsKKyAgICBhdXRvKiBvZmZzZXRJbmZvID0g
c2Nyb2xsYWJsZUFyZWEtPnNuYXBPZmZzZXRzSW5mbygpOwogICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OwogICAgIGlmIChvZmZzZXRJbmZvICYmICFvZmZzZXRJbmZvLT5ob3Jpem9udGFsU25hcE9m
ZnNldHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoImhvcml6b250YWwgPSAi
KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>