<?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>215551</bug_id>
          
          <creation_ts>2020-08-16 14:47:44 -0700</creation_ts>
          <short_desc>Create documentOrder function, start refactoring to use it instead of Range::compare functions</short_desc>
          <delta_ts>2020-08-22 09:13:17 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215677</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1680689</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-16 14:47:44 -0700</bug_when>
    <thetext>Create documentOrder function, start refactoring to use it instead of Range::compare functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680690</commentid>
    <comment_count>1</comment_count>
      <attachid>406686</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-16 15:24:07 -0700</bug_when>
    <thetext>Created attachment 406686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680691</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-16 15:24:43 -0700</bug_when>
    <thetext>Won’t be landing this for another week, but might be ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680692</commentid>
    <comment_count>3</comment_count>
      <attachid>406686</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-16 15:34:42 -0700</bug_when>
    <thetext>Comment on attachment 406686
Patch

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

&gt; Source/WebCore/dom/Node.h:676
&gt; +enum class PartialOrdering : uint8_t { Less, Equivalent, Greater, Unordered };

This was based on my misunderstanding of std::partial_ordering, which is not an enumeration. The switch statements won’t be possible if I change this to be a class like std::partial_ordering is, but I suspect I should do that so we can eventually switch over to std::partial_ordering with minimal changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680979</commentid>
    <comment_count>4</comment_count>
      <attachid>406755</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-17 17:21:10 -0700</bug_when>
    <thetext>Created attachment 406755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681092</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-18 09:13:34 -0700</bug_when>
    <thetext>I’ll be landing this on Saturday, but would appreciate a review sooner. This is passing all tests on EWS now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681708</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-20 09:29:43 -0700</bug_when>
    <thetext>Would love to get this reviewed so I can land it in a couple days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681721</commentid>
    <comment_count>7</comment_count>
      <attachid>406755</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-08-20 09:59:27 -0700</bug_when>
    <thetext>Comment on attachment 406755
Patch

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

r=me

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1947
&gt;      if (isNativeTextControl() &amp;&amp; is&lt;HTMLTextFormControlElement&gt;(*node))

The is&lt;HTMLTextFormControlElement&gt;(*node) could be faster if we now leveraged the fact that we already know node is an Element. is&lt;HTMLTextFormControlElement&gt;(*node) does an is&lt;WebCore::Element&gt;(node) check internally when you pass it a Node.

&gt; Source/WebCore/dom/Node.h:676
&gt; +class PartialOrdering {

Can you explain why we&apos;re not using a simple enum? I personally find this class a bit confusing and not very WebKit like (is_eq() for e.g. does not seem to match WebKit coding style).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681741</commentid>
    <comment_count>8</comment_count>
      <attachid>406755</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-20 11:06:24 -0700</bug_when>
    <thetext>Comment on attachment 406755
Patch

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

&gt;&gt; Source/WebCore/dom/Node.h:676
&gt;&gt; +class PartialOrdering {
&gt; 
&gt; Can you explain why we&apos;re not using a simple enum? I personally find this class a bit confusing and not very WebKit like (is_eq() for e.g. does not seem to match WebKit coding style).

Yes, not my design or specific to WebKit.

This is out of C++20, with the name changed from std::partial_ordering to WebCore::PartialOrdering (it’s a small subset, but compatible, of the real std::partial_ordering). My goal is to position us to easily switch to std::partial_ordering once we start using C++20. There will be benefits to using the standard class.

https://en.cppreference.com/w/cpp/utility/compare/partial_ordering
https://en.cppreference.com/w/cpp/utility/compare/named_comparison_functions

I used an enumeration in my first cut, then realized that’s not how std::partial_ordering works, and changed it to match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681742</commentid>
    <comment_count>9</comment_count>
      <attachid>406755</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-20 11:06:46 -0700</bug_when>
    <thetext>Comment on attachment 406755
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1947
&gt;&gt;      if (isNativeTextControl() &amp;&amp; is&lt;HTMLTextFormControlElement&gt;(*node))
&gt; 
&gt; The is&lt;HTMLTextFormControlElement&gt;(*node) could be faster if we now leveraged the fact that we already know node is an Element. is&lt;HTMLTextFormControlElement&gt;(*node) does an is&lt;WebCore::Element&gt;(node) check internally when you pass it a Node.

Yes, I’ll fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681809</commentid>
    <comment_count>10</comment_count>
      <attachid>406755</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-20 14:05:23 -0700</bug_when>
    <thetext>Comment on attachment 406755
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Node.h:676
&gt;&gt;&gt; +class PartialOrdering {
&gt;&gt; 
&gt;&gt; Can you explain why we&apos;re not using a simple enum? I personally find this class a bit confusing and not very WebKit like (is_eq() for e.g. does not seem to match WebKit coding style).
&gt; 
&gt; Yes, not my design or specific to WebKit.
&gt; 
&gt; This is out of C++20, with the name changed from std::partial_ordering to WebCore::PartialOrdering (it’s a small subset, but compatible, of the real std::partial_ordering). My goal is to position us to easily switch to std::partial_ordering once we start using C++20. There will be benefits to using the standard class.
&gt; 
&gt; https://en.cppreference.com/w/cpp/utility/compare/partial_ordering
&gt; https://en.cppreference.com/w/cpp/utility/compare/named_comparison_functions
&gt; 
&gt; I used an enumeration in my first cut, then realized that’s not how std::partial_ordering works, and changed it to match.

Maybe I need to add a comment making this clear?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682128</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-22 09:12:07 -0700</bug_when>
    <thetext>Committed r266026: &lt;https://trac.webkit.org/changeset/266026&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682130</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-22 09:13:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/67617503&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406686</attachid>
            <date>2020-08-16 15:24:07 -0700</date>
            <delta_ts>2020-08-17 17:21:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215551-20200816152407.patch</filename>
            <type>text/plain</type>
            <size>85545</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDEzZmRkZTliYTljYjBm
OTIzNWJmM2Y5N2JiMmZiZjczOTIxOTgwNC4uM2RmMTZlZjZlMGE5Mzk2NzY5NjQzMmIwZGY2MzMw
ZWFjZWVkNmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNyBAQAorMjAyMC0wOC0xNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGRvY3VtZW50T3Jk
ZXIgZnVuY3Rpb24sIHN0YXJ0IHJlZmFjdG9yaW5nIHRvIHVzZSBpdCBpbnN0ZWFkIG9mIFJhbmdl
Ojpjb21wYXJlIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE1NTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1ha2UgVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmggUHJpdmF0ZSBzbworICAgICAgICB3ZSBjYW4gdXNlIGl0
IGZyb20gdW5pdCB0ZXN0cy4KKworICAgICAgICAqIGRvbS9Cb3VuZGFyeVBvaW50Lmg6IEFkZGVk
ICE9IGFuZCBkb2N1bWVudE9yZGVyLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6IEV4cG9y
dCBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZCBjb25zdHJ1Y3RvciAgc28gd2UgY2FuIGFsbG9jYXRl
CisgICAgICAgIGluIGEgdW5pdCB0ZXN0LgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKTogUmVuYW1lZCBmcm9tIGFy
ZU5vZGVzQ29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
Y29tcGFyZURvY3VtZW50UG9zaXRpb24pOiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZSBhYm92ZS4K
KyAgICAgICAgKFdlYkNvcmU6OmRlcHRoKTogQ2hhbmdlZCB0byB0YWtlIGEgY29uc3QmIGFuZCB0
byB3YWxrIGFjcm9zc3Mgc2hhZG93IGhvc3QgYm91bmRhcmllcywKKyAgICAgICAgc28gdGhpcyBj
YW4gYmUgdXNlZCBpbiBhbGdvcml0aG1zIHRoYXQgYXJlIGludGVuZGVkIHRvIHdvcmsgb24gdGhl
IGNvbWJpbmVkIHRyZWUuCisgICAgICAgIEhhcyBubyBlZmZlY3Qgd2hlbiBjYWxsZWQgb24gbm9k
ZXMgdGhhdCBhcmUgbm90IGluIGEgc2hhZG93IHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpjb21t
b25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuKTogUmVmYWN0b3JlZCBzbyB0aGlzIGNhbiBi
ZSB1c2VkIGJ5CisgICAgICAgIGNhbGxlcnMgdGhhdCBuZWVkIHRvIGtub3cgdGhlIGRpc3RpbmN0
IGFuY2VzdG9yIGNoaWxkcmVuIGFzIHdlbGwgYXMgdGhlIGNvbW1vbgorICAgICAgICBhbmNlc3Rv
ci4gQWxzbyByZXZpc2VkIGl0IHRvIHdvcmsgYWNyb3NzIHNoYWRvdyB0cmVlIGJvdW5kYXJpZXMu
CisgICAgICAgIChXZWJDb3JlOjpjb21tb25JbmNsdXNpdmVBbmNlc3Rvcik6IFVwZGF0ZWQgdG8g
Y2FsbCBjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuLgorICAgICAgICAoV2ViQ29y
ZTo6aXNTaWJsaW5nU3Vic2VxdWVudCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1l
bnRPcmRlcik6IEFkZGVkLiBJbXBsZW1lbnRlZCB1c2luZyBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
ckFuZENoaWxkcmVuIGFuZAorICAgICAgICBpc1NpYmxpbmdTdWJzZXF1ZW50LgorICAgICAgICAq
IGRvbS9Ob2RlLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLiBBbHNvIGFkZGRlZCBQYXJ0aWFsT3JkZXJp
bmcgZW51bWVyYXRpb24sIHNpbWlsYXIgaW4KKyAgICAgICAgc3Bpcml0IHRvIEMrKzIwJ3Mgc3Rk
OjpwYXJ0aWFsX29yZGVyaW5nLCBmb3IgcmV0dXJuIHZhbHVlIGZvciBkb2N1bWVudE9yZGVyLgor
CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
Ojpjb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlIGNvbnN0KTogUmVtb3ZlZCBjbGFtcGluZyB0
aGUKKyAgICAgICAgcmVzdWx0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGNvbnRhaW5lciBub2RlOyBu
b3QgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnByZXZpb3VzIGNvbnN0KTog
VXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bmV4
dCBjb25zdCk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OnVwc3RyZWFtIGNvbnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSBjb25zdCk6IFVwZGF0ZWQgZm9yIG5hbWUg
Y2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IpOiBSZW5h
bWVkIGZyb20gY29tbW9uU2hhZG93SW5jbHVkaW5nQW5jZXN0b3IKKyAgICAgICAgc2luY2UgdGhp
cyBpcyBub3cgdGhlIHNhbWUgYXMgdGhlIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yIHRoYXQgdGFr
ZXMgdHdvIG5vZGVzOworICAgICAgICB0aGV5IG5vdyBib3RoIHRha2Ugc2hhZG93IHRyZWVzIGlu
dG8gYWNjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlv
bik6IEFkZGVkLiBDbGVhcmVyIHdheSB0byBjb25zdHJ1Y3QKKyAgICAgICAgcG9zaXRpb25zIGZy
b20gY29udGFpbmVycyBhbmQgb2Zmc2V0cy4gQW4gYWx0ZXJuYXRpdmUgdG8gbWFrZURlcHJlY2F0
ZWRMZWdhY3lQb3NpdGlvbgorICAgICAgICBmb3IgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0
aGUgZGVwcmVjYXRlZCBsZWdhY3kgYmVoYXZpb3IuCisgICAgICAgIChXZWJDb3JlOjptYWtlRGVw
cmVjYXRlZExlZ2FjeVBvc2l0aW9uKTogUmVuYW1lZCBmcm9tIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbi4KKyAgICAgICAgQWRkaW5nIHRoZSB3b3JkICJkZXByZWNhdGVkIiB0byBiZSBjbGVh
cmVyIHRoYXQgdGhpcyBpcyBub3QganVzdCAibGVnYWN5IiBidXQgYWxzbworICAgICAgICBzb21l
dGhpbmcgd2UgYXJlIHRyeWluZyB0byBnZXQgcmlkIG9mLiBDaGFuZ2luZyBmcm9tICJjcmVhdGUi
IHRvICJtYWtlIiBiZWNhdXNlCisgICAgICAgIHRoaXMgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5
IG9uIHRoZSBoZWFwLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6IEFkZGVkLiBT
dGlsbCB0byBkbzogbW9yZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gd2hlbgorICAgICAgICB3
ZSBjYW4gY29tcGFyZSB0d28gcG9zaXRpb25zIHdpdGhvdXQgY29tcHV0aW5nIG5vZGUgb2Zmc2V0
cy4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKyAgICAg
ICAgKFdlYkNvcmU6Om1pbk9mZnNldEZvck5vZGUpOiBEZWxldGVkLgorCisgICAgICAgICogZG9t
L1JhZGlvQnV0dG9uR3JvdXBzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvQnV0dG9uR3Jv
dXA6Om1lbWJlcnMgY29uc3QpOiBVc2UgZG9jdW1lbnRPcmRlciBpbnN0ZWFkIG9mCisgICAgICAg
IGRvY3VtZW50T3JkZXJDb21wYXJhdG9yLgorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFyZVJhbmdlc0VxdWFsKTogUmV3cm90ZSB0byBub3QgdXNlIFBvc2l0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VzT3ZlcmxhcCk6IFVwZGF0ZWQgZm9yIG5hbWUg
Y2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmV4cGFuZCk6IFJld3dyb3RlIHRvIG5v
dCB1c2UgUmFuZ2U6OnN0YXJ0L2VuZFBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3I8PCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuaDogUmVtb3ZlZCBub3ctdW51
c2VkIFJhbmdlOjpzdGFydC9lbmRQb3NpdGlvbiwgZG9jdW1lbnRPcmRlckNvbXBhcmF0b3IsCisg
ICAgICAgIGFuZCBUZXh0U3RyZWFtIG9wZXJhdG9ycy4KKworICAgICAgICAqIGRvbS9SYW5nZUJv
dW5kYXJ5UG9pbnQuaDogUmVtb3ZlZCBub3ctdW51c2VkIFJhbmdlQm91bmRhcnlQb2ludDo6dG9Q
b3NpdGlvbi4KKyAgICAgICAgQWRkZWQgbWFrZUJvdW5kYXJ5UG9pbnQgZnVuY3Rpb24gdG8gY29u
dmVydCBSYW5nZUJvdW5kYXJ5UG9pbnQgaW50byBCb3VuZGFyeVBvaW50LgorCisgICAgICAgICog
ZG9tL1NpbXBsZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzT2Zmc2V0QmVmb3JlQ2hp
bGQpOiBBZGRlZC4gRm9yIHVzZSBieSBkb2N1bWVudE9yZGVyLgorICAgICAgICAoV2ViQ29yZTo6
ZG9jdW1lbnRPcmRlcik6IEFkZGVkLgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQpOiBVc2UgZG9jdW1lbnRPcmRl
ciBpbnN0ZWFkIG9mCisgICAgICAgIFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMuCisKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
cmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFu
Z2UuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oOiBVc2UgYXNzaWdubWVu
dCBpbnN0ZWVkIG9mIGNhbGxpbmcgY2xlYXIsCisgICAgICAgIHRvIHBvc3NpYmx5IHByZXBhcmUg
dG8gZ2V0IHJpZCBvZiBQb3NpdGlvbjo6Y2xlYXIgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgQWRk
ZWQgYSBkb2N1bWVudE9SZGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdHdvIHZpc2libGUgcG9zaXRp
b25zLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAg
ICAoSFRNTENvbnZlcnRlckNhY2hlczo6Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRl
ZCk6IFVzZQorICAgICAgICBjb21tb25JbmNsdXNpdmVBbmNlc3RvciBpbnN0ZWFkIG9mIGNvbW1v
blNoYWRvd0luY2x1ZGluZ0FuY2VzdG9yLgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50
ZXJuYWwpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50Lmg6IEV4cG9y
dCBjcmVhdGUgZnVuY3Rpb24gc28gaXQgY2FuIHVzZWQgaW4gdW5pdCB0ZXN0cy4KKyAgICAgICAg
KiBodG1sL0hUTUxEaXZFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEh0bWxF
bGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUpOiBBZGRlZCBz
byBpdCBjYW4gYmUgdXNlZCBpbiB1bml0IHRlc3RzLgorICAgICAgICAqIGh0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5oOiBEaXR0by4gQWxzbyBleHBvcnQgdGhlIGlubmVyVGV4dEVsZW1lbnQgZnVu
Y3Rpb24KKyAgICAgICAgc28gaXQgY2FuIGJlIHVzZWQgaW4gdW5pdCB0ZXN0cy4KKworICAgICAg
ICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlv
bjo6YWRkUmFuZ2UpOiBVc2UgbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbiBkaXJlY3RseQor
ICAgICAgICByYXRoZXIgdGhhbiB1c2luZyBSYW5nZTo6c3RhcnQvZW5kUG9zaXRpb24uIFRoaXMg
d2FzIHRoZSBvbmx5IHBsYWNlIGluIFdlYkNvcmUKKyAgICAgICAgc3RpbGwgdXNpbmcgUmFuZ2U6
OnN0YXJ0L2VuZFBvc2l0aW9uIGFuZCBvdmVyIHRpbWUgd2Ugd291bGQgbGlrZSB0byBtb3ZlIGZy
b20KKyAgICAgICAgbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbiB0byBtYWtlQ29udGFpbmVy
T2Zmc2V0UG9zaXRpb24sIHNvIGl0J3MgZ29vZCB0bworICAgICAgICBoYXZlIGl0IGJlIGV4cGxp
Y2l0IGhlcmUgcmF0aGVyIHRoYW4gaGlkZGVuIGluc2lkZSB0aGUgUmFuZ2UgY2xhc3MuCisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6IEFkZGVkIGEg
Y2hlY2sgb2YgY29udGFpbmluZ1NoYWRvd1Jvb3QuCisgICAgICAgIFRoaXMgcHJlc2VydmVzIHRo
ZSBvbGQgYmVoYXZpb3IuIEJlZm9yZSwgY29uc3RydWN0aW5nIHRoZSByYW5nZSByZXN1bHRlZCBp
bgorICAgICAgICBhIGNvbGxhcHNlZCByYW5nZSB3aGVuIHRoZSBzaGFkb3cgdHJlZSB3YXMgaW52
b2x2ZWQuIFRoaXMgaXMgYSBtb3JlIGRpcmVjdCB3YXkKKyAgICAgICAgdG8gYWNoaWV2ZSB0aGUg
c2FtZSByZXN1bHQuCisKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cmVwbGFjZVJhbmdlcyk6IFVzZSBkb2N1bWVudE9yZGVyIGluc3RlYWQgb2YgY29tcGFyZVBv
c2l0aW9ucy4KKyAgICAgICAgRXZlbnR1YWxseSB3ZSB3aWxsIGRlbGV0ZSBjb21wYXJlUG9zaXRp
b25zLgorCiAyMDIwLTA4LTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIFNjcm9sbGluZyBzeW5jIGNoYW5nZXMgaW4gcjI2MTk4NSByZWdyZXNzZWQg
Q1BVIHVzYWdlIGJ5IH4yIG1zL3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggM2I3YzUyNDcxMzk3YWY3OGZiZDQzOTE1
NzY3MjdkYTI4N2FmNGUxNS4uODhmOGVhY2FlZTMzYzM5NDllZGNmNzE0YmViNGVhYmUzOWU1MTU3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wOC0xNiAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGRvY3VtZW50T3JkZXIgZnVuY3Rpb24s
IHN0YXJ0IHJlZmFjdG9yaW5nIHRvIHVzZSBpdCBpbnN0ZWFkIG9mIFJhbmdlOjpjb21wYXJlIGZ1
bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1NTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToKKyAgICAg
ICAgKC1bV0tET01SYW5nZSByYW5nZUJ5RXhwYW5kaW5nVG9Xb3JkQm91bmRhcnlCeUNoYXJhY3Rl
cnM6aW5EaXJlY3Rpb246XSk6CisgICAgICAgIFVzZSBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0
aW9uIGluc3RlYWQgb2YgUmFuZ2U6OnN0YXJ0L2VuZFBvc2l0aW9uLgorICAgICAgICBUaGlzIHdh
cyB0aGUgb25seSBwbGFjZSBpbiB0aGUgV2ViS2l0IGZyYW1ld29yayBzdGlsbCB1c2luZworICAg
ICAgICBSYW5nZTo6c3RhcnQvZW5kUG9zaXRpb24gYW5kIG92ZXIgdGltZSB3ZSB3b3VsZCBsaWtl
IHRvIG1vdmUgZnJvbQorICAgICAgICBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uIHRvIG1h
a2VDb250YWluZXJPZmZzZXRQb3NpdGlvbiwgc28gaXQncyBnb29kCisgICAgICAgIHRvIGhhdmUg
aXQgYmUgZXhwbGljaXQgaGVyZSByYXRoZXIgdGhhbiBoaWRkZW4gaW5zaWRlIHRoZSBSYW5nZSBj
bGFzcy4KKwogMjAyMC0wOC0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBTY3JvbGxpbmcgc3luYyBjaGFuZ2VzIGluIHIyNjE5ODUgcmVncmVzc2Vk
IENQVSB1c2FnZSBieSB+MiBtcy9zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNjJk
YWQxNTFmNjQzYjAxNzUwNTY2ZWEwMGJkYmJiNDBhY2ExMTRhYy4uMWE3NzcyZjBjMGMxNTU3Nzkz
MjBkN2YzYThkNjQ4ODcwZmMyMDc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE2IEBACisyMDIwLTA4LTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBDcmVhdGUgZG9jdW1lbnRPcmRlciBmdW5jdGlvbiwgc3RhcnQgcmVmYWN0b3Jp
bmcgdG8gdXNlIGl0IGluc3RlYWQgb2YgUmFuZ2U6OmNvbXBhcmUgZnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU1NTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJh
bWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zbWFydEluc2VydEZvclN0cmluZzpyZXBsYWNp
bmdSYW5nZTpiZWZvcmVTdHJpbmc6YWZ0ZXJTdHJpbmc6XSk6CisgICAgICAgIFJld3JpdGUgdG8g
dXNlIG1ha2VTaW1wbGVSYW5nZSBhbmQgbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uLiBTaW1w
bGlmaWVzCisgICAgICAgIHRoZSBudWxsIGNoZWNrcy4gV291bGQgbG92ZSB0byByZW1vdmUgdGhl
IGZ1bmN0aW9uIGJ1dCBpdCdzIHN0aWxsIHVzZWQgYnkKKyAgICAgICAgQXBwbGUncyBNYWlsIGFw
cCAoaW4gYSBwZWN1bGlhciB3YXksIGFsd2F5cyBwYXNzaW5nIGEgY29uc3RhbnQgc3RyaW5nKS4K
KwogMjAyMC0wOC0xMiAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHRoZSBuZWVkIGZvciBkZWZpbmluZyBVU0VfTkVXX0JVSUxEX1NZU1RFTQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGJjNjg4MWJlODIwOGUyMGQzM2UyNDZkMjU2ZTc2OWJmZDI3ZjRmMGEuLjMyNDEyZTNiNGMzOWFi
N2NkYmFhOGMxMTZkYTA5MGZjYzYzZjI4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwNSw3ICs0MDUsNyBAQAogCQkxNDFE
QzA1MzE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxREMwNEQxNjQ4MzRCOTAwMzcxRTVBIC8qIExh
eW91dFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDFEQzA1NDE2NDgzNEI5MDAzNzFFNUEgLyogTGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxREMwNEUxNjQ4MzRCOTAwMzcx
RTVBIC8qIExheW91dFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNDIwMTFCNzBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xh
cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDIwMTFCNTBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQyQjk3Q0ExMzEz
ODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyQjk3QzgxMzEzODk0MzAwOEJFRjRC
IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovOyB9OworCQkxNDJCOTdDQTEzMTM4OTQz
MDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDJCOTdDODEzMTM4OTQzMDA4QkVGNEIgLyog
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQzMkU4NDcwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQz
MkU4NDYwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NDc2QUE4MTVEQzRCQjEwMDMwNURC
MiAvKiBXcml0aW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ0NzZBQTcxNURDNEJCMTAwMzA1REIyIC8qIFdyaXRpbmdNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0OUUyNEMxMDdE
NEE4NDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ5RTI0QTEwN0Q0QTg0MDBCNTc5M0YgLyogSlNDYWxs
YmFja0RhdGEuaCAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFy
eVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCmluZGV4IGZkYmUx
ZWFhYjcyNGVmMGJiY2MyM2NmYmY0ZjUzY2ViN2M3ZmQ4ZDkuLmJkZjFlODgwMDVlODVjNGM2NjQ0
NjFiZTY1OWY5NjUyYzY3OTUyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3Vu
ZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaApAQCAt
MzksNiArMzksOCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7CiB9OwogCiBib29sIG9wZXJhdG9y
PT0oY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK2Jvb2wgb3Bl
cmF0b3IhPShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOworV0VC
Q09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQ
b2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIAogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlKE5vZGUmKTsKIFdFQkNP
UkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlKE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNDFjOWZlYzYxZTI4YmFjMzg3Y2Nj
N2I5YjMzZjVmZDBkOGYzNDFlMi4uZjBjOGEzNGVmMzNlYmMwNmRkNTcyOTYyMDg1MGZhMTE5NWNi
NzUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTMzOCw3ICszMzgsNyBAQCBjbGFzcyBEb2N1
bWVudAogICAgICwgcHVibGljIFN1cHBsZW1lbnRhYmxlPERvY3VtZW50PgogICAgICwgcHVibGlj
IExvZ2dlcjo6T2JzZXJ2ZXIKICAgICAsIHB1YmxpYyBDYW52YXNPYnNlcnZlciB7Ci0gICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChEb2N1bWVudCk7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9FWFBPUlQoRG9jdW1lbnQsIFdFQkNPUkVfRVhQT1JUKTsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPERvY3VtZW50PiBjcmVhdGUoY29uc3QgVVJMJik7CiAgICAgc3RhdGljIFJlZjxEb2N1bWVu
dD4gY3JlYXRlTm9uUmVuZGVyZWRQbGFjZWhvbGRlcihGcmFtZSYsIGNvbnN0IFVSTCYpOwpAQCAt
MTU5Myw3ICsxNTkzLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1
Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEg
PDwgMSB9OwotICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgRG9jdW1lbnRDbGFzc0Zs
YWdzID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0g
MCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCBEb2N1
bWVudENsYXNzRmxhZ3MgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQgY29uc3RydWN0
aW9uRmxhZ3MgPSAwKTsKIAogICAgIHZvaWQgY2xlYXJYTUxWZXJzaW9uKCkgeyBtX3htbFZlcnNp
b24gPSBTdHJpbmcoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggYzU2NjBmY2JlYzFlNmVlYmJl
ODVmNTczYzQ0Zjg0MjQ3NzMzZGYwMy4uYTZjZTEzZWVlM2IwYmYzNjFhZmMxZTcwOTcxYjAyOTg2
Njg4YzE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMzIsOSArMzIsNiBAQAogI2luY2x1ZGUgIkNv
bW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSNpbmNsdWRlICJDb250ZW50Q2hhbmdlT2JzZXJ2ZXIuaCIKLSNlbmRpZgogI2luY2x1ZGUg
IkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIkRhdGFUcmFuc2Zlci5oIgpAQCAtODcsNiArODQsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJDb250ZW50Q2hhbmdlT2JzZXJ2ZXIu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChOb2RlKTsKQEAgLTE2MjEsMTQgKzE2MjIsMTMgQEAgc3RhdGljIGlubGluZSB1bnNp
Z25lZCBzaG9ydCBjb21wYXJlRGV0YWNoZWRFbGVtZW50c1Bvc2l0aW9uKE5vZGUmIGZpcnN0Tm9k
ZSwgTm8KICAgICByZXR1cm4gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIHwg
Tm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMgfCBkaXJlY3Rp
b247CiB9CiAKLWJvb2wgYXJlTm9kZXNDb25uZWN0ZWRJblNhbWVUcmVlU2NvcGUoY29uc3QgTm9k
ZSogYSwgY29uc3QgTm9kZSogYikKK2Jvb2wgY29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGNvbnN0
IE5vZGUqIGEsIGNvbnN0IE5vZGUqIGIpCiB7Ci0gICAgaWYgKCFhIHx8ICFiKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgLy8gTm90ZSB0aGF0IHdlIGF2b2lkIGNvbXBhcmluZyBBdHRyIG5v
ZGVzIGhlcmUsIHNpbmNlIHRoZXkgcmV0dXJuIGZhbHNlIGZyb20gaXNDb25uZWN0ZWQoKSBhbGwg
dGhlIHRpbWUgKHdoaWNoIHNlZW1zIGxpa2UgYSBidWcpLgotICAgIHJldHVybiBhLT5pc0Nvbm5l
Y3RlZCgpID09IGItPmlzQ29ubmVjdGVkKCkgJiYgJmEtPnRyZWVTY29wZSgpID09ICZiLT50cmVl
U2NvcGUoKTsKKyAgICByZXR1cm4gYSAmJiBiICYmIGEtPmlzQ29ubmVjdGVkKCkgPT0gYi0+aXND
b25uZWN0ZWQoKSAmJiAmYS0+dHJlZVNjb3BlKCkgPT0gJmItPnRyZWVTY29wZSgpOwogfQogCisv
LyBGSVhNRTogUmVmYWN0b3IgdGhpcyBzbyBpdCBjYWxscyBkb2N1bWVudE9yZGVyaW5nLCBleGNl
cHQgZm9yIGFueSBleG90aWMgaW5lZmZpY2llbnQgdGhpbmdzIHRoYXQgYXJlIG5lZWRlZCBvbmx5
IGhlcmUuCiB1bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOb2Rl
JiBvdGhlck5vZGUpCiB7CiAgICAgaWYgKCZvdGhlck5vZGUgPT0gdGhpcykKQEAgLTE2NzQsNyAr
MTY3NCw3IEBAIHVuc2lnbmVkIHNob3J0IE5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKE5v
ZGUmIG90aGVyTm9kZSkKIAogICAgIC8vIElmIG9uZSBub2RlIGlzIGluIHRoZSBkb2N1bWVudCBh
bmQgdGhlIG90aGVyIGlzIG5vdCwgd2UgbXVzdCBiZSBkaXNjb25uZWN0ZWQuCiAgICAgLy8gSWYg
dGhlIG5vZGVzIGhhdmUgZGlmZmVyZW50IG93bmluZyBkb2N1bWVudHMsIHRoZXkgbXVzdCBiZSBk
aXNjb25uZWN0ZWQuCi0gICAgaWYgKCFhcmVOb2Rlc0Nvbm5lY3RlZEluU2FtZVRyZWVTY29wZShz
dGFydDEsIHN0YXJ0MikpCisgICAgaWYgKCFjb25uZWN0ZWRJblNhbWVUcmVlU2NvcGUoc3RhcnQx
LCBzdGFydDIpKQogICAgICAgICByZXR1cm4gY29tcGFyZURldGFjaGVkRWxlbWVudHNQb3NpdGlv
bigqdGhpcywgb3RoZXJOb2RlKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gZmluZCBhIGNvbW1vbiBh
bmNlc3RvciBjb250YWluZXIsIGFuZCB0aGVuIGNvbXBhcmUgdGhlIGluZGljZXMgb2YgdGhlIHR3
byBpbW1lZGlhdGUgY2hpbGRyZW4uCkBAIC0yNjIzLDMyICsyNjIzLDc0IEBAIHZvaWQqIE5vZGU6
Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKICAgICByZXR1cm4gY29uc3RfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKIH0KIAotc3RhdGljIHNpemVfdCBkZXB0aChO
b2RlJiBub2RlKQorc3RhdGljIHNpemVfdCBkZXB0aChjb25zdCBOb2RlJiBub2RlKQogewogICAg
IHNpemVfdCBkZXB0aCA9IDA7CiAgICAgYXV0byBhbmNlc3RvciA9ICZub2RlOwotICAgIHdoaWxl
ICgoYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSkKKyAgICB3aGlsZSAoKGFuY2Vz
dG9yID0gYW5jZXN0b3ItPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKSkpCiAgICAgICAgICsrZGVw
dGg7CiAgICAgcmV0dXJuIGRlcHRoOwogfQogCi1SZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZl
QW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYgYikKK3N0cnVjdCBBbmNlc3RvckFuZENoaWxkcmVuIHsK
KyAgICBjb25zdCBOb2RlKiBjb21tb25BbmNlc3RvcjsKKyAgICBjb25zdCBOb2RlKiBkaXN0aW5j
dEFuY2VzdG9yQTsKKyAgICBjb25zdCBOb2RlKiBkaXN0aW5jdEFuY2VzdG9yQjsKK307CitzdGF0
aWMgQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVu
KGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIpCiB7CiAgICAgLy8gVGhpcyBmaXJzdCBjaGVj
ayBpc24ndCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzLCBidXQgaXQgaXMgY2hlYXAgYW5kIGxpa2Vs
eSB0byBiZQogICAgIC8vIGNvbW1vbiBlbm91Z2ggdG8gYmUgd29ydGggb3B0aW1pemluZyBzbyB3
ZSBkb24ndCBoYXZlIHRvIHdhbGsgdG8gdGhlIHJvb3QuCiAgICAgaWYgKCZhID09ICZiKQotICAg
ICAgICByZXR1cm4gJmE7CisgICAgICAgIHJldHVybiB7ICZhLCBudWxscHRyLCBudWxscHRyIH07
CiAgICAgYXV0byBbZGVwdGhBLCBkZXB0aEJdID0gc3RkOjptYWtlX3R1cGxlKGRlcHRoKGEpLCBk
ZXB0aChiKSk7Ci0gICAgYXV0byBbeCwgeSwgZGlmZmVyZW5jZV0gPSBkZXB0aEEgPiBkZXB0aEIK
KyAgICBhdXRvIFt4LCB5LCBkaWZmZXJlbmNlXSA9IGRlcHRoQSA+PSBkZXB0aEIKICAgICAgICAg
PyBzdGQ6Om1ha2VfdHVwbGUoJmEsICZiLCBkZXB0aEEgLSBkZXB0aEIpCiAgICAgICAgIDogc3Rk
OjptYWtlX3R1cGxlKCZiLCAmYSwgZGVwdGhCIC0gZGVwdGhBKTsKLSAgICBmb3IgKGRlY2x0eXBl
KGRpZmZlcmVuY2UpIGkgPSAwOyBpIDwgZGlmZmVyZW5jZTsgKytpKQotICAgICAgICB4ID0geC0+
cGFyZW50Tm9kZSgpOworICAgIGRlY2x0eXBlKHgpIGRpc3RpbmN0QW5jZXN0b3JBID0gbnVsbHB0
cjsKKyAgICBmb3IgKGRlY2x0eXBlKGRpZmZlcmVuY2UpIGkgPSAwOyBpIDwgZGlmZmVyZW5jZTsg
KytpKSB7CisgICAgICAgIGRpc3RpbmN0QW5jZXN0b3JBID0geDsKKyAgICAgICAgeCA9IHgtPnBh
cmVudE9yU2hhZG93SG9zdE5vZGUoKTsKKyAgICB9CisgICAgZGVjbHR5cGUoeSkgZGlzdGluY3RB
bmNlc3RvckIgPSBudWxscHRyOwogICAgIHdoaWxlICh4ICE9IHkpIHsKLSAgICAgICAgeCA9IHgt
PnBhcmVudE5vZGUoKTsKLSAgICAgICAgeSA9IHktPnBhcmVudE5vZGUoKTsKKyAgICAgICAgZGlz
dGluY3RBbmNlc3RvckEgPSB4OworICAgICAgICBkaXN0aW5jdEFuY2VzdG9yQiA9IHk7CisgICAg
ICAgIHggPSB4LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CisgICAgICAgIHkgPSB5LT5wYXJl
bnRPclNoYWRvd0hvc3ROb2RlKCk7CisgICAgfQorICAgIGlmIChkZXB0aEEgPCBkZXB0aEIpCisg
ICAgICAgIHN0ZDo6c3dhcChkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNlc3RvckIpOwor
ICAgIHJldHVybiB7IHgsIGRpc3RpbmN0QW5jZXN0b3JBLCBkaXN0aW5jdEFuY2VzdG9yQiB9Owor
fQorCitSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYg
YikKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlKj4oY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3JBbmRDaGlsZHJlbihhLCBiKS5jb21tb25BbmNlc3Rvcik7Cit9CisKK3N0YXRpYyBib29sIGlz
U2libGluZ1N1YnNlcXVlbnQoY29uc3QgTm9kZSYgc2libGluZ0EsIGNvbnN0IE5vZGUmIHNpYmxp
bmdCKQoreworICAgIEFTU0VSVCgmc2libGluZ0EgIT0gJnNpYmxpbmdCKTsKKyAgICBmb3IgKGF1
dG8gc2libGluZyA9ICZzaWJsaW5nQTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRT
aWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmcgPT0gJnNpYmxpbmdCKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiB4OworICAgIHJldHVybiBmYWxzZTsK
K30KKworUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9kZSYgYSwgY29uc3Qg
Tm9kZSYgYikKK3sKKyAgICBpZiAoJmEgPT0gJmIpCisgICAgICAgIHJldHVybiBQYXJ0aWFsT3Jk
ZXJpbmc6OkVxdWl2YWxlbnQ7CisgICAgYXV0byByZXN1bHQgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvckFuZENoaWxkcmVuKGEsIGIpOworICAgIGlmICghcmVzdWx0LmNvbW1vbkFuY2VzdG9yKQor
ICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpVbm9yZGVyZWQ7CisgICAgaWYgKCFyZXN1
bHQuZGlzdGluY3RBbmNlc3RvckEpCisgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6Okxl
c3M7CisgICAgaWYgKCFyZXN1bHQuZGlzdGluY3RBbmNlc3RvckIpCisgICAgICAgIHJldHVybiBQ
YXJ0aWFsT3JkZXJpbmc6OkdyZWF0ZXI7CisgICAgcmV0dXJuIGlzU2libGluZ1N1YnNlcXVlbnQo
KnJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQSwgKnJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQikgPyBQ
YXJ0aWFsT3JkZXJpbmc6Okxlc3MgOiBQYXJ0aWFsT3JkZXJpbmc6OkdyZWF0ZXI7CiB9CiAKIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE5vZGUmIG5vZGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAppbmRleCA0MzFjYjM2NGRiNGNkMzA1OTQzYmIzYTMyY2ViOThiYjg3ZjRlMjU0Li4y
ZjlkMWU5NjQ5NDQ5ZjFjYThiMThkZTg5YmRlMGI5YzhkOGZlMzJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAg
LTY3MCw4ICs2NzAsMTIgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Tm9kZVJhcmVE
YXRhLCBOb2RlUmFyZURhdGFEZWxldGVyPiBtX3JhcmVEYXRhOwogfTsKIAorYm9vbCBjb25uZWN0
ZWRJblNhbWVUcmVlU2NvcGUoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqKTsKIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiwgTm9kZSYpOwog
CitlbnVtIGNsYXNzIFBhcnRpYWxPcmRlcmluZyA6IHVpbnQ4X3QgeyBMZXNzLCBFcXVpdmFsZW50
LCBHcmVhdGVyLCBVbm9yZGVyZWQgfTsKK1dFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBk
b2N1bWVudE9yZGVyKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CisKICNpZiBBU1NFUlRfRU5B
QkxFRAogCiBpbmxpbmUgdm9pZCBhZG9wdGVkKE5vZGUqIG5vZGUpCkBAIC03ODUsOCArNzg5LDYg
QEAgaW5saW5lIHZvaWQgTm9kZTo6c2V0VHJlZVNjb3BlUmVjdXJzaXZlbHkoVHJlZVNjb3BlJiBu
ZXdUcmVlU2NvcGUpCiAgICAgICAgIG1vdmVUcmVlVG9OZXdTY29wZSgqdGhpcywgKm1fdHJlZVNj
b3BlLCBuZXdUcmVlU2NvcGUpOwogfQogCi1ib29sIGFyZU5vZGVzQ29ubmVjdGVkSW5TYW1lVHJl
ZVNjb3BlKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKik7Ci0KIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBOb2RlJik7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDRiMjY0OTkwZjhjMjFjYmQ5M2Zm
ZmMxODE3N2NlMTNhZjU0MGEyNjEuLjFiMWM4OGE2MWE4MDdiYjkxZTIzZjE4NzA2ODkzMWM3YjE1
ZjZjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIGludCBQ
b3NpdGlvbjo6Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpIGNvbnN0CiAgICAgY2FzZSBQ
b3NpdGlvbklzQWZ0ZXJDaGlsZHJlbjoKICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+bGVu
Z3RoKCk7CiAgICAgY2FzZSBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6Ci0gICAgICAgIHJldHVy
biBtaW5PZmZzZXRGb3JOb2RlKG1fYW5jaG9yTm9kZS5nZXQoKSwgbV9vZmZzZXQpOworICAgICAg
ICByZXR1cm4gbV9vZmZzZXQ7CiAgICAgY2FzZSBQb3NpdGlvbklzQmVmb3JlQW5jaG9yOgogICAg
ICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5jb21wdXRlTm9kZUluZGV4KCk7CiAgICAgY2FzZSBQ
b3NpdGlvbklzQWZ0ZXJBbmNob3I6CkBAIC0zNTUsMTEgKzM1NSwxMSBAQCBQb3NpdGlvbiBQb3Np
dGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICAgICAg
Ly8gICAgICBHb2luZyBmcm9tIDEgdG8gMCBpcyBjb3JyZWN0LgogICAgICAgICBzd2l0Y2ggKG1v
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgQ29kZVBvaW50OgotICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBvZmZzZXQgLSAxKTsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKG5vZGUsIG9mZnNldCAtIDEpOwog
ICAgICAgICBjYXNlIENoYXJhY3RlcjoKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24obm9kZSwgdW5jaGVja2VkUHJldmlvdXNPZmZzZXQobm9kZSwgb2Zmc2V0
KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihub2Rl
LCB1bmNoZWNrZWRQcmV2aW91c09mZnNldChub2RlLCBvZmZzZXQpKTsKICAgICAgICAgY2FzZSBC
YWNrd2FyZERlbGV0aW9uOgotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihub2RlLCB1bmNoZWNrZWRQcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24o
bm9kZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZURlcHJlY2F0ZWRMZWdhY3lQ
b3NpdGlvbihub2RlLCB1bmNoZWNrZWRQcmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24o
bm9kZSwgb2Zmc2V0KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3NCw3ICszNzQsNyBAQCBQ
b3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29u
c3QKICAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJ
c0NhbmRpZGF0ZSgqcHJldmlvdXNTaWJsaW5nKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0
ZXJOb2RlKHByZXZpb3VzU2libGluZyk7CiAKLSAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHBhcmVudCwgbm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpKTsKKyAgICByZXR1cm4g
bWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSk7CiB9CiAKIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUgbW92
ZVR5cGUpIGNvbnN0CkBAIC00MDgsNyArNDA4LDcgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHQo
UG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICAgICAgLy8gICAgICBHb2luZyBm
b3J3YXJkIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGlzIGNvcnJlY3QuCiAgICAgICAgIC8vICAg
MikgVGhlIG5ldyBvZmZzZXQgaXMgYSBib2d1cyBvZmZzZXQgbGlrZSAoPGJyPiwgMSksIGFuZCB0
aGVyZSBpcyBubyBjaGlsZC4KICAgICAgICAgLy8gICAgICBHb2luZyBmcm9tIDAgdG8gMSBpcyBj
b3JyZWN0LgotICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUs
IChtb3ZlVHlwZSA9PSBDaGFyYWN0ZXIpID8gdW5jaGVja2VkTmV4dE9mZnNldChub2RlLCBvZmZz
ZXQpIDogb2Zmc2V0ICsgMSk7CisgICAgICAgIHJldHVybiBtYWtlRGVwcmVjYXRlZExlZ2FjeVBv
c2l0aW9uKG5vZGUsIChtb3ZlVHlwZSA9PSBDaGFyYWN0ZXIpID8gdW5jaGVja2VkTmV4dE9mZnNl
dChub2RlLCBvZmZzZXQpIDogb2Zmc2V0ICsgMSk7CiAgICAgfQogCiAgICAgQ29udGFpbmVyTm9k
ZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtNDIyLDcgKzQyMiw3IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0CiAgICAg
aWYgKG5leHRTaWJsaW5nICYmIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZSgq
bmV4dFNpYmxpbmcpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKG5leHRTaWJs
aW5nKTsKIAotICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFyZW50LCBu
b2RlLT5jb21wdXRlTm9kZUluZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gbWFrZURlcHJlY2F0ZWRM
ZWdhY3lQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEpOwogfQog
CiBpbnQgUG9zaXRpb246OnVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0KGNvbnN0IE5vZGUqIG4sIHVu
c2lnbmVkIGN1cnJlbnQpCkBAIC02NzQsNyArNjc0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVw
c3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogICAgIC8vIGl0
ZXJhdGUgYmFja3dhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3IgYSBxdWFsaWZpZWQgcG9zaXRp
b24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3VhbEJvdW5kYXJ5KHN0YXJ0Tm9k
ZSk7CiAgICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3Jl
IGFuZCBBZnRlciBwb3NpdGlvbnMuCi0gICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9
IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24obV9hbmNob3JOb2RlLmdldCgpLCBjYXJldE1heE9mZnNldCgqbV9hbmNob3JO
b2RlKSkgOiAqdGhpczsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNo
b3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IG1ha2VEZXByZWNhdGVkTGVnYWN5UG9z
aXRpb24obV9hbmNob3JOb2RlLmdldCgpLCBjYXJldE1heE9mZnNldCgqbV9hbmNob3JOb2RlKSkg
OiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3NpdGlvbiA9IGxhc3RWaXNp
YmxlOwogICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aGFzRWRpdGFibGVTdHls
ZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnROb2RlOwpAQCAtNzQwLDcgKzc0MCw3IEBA
IFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
cnVsZSkgY29uc3QKICAgICAgICAgICAgICAgICAvLyByZW5kZXIgdHJlZSB3aGljaCBjYW4gaGF2
ZSBhIGRpZmZlcmVudCBsZW5ndGggZHVlIHRvIGNhc2UgdHJhbnNmb3JtYXRpb24uCiAgICAgICAg
ICAgICAgICAgLy8gVW50aWwgd2UgcmVzb2x2ZSB0aGF0LCBkaXNhYmxlIHRoaXMgc28gd2UgY2Fu
IHJ1biB0aGUgbGF5b3V0IHRlc3RzIQogICAgICAgICAgICAgICAgIC8vQVNTRVJUKGN1cnJlbnRP
ZmZzZXQgPj0gcmVuZGVyZXItPmNhcmV0TWF4T2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJmN1cnJlbnROb2RlLCByZW5kZXJlci0+
Y2FyZXRNYXhPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VEZXByZWNhdGVk
TGVnYWN5UG9zaXRpb24oJmN1cnJlbnROb2RlLCByZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQoKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJy
ZW50UG9zaXRpb24ub2Zmc2V0SW5MZWFmTm9kZSgpOwpAQCAtNzc2LDcgKzc3Niw3IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxl
KSBjb25zdAogICAgIC8vIGl0ZXJhdGUgZm9yd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBh
IHF1YWxpZmllZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0gZW5jbG9zaW5nVmlzdWFs
Qm91bmRhcnkoc3RhcnROb2RlKTsKICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91
bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KLSAgICBQb3NpdGlvbkl0ZXJh
dG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCksIGNhcmV0TWF4
T2Zmc2V0KCptX2FuY2hvck5vZGUpKSA6ICp0aGlzOworICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFz
dFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gbWFrZURl
cHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCksIGNhcmV0TWF4T2Zmc2V0
KCptX2FuY2hvck5vZGUpKSA6ICp0aGlzOwogICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBv
c2l0aW9uID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2Rl
LT5oYXNFZGl0YWJsZVN0eWxlKCk7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBzdGFydE5vZGU7CkBA
IC04NDMsNyArODQzLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0Jv
dW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAKICAgICAgICAgICAgIGlmICgmY3VycmVu
dE5vZGUgIT0gc3RhcnROb2RlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQb3Np
dGlvbi5hdFN0YXJ0T2ZOb2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oJmN1cnJlbnROb2RlLCB0ZXh0UmVuZGVyZXIuY2FyZXRNaW5PZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRp
b24oJmN1cnJlbnROb2RlLCB0ZXh0UmVuZGVyZXIuY2FyZXRNaW5PZmZzZXQoKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zaXRp
b24ub2Zmc2V0SW5MZWFmTm9kZSgpOwpAQCAtMTU2MCwxNSArMTU2MCwxMiBAQCBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KQogICAgIHJldHVybiBzdHJlYW07CiB9CiAKLVJlZlB0cjxOb2RlPiBjb21tb25TaGFkb3dJbmNs
dWRpbmdBbmNlc3Rvcihjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCitSZWZQ
dHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0
IFBvc2l0aW9uJiBiKQogewotICAgIGF1dG8qIGNvbW1vblNjb3BlID0gY29tbW9uVHJlZVNjb3Bl
KGEuY29udGFpbmVyTm9kZSgpLCBiLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgaWYgKCFjb21tb25T
Y29wZSkKKyAgICBhdXRvIG5vZGVBID0gYS5jb250YWluZXJOb2RlKCk7CisgICAgYXV0byBub2Rl
QiA9IGIuY29udGFpbmVyTm9kZSgpOworICAgIGlmICghbm9kZUEgfHwgIW5vZGVCKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvKiBub2RlQSA9IGNvbW1vblNjb3BlLT5hbmNlc3Rv
ck5vZGVJblRoaXNTY29wZShhLmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgQVNTRVJUKG5vZGVBKTsK
LSAgICBhdXRvKiBub2RlQiA9IGNvbW1vblNjb3BlLT5hbmNlc3Rvck5vZGVJblRoaXNTY29wZShi
LmNvbnRhaW5lck5vZGUoKSk7Ci0gICAgQVNTRVJUKG5vZGVCKTsKICAgICByZXR1cm4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoKm5vZGVBLCAqbm9kZUIpOwogfQogCkBAIC0xNTk0LDEwICsxNTkx
LDE0IEBAIFBvc2l0aW9uIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoTm9kZSogbm9kZSkKICAg
ICByZXR1cm4gUG9zaXRpb24oYW5jZXN0b3IsIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDEs
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogfQogCi0vLyBGSVhNRTogUmVu
YW1lIHRvIHVzZSBtYWtlIGZvciB0aGUgcHJlZml4IHZlcmIgaW5zdGVhZCBvZiBjcmVhdGUuCi1Q
b3NpdGlvbiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3QgQm91bmRhcnlQb2ludCYg
cG9pbnQpCitQb3NpdGlvbiBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24oY29uc3QgQm91bmRh
cnlQb2ludCYgcG9pbnQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihwb2ludC5jb250YWluZXIucHRyKCksIHBvaW50Lm9mZnNldCk7CisgICAgcmV0dXJuIG1ha2VD
b250YWluZXJPZmZzZXRQb3NpdGlvbihwb2ludC5jb250YWluZXIucHRyKCksIHBvaW50Lm9mZnNl
dCk7Cit9CisKK1Bvc2l0aW9uIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oY29uc3QgQm91
bmRhcnlQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9z
aXRpb24ocG9pbnQuY29udGFpbmVyLnB0cigpLCBwb2ludC5vZmZzZXQpOwogfQogCiBPcHRpb25h
bDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludChjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pCkBAIC0xNjA3LDYgKzE2MDgsMjkgQEAgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJv
dW5kYXJ5UG9pbnQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIHJldHVybiBCb3VuZGFy
eVBvaW50IHsgKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgfTsKIH0KIAorUGFydGlh
bE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0IFBvc2l0aW9u
JiBiKQoreworICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBhLmlzTnVsbCgpICYmIGIuaXNOdWxsKCkgPyBQYXJ0aWFsT3JkZXJpbmc6OkVxdWl2YWxlbnQg
OiBQYXJ0aWFsT3JkZXJpbmc6OlVub3JkZXJlZDsKKworICAgIGF1dG8gYUNvbnRhaW5lciA9IGEu
Y29udGFpbmVyTm9kZSgpOworICAgIGF1dG8gYkNvbnRhaW5lciA9IGIuY29udGFpbmVyTm9kZSgp
OworCisgICAgaWYgKCFhQ29udGFpbmVyIHx8ICFiQ29udGFpbmVyKSB7CisgICAgICAgIGlmICgh
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmEuYW5jaG9yTm9kZSgpLCAqYi5hbmNob3JOb2RlKCkp
KQorICAgICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6VW5vcmRlcmVkOworICAgICAg
ICBpZiAoIWFDb250YWluZXIgJiYgIWJDb250YWluZXIgJiYgYS5hbmNob3JUeXBlKCkgPT0gYi5h
bmNob3JUeXBlKCkpCisgICAgICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpFcXVpdmFs
ZW50OworICAgICAgICBpZiAoYkNvbnRhaW5lcikKKyAgICAgICAgICAgIHJldHVybiBhLmFuY2hv
clR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciA/IFBhcnRpYWxPcmRl
cmluZzo6TGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6R3JlYXRlcjsKKyAgICAgICAgcmV0dXJuIGIu
YW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yID8gUGFydGlh
bE9yZGVyaW5nOjpHcmVhdGVyIDogUGFydGlhbE9yZGVyaW5nOjpMZXNzOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBBdm9pZCBjb21wdXRpbmcgbm9kZSBvZmZzZXQgZm9yIGNhc2VzIHdoZXJlIHdl
IGRvbid0IG5lZWQgdG8uCisKKyAgICByZXR1cm4gZG9jdW1lbnRPcmRlcigqbWFrZUJvdW5kYXJ5
UG9pbnQoYSksICptYWtlQm91bmRhcnlQb2ludChiKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKaW5k
ZXggYmI5OTMwOGRmY2Y0NTZhNjk4ODM0ZDU3Y2UxNzMzMDFmYzM3OTMzNi4uNzg1MzdmOWExMjBi
NmQyODVmMTFhZWZkMzAzMjkzNzhkYWRmYWM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKQEAgLTIw
MSw3ICsyMDEsNyBAQCBwcml2YXRlOgogICAgIC8vIEZvciBjcmVhdGluZyBsZWdhY3kgZWRpdGlu
ZyBwb3NpdGlvbnM6IChBbmNob3IgdHlwZSB3aWxsIGJlIGRldGVybWluZWQgZnJvbSBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQobm9kZSkpCiAgICAgZW51bSBjbGFzcyBMZWdhY3lFZGl0aW5nUG9zaXRp
b25GbGFnIHsgT24gfTsKICAgICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbihOb2RlKiBhbmNob3JO
b2RlLCB1bnNpZ25lZCBvZmZzZXQsIExlZ2FjeUVkaXRpbmdQb3NpdGlvbkZsYWcpOwotICAgIGZy
aWVuZCBQb3NpdGlvbiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oTm9kZSosIHVuc2lnbmVk
IG9mZnNldCk7CisgICAgZnJpZW5kIFBvc2l0aW9uIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRp
b24oTm9kZSosIHVuc2lnbmVkIG9mZnNldCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgb2Zm
c2V0Rm9yUG9zaXRpb25BZnRlckFuY2hvcigpIGNvbnN0OwogICAgIApAQCAtMjIxLDE0ICsyMjEs
MTggQEAgcHJpdmF0ZToKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvc2l0aW9uJiwgY29uc3Qg
UG9zaXRpb24mKTsKIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0
aW9uJik7CisKK1dFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBv
c2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFBvc2l0aW9u
JiwgY29uc3QgUG9zaXRpb24mKTsKIGJvb2wgb3BlcmF0b3I+PShjb25zdCBQb3NpdGlvbiYsIGNv
bnN0IFBvc2l0aW9uJik7CiBib29sIG9wZXJhdG9yPD0oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQ
b3NpdGlvbiYpOwogCi0vLyBGSVhNRTogQ29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0byAibWFrZSIg
aW5zdGVhZCBvZiAiY3JlYXRlIiBzaW5jZSB3ZSBub3JtYWxseSB1c2UgImNyZWF0ZSIgZm9yIGZ1
bmN0aW9ucyB0aGF0IGFsbG9jYXRlIGhlYXAgb2JqZWN0cy4KLVBvc2l0aW9uIGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihOb2RlKiwgdW5zaWduZWQgb2Zmc2V0KTsKLVdFQkNPUkVfRVhQT1JU
IFBvc2l0aW9uIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb25zdCBCb3VuZGFyeVBvaW50
Jik7CitQb3NpdGlvbiBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24oTm9kZSosIHVuc2lnbmVk
IG9mZnNldCk7CitXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbiBtYWtlQ29udGFpbmVyT2Zmc2V0UG9z
aXRpb24oY29uc3QgQm91bmRhcnlQb2ludCYpOworCitQb3NpdGlvbiBtYWtlRGVwcmVjYXRlZExl
Z2FjeVBvc2l0aW9uKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQpOworV0VCQ09SRV9FWFBPUlQgUG9z
aXRpb24gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihjb25zdCBCb3VuZGFyeVBvaW50Jik7
CiAKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBv
aW50KGNvbnN0IFBvc2l0aW9uJik7CiAKQEAgLTI0MywxMCArMjQ3LDkgQEAgUG9zaXRpb24gcG9z
aXRpb25BZnRlck5vZGUoTm9kZSogYW5jaG9yTm9kZSk7CiBQb3NpdGlvbiBmaXJzdFBvc2l0aW9u
SW5Ob2RlKE5vZGUqIGFuY2hvck5vZGUpOwogUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5Ob2RlKE5v
ZGUqIGFuY2hvck5vZGUpOwogCi1pbnQgbWluT2Zmc2V0Rm9yTm9kZShOb2RlKiBhbmNob3JOb2Rl
LCB1bnNpZ25lZCBvZmZzZXQpOwogYm9vbCBvZmZzZXRJc0JlZm9yZUxhc3ROb2RlT2Zmc2V0KHVu
c2lnbmVkIG9mZnNldCwgTm9kZSogYW5jaG9yTm9kZSk7CiAKLVJlZlB0cjxOb2RlPiBjb21tb25T
aGFkb3dJbmNsdWRpbmdBbmNlc3Rvcihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7
CitSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgUG9zaXRpb24mLCBj
b25zdCBQb3NpdGlvbiYpOwogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgY29uc3QgUG9zaXRpb24mKTsKIApAQCAtMjU5LDE1ICsyNjIsMjEgQEAgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBQb3NpdGlvblJhbmdlJik7CiAK
IC8vIGlubGluZXMKIAotaW5saW5lIFBvc2l0aW9uIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihOb2RlKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCitpbmxpbmUgUG9zaXRpb24gbWFrZUNvbnRh
aW5lck9mZnNldFBvc2l0aW9uKE5vZGUqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBy
ZXR1cm4geyBub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ig
fTsKK30KKworaW5saW5lIFBvc2l0aW9uIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oTm9k
ZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewogICAgIHJldHVybiB7IG5vZGUsIG9mZnNldCwg
UG9zaXRpb246OkxlZ2FjeUVkaXRpbmdQb3NpdGlvbkZsYWc6Ok9uIH07CiB9CiAKKy8vIEZJWE1F
OiBQb3NpdGlvbnMgYXQgdGhlIHNhbWUgZG9jdW1lbnQgbG9jYXRpb24gd2l0aCBkaWZmZXJlbnQg
YW5jaG9yaW5nIHdpbGwgcmV0dXJuIGZhbHNlOyB0aGF0J3MgdW5saWtlIDw9IGFuZCA+PS4KKy8v
IEZJWE1FOiBUaGlzIGlnbm9yZXMgZGlmZmVyZW5jZXMgaW4gbV9pc0xlZ2FjeUVkaXRpbmdQb3Np
dGlvbiBpbiBhIHN1YnRsZSB3YXkuCisvLyBGSVhNRTogRm9yIGxlZ2FjeSBlZGl0aW5nIHBvc2l0
aW9ucywgPGRpdj48aW1nPjwvZGl2PiBbZGl2LCAwXSAhPSBbaW1nLCAwXSBldmVuIHRob3VnaCBt
b3N0IG9mIGVkaXRpbmcgY29kZSB3aWxsIHRyZWF0IHRoZW0gYXMgaWRlbnRpY2FsLgogaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7
Ci0gICAgLy8gRklYTUU6IEluIDxkaXY+PGltZz48L2Rpdj4gW2RpdiwgMF0gIT0gW2ltZywgMF0g
ZXZlbiB0aG91Z2ggbW9zdCBvZiB0aGUKLSAgICAvLyBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCB0
aGVtIGFzIGlkZW50aWNhbC4KICAgICByZXR1cm4gYS5hbmNob3JOb2RlKCkgPT0gYi5hbmNob3JO
b2RlKCkgJiYgYS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID09IGIuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSAmJiBhLmFuY2hvclR5cGUoKSA9PSBiLmFuY2hvclR5cGUoKTsKIH0KIApAQCAt
MzI4LDE3ICszMzcsNiBAQCBpbmxpbmUgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5Ob2RlKE5vZGUq
IGFuY2hvck5vZGUpCiAgICAgcmV0dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQWZ0ZXJDaGlsZHJlbik7CiB9CiAKLWlubGluZSBpbnQgbWluT2Zmc2V0Rm9yTm9k
ZShOb2RlKiBhbmNob3JOb2RlLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgaWYgKGlzPENoYXJh
Y3RlckRhdGE+KCphbmNob3JOb2RlKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluKG9mZnNldCwg
ZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKmFuY2hvck5vZGUpLmxlbmd0aCgpKTsKLQotICAgIHVu
c2lnbmVkIG5ld09mZnNldCA9IDA7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gYW5jaG9yTm9kZS0+
Zmlyc3RDaGlsZCgpOyBub2RlICYmIG5ld09mZnNldCA8IG9mZnNldDsgbm9kZSA9IG5vZGUtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIG5ld09mZnNldCsrOwotICAgIHJldHVybiBuZXdPZmZzZXQ7
Ci19Ci0KIGlubGluZSBib29sIG9mZnNldElzQmVmb3JlTGFzdE5vZGVPZmZzZXQodW5zaWduZWQg
b2Zmc2V0LCBOb2RlKiBhbmNob3JOb2RlKQogewogICAgIGlmIChpczxDaGFyYWN0ZXJEYXRhPigq
YW5jaG9yTm9kZSkpCkBAIC0zNTAsNiArMzQ4LDE4IEBAIGlubGluZSBib29sIG9mZnNldElzQmVm
b3JlTGFzdE5vZGVPZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBhbmNob3JOb2RlKQogICAg
IHJldHVybiBvZmZzZXQgPCBjdXJyZW50T2Zmc2V0OwogfQogCisvLyBGSVhNRTogRGVsZXRlIHRo
aXMgYWZ0ZXIgY2hhbmdpbmcgYWxsIGNhbGxlcnMgdG8gdXNlIHRoZSBtYWtlRGVwcmVjYXRlZExl
Z2FjeVBvc2l0aW9uIG5hbWUuCitpbmxpbmUgUG9zaXRpb24gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKE5vZGUqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICByZXR1cm4gbWFrZURl
cHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihub2RlLCBvZmZzZXQpOworfQorCisvLyBGSVhNRTogRGVs
ZXRlIHRoaXMgYWZ0ZXIgY2hhbmdpbmcgYWxsIGNhbGxlcnMgdG8gdXNlIHRoZSBtYWtlRGVwcmVj
YXRlZExlZ2FjeVBvc2l0aW9uIG5hbWUuCitpbmxpbmUgUG9zaXRpb24gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiBt
YWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKHBvaW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHAKaW5kZXggY2ZiNTVmMzk4ODhjMTFjMmY4M2RjOTkxM2IwNWQw
Y2IxMDYxZDUwZS4uMDFhYTc3NjY5Y2MyMDNhYTY0NTgxYTRlYWEwMmJmODgzNjIzOWRmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC02MCwxMCArNjAsMjMg
QEAgaW5saW5lIGJvb2wgUmFkaW9CdXR0b25Hcm91cDo6aXNWYWxpZCgpIGNvbnN0CiBWZWN0b3I8
UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PiBSYWRpb0J1dHRvbkdyb3VwOjptZW1iZXJzKCkgY29uc3QK
IHsKICAgICBWZWN0b3I8UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PiBzb3J0ZWRNZW1iZXJzOwotICAg
IGZvciAoYXV0byYgbWVtZWJlciA6IG1fbWVtYmVycykKLSAgICAgICAgc29ydGVkTWVtYmVycy5h
cHBlbmQobWVtZWJlcik7CisgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBtX21lbWJlcnMpCisgICAg
ICAgIHNvcnRlZE1lbWJlcnMuYXBwZW5kKG1lbWJlcik7CiAgICAgc3RkOjpzb3J0KHNvcnRlZE1l
bWJlcnMuYmVnaW4oKSwgc29ydGVkTWVtYmVycy5lbmQoKSwgW10oYXV0byYgYSwgYXV0byYgYikg
ewotICAgICAgICByZXR1cm4gZG9jdW1lbnRPcmRlckNvbXBhcmF0b3IoYS5wdHIoKSwgYi5wdHIo
KSk7CisgICAgICAgIHN3aXRjaCAoZG9jdW1lbnRPcmRlcihhLCBiKSkgeworICAgICAgICBjYXNl
IFBhcnRpYWxPcmRlcmluZzo6TGVzczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIFBhcnRpYWxPcmRlcmluZzo6R3JlYXRlcjoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY2FzZSBQYXJ0aWFsT3JkZXJpbmc6OkVxdWl2YWxlbnQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBQYXJ0aWFsT3JkZXJpbmc6OlVub3JkZXJlZDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7
CiAgICAgcmV0dXJuIHNvcnRlZE1lbWJlcnM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA3MDA4
MWJlMjBjYjFiNzNiNmI0YTc5NGZhYjlhN2ExZTljYjJjZTQ1Li4zMDc1NzdjZDZjYzM0MWIyMjdm
YjRjOGFkNjUzZjUyYjJjNmU4N2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTExODgsNyArMTE4
OCw3IEBAIGJvb2wgYXJlUmFuZ2VzRXF1YWwoY29uc3QgUmFuZ2UqIGEsIGNvbnN0IFJhbmdlKiBi
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoIWEgfHwgIWIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gYS0+c3RhcnRQb3NpdGlvbigpID09IGItPnN0YXJ0UG9zaXRp
b24oKSAmJiBhLT5lbmRQb3NpdGlvbigpID09IGItPmVuZFBvc2l0aW9uKCk7CisgICAgcmV0dXJu
ICZhLT5zdGFydENvbnRhaW5lcigpID09ICZiLT5zdGFydENvbnRhaW5lcigpICYmIGEtPnN0YXJ0
T2Zmc2V0KCkgPT0gYi0+c3RhcnRPZmZzZXQoKSAmJiAmYS0+ZW5kQ29udGFpbmVyKCkgPT0gJmIt
PmVuZENvbnRhaW5lcigpICYmIGEtPmVuZE9mZnNldCgpID09IGItPmVuZE9mZnNldCgpOwogfQog
CiBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqIGEsIGNvbnN0IFJhbmdlKiBiKQpAQCAt
MTE5OSw3ICsxMTk5LDcgQEAgYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0IFJhbmdlKiBhLCBjb25z
dCBSYW5nZSogYikKICAgICBpZiAoYSA9PSBiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghYXJlTm9kZXNDb25uZWN0ZWRJblNhbWVUcmVlU2NvcGUoYS0+Y29tbW9uQW5jZXN0b3JD
b250YWluZXIoKSwgYi0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSkpCisgICAgaWYgKCFjb25u
ZWN0ZWRJblNhbWVUcmVlU2NvcGUoYS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSwgYi0+Y29t
bW9uQW5jZXN0b3JDb250YWluZXIoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHNo
b3J0IHN0YXJ0VG9TdGFydCA9IGEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fU1RBUlQsICpiKS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKQEAgLTEzODcsOCArMTM4Nyw4IEBA
IHZvaWQgUmFuZ2U6OnRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSkKIAogRXhjZXB0aW9uT3I8
dm9pZD4gUmFuZ2U6OmV4cGFuZChjb25zdCBTdHJpbmcmIHVuaXQpCiB7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0IHsgc3RhcnRQb3NpdGlvbigpIH07Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVu
ZCB7IGVuZFBvc2l0aW9uKCkgfTsKKyAgICBhdXRvIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uIHsg
bWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbigmc3RhcnRDb250YWluZXIoKSwgc3RhcnRPZmZz
ZXQoKSkgfTsKKyAgICBhdXRvIGVuZCA9IFZpc2libGVQb3NpdGlvbiB7IG1ha2VEZXByZWNhdGVk
TGVnYWN5UG9zaXRpb24oJmVuZENvbnRhaW5lcigpLCBlbmRPZmZzZXQoKSkgfTsKICAgICBpZiAo
dW5pdCA9PSAid29yZCIpIHsKICAgICAgICAgc3RhcnQgPSBzdGFydE9mV29yZChzdGFydCk7CiAg
ICAgICAgIGVuZCA9IGVuZE9mV29yZChlbmQpOwpAQCAtMTU0NCwxNiArMTU0NCw2IEBAIFJlZlB0
cjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFu
Z2UpCiAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpOwogfQogCi1XVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgUmFuZ2VCb3VuZGFy
eVBvaW50JiByKQotewotICAgIHJldHVybiB0cyA8PCByLnRvUG9zaXRpb24oKTsKLX0KLSAgICAK
LVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBS
YW5nZSYgcikKLXsKLSAgICByZXR1cm4gdHMgPDwgIlJhbmdlOiAiIDw8ICJzdGFydDogIiA8PCBy
LnN0YXJ0UG9zaXRpb24oKSA8PCAiIGVuZDogIiA8PCByLmVuZFBvc2l0aW9uKCk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmgKaW5kZXggZmFiOGY4MmJhZmY4YjM1OWM4MjAxYjYyMWMwMWZmOTYwOTIyMzEyNC4uMTNl
YjI1ZWEzNjY3ZmE3YjljYjFlNGY3ZDYwNmNlZTMzNGJhYTA1NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAg
LTkzLDkgKzkzLDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZv
aWQ+IHN1cnJvdW5kQ29udGVudHMoTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPHZvaWQ+IHNldFN0YXJ0QmVmb3JlKE5vZGUmKTsKIAotICAgIFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRpb24oKTsgfQotICAgIFBvc2l0
aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9Ci0K
ICAgICBXRUJDT1JFX0VYUE9SVCBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKIAogICAgIGVudW0g
Y2xhc3MgQm91bmRpbmdSZWN0QmVoYXZpb3IgOiB1aW50OF90IHsKQEAgLTE3MSwxNiArMTY4LDYg
QEAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShj
b25zdCBSZWZQdHI8UmFuZ2U+Jik7CiBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IGNyZWF0ZUxp
dmVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdl
PiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAKLWJvb2wg
ZG9jdW1lbnRPcmRlckNvbXBhcmF0b3IoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqKTsKLQotV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFJhbmdlQm91
bmRhcnlQb2ludCYpOwotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIGNvbnN0IFJhbmdlJik7Ci0KLWlubGluZSBib29sIGRvY3VtZW50T3JkZXJDb21wYXJhdG9y
KGNvbnN0IE5vZGUqIGEsIGNvbnN0IE5vZGUqIGIpCi17Ci0gICAgcmV0dXJuIFJhbmdlOjpjb21w
YXJlQm91bmRhcnlQb2ludHMoY29uc3RfY2FzdDxOb2RlKj4oYSksIDAsIGNvbnN0X2Nhc3Q8Tm9k
ZSo+KGIpLCAwKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDA7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZUJvdW5kYXJ5UG9pbnQuaAppbmRleCAxOWZhODQ0MmM0ODI3NTM5NGExMDA3YmQxNGY2YzY3
ODdmOGM1ZGRmLi5iMjQ0MDk4NDc4Yjc3NzdmMDRjZGY2OGQ2MTkyOWJkYzg4NDU1MTRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCkBAIC0yNSw4ICsyNSw4IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBvc2l0aW9uLmgi
CisjaW5jbHVkZSAiQm91bmRhcnlQb2ludC5oIgorI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCw4ICszNCw2IEBAIGNsYXNzIFJhbmdlQm91
bmRhcnlQb2ludCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmFuZ2VCb3VuZGFyeVBvaW50KE5v
ZGUqIGNvbnRhaW5lcik7CiAKLSAgICBQb3NpdGlvbiB0b1Bvc2l0aW9uKCkgY29uc3Q7Ci0KICAg
ICBOb2RlKiBjb250YWluZXIoKSBjb25zdDsKICAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdDsK
ICAgICBOb2RlKiBjaGlsZEJlZm9yZSgpIGNvbnN0OwpAQCAtNjAsNiArNTgsOCBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxOb2RlPiBtX2NoaWxkQmVmb3JlQm91bmRhcnk7CiB9OwogCitCb3VuZGFy
eVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYpOworCiBp
bmxpbmUgUmFuZ2VCb3VuZGFyeVBvaW50OjpSYW5nZUJvdW5kYXJ5UG9pbnQoTm9kZSogY29udGFp
bmVyKQogICAgIDogbV9jb250YWluZXJOb2RlKGNvbnRhaW5lcikKIHsKQEAgLTg1LDEyICs4NSw2
IEBAIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6ZW5zdXJlT2Zmc2V0SXNWYWxpZCgp
IGNvbnN0CiAgICAgbV9vZmZzZXRJbkNvbnRhaW5lciA9IG1fY2hpbGRCZWZvcmVCb3VuZGFyeS0+
Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKIH0KIAotaW5saW5lIFBvc2l0aW9uIFJhbmdlQm91bmRh
cnlQb2ludDo6dG9Qb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgZW5zdXJlT2Zmc2V0SXNWYWxpZCgp
OwotICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9jb250YWluZXJOb2Rl
LmdldCgpLCBtX29mZnNldEluQ29udGFpbmVyLnZhbHVlKCkpOwotfQotCiBpbmxpbmUgdW5zaWdu
ZWQgUmFuZ2VCb3VuZGFyeVBvaW50OjpvZmZzZXQoKSBjb25zdAogewogICAgIGVuc3VyZU9mZnNl
dElzVmFsaWQoKTsKQEAgLTE4NSw0ICsxNzksOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYSwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBiKQog
ICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQ
b2ludChjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiB7ICpw
b2ludC5jb250YWluZXIoKSwgcG9pbnQub2Zmc2V0KCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggNTMwYzcwNTJlMDM4MGNl
ZDA0NjMwNjA5NmYxZjk4ZGZmZTczZDhlZi4uYzk3MTUyOTU0MTYxOGEzMTNhNDc0ZTZmYzE1MTY3
OGQwMjk2ZWM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC02Niw2ICs2Niw0
NSBAQCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZShO
b2RlJiBub2RlKQogICAgIHJldHVybiBCb3VuZGFyeVBvaW50IHsgKnBhcmVudCwgbm9kZS5jb21w
dXRlTm9kZUluZGV4KCkgKyAxIH07CiB9CiAKKy8vIEZJWE1FOiBDcmVhdGUgQm91bmRhcnlQb2lu
dC5jcHAgYW5kIG1vdmUgdGhpcyB0aGVyZS4KK3N0YXRpYyBib29sIGlzT2Zmc2V0QmVmb3JlQ2hp
bGQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQsIE5vZGUmIGNoaWxk
KQoreworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB1bnNpZ25l
ZCBjdXJyZW50T2Zmc2V0ID0gMDsKKyAgICBmb3IgKGF1dG8gY3VycmVudENoaWxkID0gY29udGFp
bmVyLmZpcnN0Q2hpbGQoKTsgY3VycmVudENoaWxkICYmIGN1cnJlbnRDaGlsZCAhPSAmY2hpbGQ7
IGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBp
ZiAob2Zmc2V0IDw9ICsrY3VycmVudE9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZJWE1FOiBDcmVhdGUgQm91bmRhcnlQ
b2ludC5jcHAgYW5kIG1vdmUgdGhpcyB0aGVyZS4KK1BhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9y
ZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGIpCit7Cisg
ICAgaWYgKGEub2Zmc2V0ID09IGIub2Zmc2V0KQorICAgICAgICByZXR1cm4gZG9jdW1lbnRPcmRl
cihhLmNvbnRhaW5lciwgYi5jb250YWluZXIpOworCisgICAgaWYgKGEuY29udGFpbmVyLnB0cigp
ID09IGIuY29udGFpbmVyLnB0cigpKQorICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNl
dCA/IFBhcnRpYWxPcmRlcmluZzo6TGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6R3JlYXRlcjsKKwor
ICAgIGZvciAoYXV0byBhbmNlc3RvciA9IGIuY29udGFpbmVyLnB0cigpOyBhbmNlc3RvcjsgKSB7
CisgICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE9yU2hhZG93SG9z
dE5vZGUoKTsKKyAgICAgICAgaWYgKG5leHRBbmNlc3RvciA9PSBhLmNvbnRhaW5lci5wdHIoKSkK
KyAgICAgICAgICAgIHJldHVybiBpc09mZnNldEJlZm9yZUNoaWxkKCpuZXh0QW5jZXN0b3IsIGEu
b2Zmc2V0LCAqYW5jZXN0b3IpID8gUGFydGlhbE9yZGVyaW5nOjpMZXNzIDogUGFydGlhbE9yZGVy
aW5nOjpHcmVhdGVyOworICAgICAgICBhbmNlc3RvciA9IG5leHRBbmNlc3RvcjsKKyAgICB9CisK
KyAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBhLmNvbnRhaW5lci5wdHIoKTsgYW5jZXN0b3I7ICkg
eworICAgICAgICBhdXRvIG5leHRBbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRPclNoYWRvd0hv
c3ROb2RlKCk7CisgICAgICAgIGlmIChuZXh0QW5jZXN0b3IgPT0gYi5jb250YWluZXIucHRyKCkp
CisgICAgICAgICAgICByZXR1cm4gaXNPZmZzZXRCZWZvcmVDaGlsZCgqbmV4dEFuY2VzdG9yLCBi
Lm9mZnNldCwgKmFuY2VzdG9yKSA/IFBhcnRpYWxPcmRlcmluZzo6R3JlYXRlciA6IFBhcnRpYWxP
cmRlcmluZzo6TGVzczsKKyAgICAgICAgYW5jZXN0b3IgPSBuZXh0QW5jZXN0b3I7CisgICAgfQor
CisgICAgcmV0dXJuIGRvY3VtZW50T3JkZXIoYS5jb250YWluZXIsIGIuY29udGFpbmVyKTsKK30K
KwogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYgbm9k
ZSkKIHsKICAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IDM5YjY0MzhjYmIxZjQwNDYwMzk4OWUxZGQx
YTVlYTA3ZGIwMDAzZjYuLjVlNTYxMTIwYTY0ZjA5NjJmMjMyYmFlNTM0MGI5MjQ0MDY4OWMyODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTE1NjMsNyArMTU2
Myw3IEBAIHZvaWQgV29yZEF3YXJlSXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKG1fYnVmZmVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gU3RhcnQgZ29i
YmxpbmcgY2h1bmtzIHVudGlsIHdlIGdldCB0byBhIHN1aXRhYmxlIHN0b3BwaW5nIHBvaW50Cisg
ICAgICAgICAgICAvLyBTdGFydCBnb2JibGluZyBjaHVua3MgdW50aWwgd2UgZ2V0IHRvIGEgc3Vp
dGFibGUgc3RvcHBpbmcgcG9pbnQuCiAgICAgICAgICAgICBhcHBlbmQobV9idWZmZXIsIG1fcHJl
dmlvdXNUZXh0LnRleHQoKSk7CiAgICAgICAgICAgICBtX3ByZXZpb3VzVGV4dC5yZXNldCgpOwog
ICAgICAgICB9CkBAIC0yMDkwLDEwICsyMDkwLDEwIEBAIGlubGluZSBib29sIFNlYXJjaEJ1ZmZl
cjo6aXNXb3JkRW5kTWF0Y2goc2l6ZV90IHN0YXJ0LCBzaXplX3QgbGVuZ3RoKSBjb25zdAogICAg
IEFTU0VSVChsZW5ndGgpOwogICAgIEFTU0VSVChtX29wdGlvbnMuY29udGFpbnMoQXRXb3JkRW5k
cykpOwogCi0gICAgaW50IGVuZFdvcmQ7CiAgICAgLy8gU3RhcnQgc2VhcmNoaW5nIGF0IHRoZSBl
bmQgb2YgbWF0Y2hlZCBzZWFyY2gsIHNvIHRoYXQgbXVsdGlwbGUgd29yZCBtYXRjaGVzIHN1Y2Nl
ZWQuCisgICAgaW50IGVuZFdvcmQ7CiAgICAgZmluZEVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3
KG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpKSwgc3RhcnQgKyBsZW5ndGggLSAxLCAm
ZW5kV29yZCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZW5kV29yZCkgPT0gKHN0
YXJ0ICsgbGVuZ3RoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihlbmRXb3JkKSA9
PSBzdGFydCArIGxlbmd0aDsKIH0KIAogaW5saW5lIGJvb2wgU2VhcmNoQnVmZmVyOjppc1dvcmRT
dGFydE1hdGNoKHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKQEAgLTIzMzMsMTQg
KzIzMzMsMTcgQEAgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6bGVuZ3RoKCkgY29uc3QKIAogdWludDY0
X3QgY2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SXRlcmF0b3JC
ZWhhdmlvciBiZWhhdmlvcikKIHsKLSAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBSYW5nZTo6
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKCZyYW5nZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5zdGFy
dE9mZnNldCgpLCAmcmFuZ2UuZW5kQ29udGFpbmVyKCksIHJhbmdlLmVuZE9mZnNldCgpKTsKLSAg
ICBpZiAoY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBhdXRvIGFkanVzdGVkUmFuZ2UocmFuZ2UpOwotICAgIGlmIChjb21wYXJpc29uUmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkKKyAgICBhdXRvIGFkanVzdGVkUmFuZ2UgPSBy
YW5nZTsKKyAgICBzd2l0Y2ggKGRvY3VtZW50T3JkZXIocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCkp
IHsKKyAgICBjYXNlIFBhcnRpYWxPcmRlcmluZzo6TGVzczoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQYXJ0aWFsT3JkZXJpbmc6OkdyZWF0ZXI6CiAgICAgICAgIHN0ZDo6c3dhcChhZGp1c3Rl
ZFJhbmdlLnN0YXJ0LCBhZGp1c3RlZFJhbmdlLmVuZCk7Ci0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQYXJ0aWFsT3JkZXJpbmc6OkVxdWl2YWxlbnQ6CisgICAgY2FzZSBQYXJ0aWFsT3JkZXJp
bmc6OlVub3JkZXJlZDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIHVpbnQ2NF90IGxl
bmd0aCA9IDA7CiAgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoYWRqdXN0ZWRSYW5nZSwgYmVoYXZp
b3IpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKQogICAgICAgICBsZW5ndGggKz0gaXQudGV4
dCgpLmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3Bw
CmluZGV4IGQxN2Y1NTZiZDNiNGNlZjgyMWEwMTgxMzBiYmFlM2FlNDE4NGEwNzIuLmYwNjhiZjU4
MDkwMzc3NWQ1OGJmMWE4ODdmZGQ1MTUzM2JjMDY5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTc2Niw3ICs3NjYsNyBAQCBib29sIGlzTGFzdFZp
c2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlv
biwgY29uc3QgTgogCiBib29sIGFyZVZpc2libGVQb3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7Ci0gICAg
cmV0dXJuIGFyZU5vZGVzQ29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGEuZGVlcEVxdWl2YWxlbnQo
KS5hbmNob3JOb2RlKCksIGIuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCkpOworICAgIHJl
dHVybiBjb25uZWN0ZWRJblNhbWVUcmVlU2NvcGUoYS5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5v
ZGUoKSwgYi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKSk7CiB9CiAKIGJvb2wgVmlzaWJs
ZVBvc2l0aW9uOjplcXVhbHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvdGhlcikgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCmluZGV4IDBiOTgzYjE5M2M5YTBi
NGY4NTIwYTRkZjIwMmE1YjA2MTU4YWM2NTkuLmVlMGJmZWY0NmRmMjAzZDQ2MTFhNjBmMDlhYWU1
ZmVmNTNhNGNjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApA
QCAtNTQsNyArNTQsOCBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uKCkgOiBtX2FmZmlu
aXR5KFZQX0RFRkFVTFRfQUZGSU5JVFkpIHsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSA9IFZQX0RFRkFVTFRfQUZGSU5JVFkp
OwogCi0gICAgdm9pZCBjbGVhcigpIHsgbV9kZWVwUG9zaXRpb24uY2xlYXIoKTsgfQorICAgIC8v
IEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIHJlc2V0IG1fYWZmaW5pdHk/CisgICAgdm9pZCBjbGVh
cigpIHsgbV9kZWVwUG9zaXRpb24gPSB7IH07IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOdWxsKCk7IH0KICAgICBib29sIGlzTm90TnVsbCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVsbCgpOyB9CkBAIC0xMTksNiAr
MTIwLDggQEAgcHJpdmF0ZToKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitQYXJ0aWFsT3JkZXJpbmcg
ZG9jdW1lbnRPcmRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOwogYm9vbCBvcGVyYXRvcj4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7CiBib29sIG9wZXJhdG9yPD0oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CkBAIC0xNDcsNyArMTUwLDcgQEAgV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBWaXNp
YmxlUG9zaXRpb25SYW5nZSYKIAogLy8gaW5saW5lcwogCi0vLyBGSVhNRTogVGhpcyBzaG91bGRu
J3QgaWdub3JlIGFmZmluaXR5LgorLy8gRklYTUU6IElzIGl0IGNvcnJlY3QgYW5kIGhlbHBmdWwg
Zm9yIHRoaXMgdG8gYmUgaWdub3JpbmcgYWZmaW5pdHk/CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewog
ICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPT0gYi5kZWVwRXF1aXZhbGVudCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IGNhZTUw
ZjgxOTQ4OTdhMjdiZWJlYjQxNDg3ZjFkMzQxOTI0MGZmMzYuLjY5NDVlMmU1NTE3MTc4Zjc4YzU1
NTQxZjI0YTA4NWYwMDQwYjViYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KQEAgLTIyOTQsNyArMjI5NCw3IEBAIHZvaWQgSFRNTENvbnZlcnRl
cjo6X2FkanVzdFRyYWlsaW5nTmV3bGluZSgpCiAKIE5vZGUqIEhUTUxDb252ZXJ0ZXJDYWNoZXM6
OmNhY2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21t
b25TaGFkb3dJbmNsdWRpbmdBbmNlc3RvcihzdGFydCwgZW5kKTsKKyAgICBhdXRvIGNvbW1vbkFu
Y2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnQsIGVuZCk7CiAgICAgTm9kZSog
YW5jZXN0b3IgPSBzdGFydC5jb250YWluZXJOb2RlKCk7CiAKICAgICB3aGlsZSAoYW5jZXN0b3Ip
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBkMjIxMDhiNjUxZmRjY2NiNDEzZGYx
ZjcwZWI3ODEyZmE0ZDkyYWQ5Li4yN2JjYWVlZDM2ZmVhNjEwOTA0ODE1MTRlMTZlMjU4MDhhMDIy
Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC04NDIsNyArODQyLDcgQEAgc3Rh
dGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGNv
bnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICBpZiAoIWNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVu
ZCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmVmUHRyPE5vZGU+IGNv
bW1vbkFuY2VzdG9yID0gY29tbW9uU2hhZG93SW5jbHVkaW5nQW5jZXN0b3Ioc3RhcnQsIGVuZCk7
CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHN0YXJ0
LCBlbmQpOwogICAgIGlmICghY29tbW9uQW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAppbmRleCBmNmE4MDFk
YjQwNDA2ZGViMTZmOWQ3N2UzNTAzMmYyN2Y5MzU1ZDAyLi5kYTcyYWFmN2U3NWJiOWM3ZWUzOGY5
YTUyYWNhMGMyNTM0NjQzODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxC
b2R5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgK
QEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEJvZHlFbGVt
ZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKEhUTUxCb2R5RWxlbWVudCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxIVE1MQm9keUVs
ZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8
SFRNTEJvZHlFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKICAgICBzdGF0aWMgUmVmPEhUTUxC
b2R5RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogICAg
IHZpcnR1YWwgfkhUTUxCb2R5RWxlbWVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxEaXZFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVt
ZW50LmgKaW5kZXggYTI3Y2IxMGZkYzIyZDVhOWJiNzg2ZjFmYTIwYzY5MjZmZDQ5YmM3NS4uNjky
OTFhMjlhYjUyYWEyZjRkN2IwZDA0NjVmYjk1ODUxMTIwYzVmNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERpdkVsZW1lbnQuaApAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBIVE1MRGl2RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChIVE1MRGl2RWxlbWVudCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxI
VE1MRGl2RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxIVE1MRGl2RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7CiAgICAgc3RhdGljIFJl
ZjxIVE1MRGl2RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYp
OwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIdG1s
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuaAppbmRleCAx
MjE5NWQzZDYxMzU5MTgwZTZjODlmYzA1YjNjYmY4ODhlNTdhNzA5Li5iNjg1Mjg4Njk3NjNhNGIz
ZDE4NzhlNDU5ZDI5MDRjNjczZTliMmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxIdG1sRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVt
ZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEh0
bWxFbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKEhUTUxIdG1sRWxlbWVudCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxIVE1M
SHRtbEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8SFRNTEh0bWxFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQmKTsKICAgICBzdGF0aWMgUmVm
PEhUTUxIdG1sRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYp
OwogCiAgICAgdm9pZCBpbnNlcnRlZEJ5UGFyc2VyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBhODk4ODNmYWQzMGQ5NzlmZWU2YThhZDMzNDJj
OGQyYmI1MzQ5NDczLi44ODE2ODU5NDYxODRlN2M0YTk3NjZlYWFlM2I1MWNkOTkwMmQ0YTViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTEwMyw2
ICsxMDMsMTEgQEAgUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IEhUTUxUZXh0QXJlYUVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW0KICAgICByZXR1cm4gdGV4dEFyZWE7
CiB9CiAKK1JlZjxIVE1MVGV4dEFyZWFFbGVtZW50PiBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVh
dGUoRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIHJldHVybiBjcmVhdGUodGV4dGFyZWFUYWcs
IGRvY3VtZW50LCBudWxscHRyKTsKK30KKwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkaWRB
ZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgcm9vdC5hcHBl
bmRDaGlsZChUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCmluZGV4IGRkMTA3YzM4
OTUzMDQ5YTNiMWU1NzA4NjE2MWIyNjJiZGFkNDg2YWQuLjAxN2QwZTNhMWFmMzQ3ZTI3MDBiOWZj
MWJlZGVhNmQ5NzcyNjdiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiBjbGFzcyBI
VE1MVGV4dEFyZWFFbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEhUTUxUZXh0QXJlYUVsZW1lbnQpOwog
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SFRNTFRleHRBcmVhRWxlbWVu
dD4gY3JlYXRlKERvY3VtZW50Jik7CiAgICAgc3RhdGljIFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50JiwgSFRNTEZvcm1FbGVtZW50
Kik7CiAKICAgICB1bnNpZ25lZCBjb2xzKCkgY29uc3QgeyByZXR1cm4gbV9jb2xzOyB9CkBAIC01
NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBib29sIHRvb0xvbmcoKSBjb25zdCBmaW5hbDsKICAg
ICBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICAKLSAgICBSZWZQ
dHI8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBpbm5lclRleHRFbGVtZW50KCkgY29uc3Qg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxl
bWVudD4gaW5uZXJUZXh0RWxlbWVudCgpIGNvbnN0IGZpbmFsOwogICAgIFJlbmRlclN0eWxlIGNy
ZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJikgZmluYWw7CiAgICAgdm9pZCBj
b3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmKSBmaW5h
bDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDNlZjY2ZTU5OWE5YWY2
YWVkZmFkZGExMDU1ZDFiMTc3YzBlNDJhM2EuLjk2NDQ5ZDMyN2FlYjlhOTFjZmVkNzkyOWNhNmMz
NjY0MTIwMjA1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTMzNiwx
NSArMzM2LDEzIEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAg
ICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9
IGZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKSB7CisgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNv
bnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewogICAgICAgICBzZWxlY3Rpb24uc2V0
U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBub3JtYWxpemVkUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwotICAgIGlmICghbm9ybWFsaXplZFJh
bmdlKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIG5vcm1hbGl6ZWRSYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKTsKICAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpub3JtYWxpemVkUmFuZ2Up
OwogICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA9PSAtMSkgewogICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3Vv
dXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgdHdvIHJhbmdlcyBkb24n
dCBpbnRlcnNlY3QuCkBAIC0zNTMsNyArMzUxLDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJh
bmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRSYW5nZSk7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2VzIGludGVyc2VjdC4K
LSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwg
bm9ybWFsaXplZFJhbmdlLT5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oJnJhbmdl
LnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zmc2V0KCkpLCBtYWtlRGVwcmVjYXRlZExl
Z2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPmVuZENvbnRhaW5lcigpLCBub3JtYWxpemVk
UmFuZ2UtPmVuZE9mZnNldCgpKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2UgY29udGFpbnMgdGhlIG9yaWdpbmFsIHJh
bmdlLgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJh
bmdlKHJhbmdlKSk7CkBAIC0zNjksNyArMzY3LDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJh
bmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9u
KG1ha2VTaW1wbGVSYW5nZSgqbm9ybWFsaXplZFJhbmdlKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZXMgaW50ZXJzZWN0LgotICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbi5tb3ZlVG8obm9ybWFsaXplZFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJh
bmdlLmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgICAgIHNlbGVjdGlv
bi5tb3ZlVG8obWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbigmbm9ybWFsaXplZFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCBub3JtYWxpemVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpLCBtYWtlRGVw
cmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZyYW5nZS5lbmRDb250YWluZXIoKSwgcmFuZ2UuZW5kT2Zm
c2V0KCkpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTQwNCw3ICs0MDIsNyBAQCBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKE5vZGUmIG5v
ZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogCiAgICAgUmVmPE5vZGU+IHByb3RlY3RlZE5v
ZGUobm9kZSk7CiAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgIGlmICgh
c2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXItPmNvbnRhaW5p
bmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4
IDcyMWVlMGQwMDVlZDRjYTdhYTNmNDM2NTIzMGM3NWUwZjAxODVhODguLmU0NmI1NzI3MjIxMmYz
MGRmMDYzYjA5NzQ0MmI0Nzg1Njc2OTBkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtODU5LDkg
Kzg1OSwxOSBAQCBzdGF0aWMgdm9pZCByZXBsYWNlUmFuZ2VzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZl
Y3RvcjxGaW5kUmVwbGFjZW1lbnRSYW5nZT4mIHJhbmdlcwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgICAgIGlmIChmaXJzdEZyYW1lID09IHNlY29uZEZyYW1lKSB7Ci0gICAgICAg
ICAgICAvLyBjb21wYXJlUG9zaXRpb25zIGlzIHVzZWQgaGVyZSBpbnN0ZWFkIG9mIE5vZGU6OmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uIGJlY2F1c2Ugc29tZSBlZGl0aW5nIHJvb3RzIG1heSBleGlz
dCBpbnNpZGUgc2hhZG93IHJvb3RzLgotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVQb3NpdGlv
bnMoeyBmaXJzdE5vZGUuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW4g
fSwgeyBzZWNvbmROb2RlLmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVu
IH0pID4gMDsKKyAgICAgICAgICAgIC8vIFVzZSBkb2N1bWVudE9yZGVyIGluc3RlYWQgb2YgTm9k
ZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24gYmVjYXVzZSBzb21lIGVkaXRpbmcgcm9vdHMgYXJl
IGluc2lkZSBzaGFkb3cgcm9vdHMuCisgICAgICAgICAgICBzd2l0Y2ggKGRvY3VtZW50T3JkZXIo
KmZpcnN0Tm9kZSwgKnNlY29uZE5vZGUpKSB7CisgICAgICAgICAgICBjYXNlIFBhcnRpYWxPcmRl
cmluZzo6TGVzczoKKyAgICAgICAgICAgIGNhc2UgUGFydGlhbE9yZGVyaW5nOjpFcXVpdmFsZW50
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgUGFydGlh
bE9yZGVyaW5nOjpHcmVhdGVyOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgY2FzZSBQYXJ0aWFsT3JkZXJpbmc6OlVub3JkZXJlZDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBmcmFtZVRvVHJhdmVyc2FsSW5kZXhN
YXAuZ2V0KGZpcnN0RnJhbWUpID4gZnJhbWVUb1RyYXZlcnNhbEluZGV4TWFwLmdldChzZWNvbmRG
cmFtZSk7CiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDMwMjExYzk3
ODdkNjM4YzFhNmY1ZDhkZTA1NTQ4MGFkNDM2ZjUwOWIuLmNmMjY5YTFjZGQzMDJhNDNiOTdhYjJi
NjAwMGMwYWQzMDI4MGU4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtMTM0LDcg
KzEzNCw4IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIAogLSAoV0tET01SYW5nZSAqKXJhbmdl
QnlFeHBhbmRpbmdUb1dvcmRCb3VuZGFyeUJ5Q2hhcmFjdGVyczooTlNVSW50ZWdlciljaGFyYWN0
ZXJzIGluRGlyZWN0aW9uOihXS0RPTVJhbmdlRGlyZWN0aW9uKWRpcmVjdGlvbgogewotICAgIGF1
dG8gbmV3UmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRC
b3VuZGFyeShkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyAgX2ltcGwt
PmVuZFBvc2l0aW9uKCkgOiBfaW1wbC0+c3RhcnRQb3NpdGlvbigpLCBjaGFyYWN0ZXJzLCBkaXJl
Y3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJDb3JlOjpTZWxlY3Rpb25E
aXJlY3Rpb246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJk
KTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpfaW1wbCk7CisgICAgYXV0byBu
ZXdSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5k
YXJ5KG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oZGlyZWN0aW9uID09IFdLRE9NUmFuZ2VE
aXJlY3Rpb25Gb3J3YXJkID8gcmFuZ2UuZW5kIDogcmFuZ2Uuc3RhcnQpLCBjaGFyYWN0ZXJzLCBk
aXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlvbkZvcndhcmQgPyBXZWJDb3JlOjpTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQgOiBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3
YXJkKTsKICAgICByZXR1cm4gW1tbV0tET01SYW5nZSBhbGxvY10gX2luaXRXaXRoSW1wbDpjcmVh
dGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGVmNzM1MDA0ZWE2ZDA1
ZTkxMjg2ZWNmYTZmMGY4ZDQwMTA1ZTY2ZGUuLmE4ZWM1MmZiNThlYjRmOGI4NTdjZTZmYTQ4ZWVj
YTk2OWJkYjk1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQpAQCAtMTk2OCw3ICsxOTY4LDggQEAgLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhN
YXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmcKICAgICBb
c2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNl
bWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5
bGU6Tk9dOwogfQogCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZPUk0oTUFD
KQorCiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgd2hpdGVzcGFjZSBuZWVkcyB0byBiZSBhZGRlZCBh
cm91bmQgYVN0cmluZyB0byBwcmVzZXJ2ZSBwcm9wZXIgc3BhY2luZyBhbmQKIC8vIHB1bmN0dWF0
aW9uIHdoZW4gaXQncyBpbnNlcnRlZCBpbnRvIHRoZSByZWNlaXZlcidzIHRleHQgb3ZlciBjaGFy
UmFuZ2UuIFJldHVybnMgYnkgcmVmZXJlbmNlCiAvLyBpbiBiZWZvcmVTdHJpbmcgYW5kIGFmdGVy
U3RyaW5nIGFueSB3aGl0ZXNwYWNlIHRoYXQgc2hvdWxkIGJlIGFkZGVkLCB1bmxlc3MgZWl0aGVy
IG9yIGJvdGggYXJlCkBAIC0xOTgxLDMwICsxOTgyLDI1IEBAIC0gKHZvaWQpX3NtYXJ0SW5zZXJ0
Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOihET01SYW5n
ZSAqCiAgICAgaWYgKGFmdGVyU3RyaW5nKQogICAgICAgICAqYWZ0ZXJTdHJpbmcgPSBuaWw7CiAg
ICAgICAgIAotICAgIC8vIGluc3BlY3QgZGVzdGluYXRpb24KLSAgICBXZWJDb3JlOjpOb2RlICpz
dGFydENvbnRhaW5lciA9IGNvcmUoW3JhbmdlVG9SZXBsYWNlIHN0YXJ0Q29udGFpbmVyXSk7Ci0g
ICAgV2ViQ29yZTo6Tm9kZSAqZW5kQ29udGFpbmVyID0gY29yZShbcmFuZ2VUb1JlcGxhY2UgZW5k
Q29udGFpbmVyXSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb3JlKHJhbmdl
VG9SZXBsYWNlKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgV2Vi
Q29yZTo6UG9zaXRpb24gc3RhcnRQb3Moc3RhcnRDb250YWluZXIsIFtyYW5nZVRvUmVwbGFjZSBz
dGFydE9mZnNldF0sIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
OwotICAgIFdlYkNvcmU6OlBvc2l0aW9uIGVuZFBvcyhlbmRDb250YWluZXIsIFtyYW5nZVRvUmVw
bGFjZSBlbmRPZmZzZXRdLCBXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKTsKKyAgICBhdXRvIHN0YXJ0ID0gV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIHsgbWFrZUNv
bnRhaW5lck9mZnNldFBvc2l0aW9uKHJhbmdlLT5zdGFydCkgfTsKKyAgICBhdXRvIGVuZCA9IFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbiB7IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihyYW5n
ZS0+ZW5kKSB9OwogCi0gICAgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBv
cyA9IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbihzdGFydFBvcywgV2ViQ29yZTo6VlBfREVGQVVM
VF9BRkZJTklUWSk7Ci0gICAgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3Mg
PSBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24oZW5kUG9zLCBXZWJDb3JlOjpWUF9ERUZBVUxUX0FG
RklOSVRZKTsKKyAgICBib29sIGFkZExlYWRpbmdTcGFjZSA9IHN0YXJ0LmRlZXBFcXVpdmFsZW50
KCkubGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihXZWJDb3JlOjpWUF9ERUZBVUxUX0FGRklOSVRZ
LCB0cnVlKS5pc051bGwoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0KTsKKyAgICBpZiAo
YWRkTGVhZGluZ1NwYWNlKSB7CisgICAgICAgIGlmIChVQ2hhciBwcmV2aW91c0NoYXJhY3RlciA9
IHN0YXJ0LnByZXZpb3VzKCkuY2hhcmFjdGVyQWZ0ZXIoKSkKKyAgICAgICAgICAgIGFkZExlYWRp
bmdTcGFjZSA9ICFXZWJDb3JlOjppc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdChwcmV2aW91
c0NoYXJhY3RlciwgdHJ1ZSk7CisgICAgfQogICAgIAotICAgIC8vIHRoaXMgY2hlY2sgYWxzbyBl
bnN1cmVzIHN0YXJ0Q29udGFpbmVyLCBzdGFydFBvcywgZW5kQ29udGFpbmVyLCBhbmQgZW5kUG9z
IGFyZSBub24tbnVsbAotICAgIGlmIChzdGFydFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlz
aWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgYWRkVHJhaWxpbmdT
cGFjZSA9IGVuZC5kZWVwRXF1aXZhbGVudCgpLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFdl
YkNvcmU6OlZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTnVsbCgpICYmICFpc0VuZE9mUGFy
YWdyYXBoKGVuZCk7CisgICAgaWYgKGFkZFRyYWlsaW5nU3BhY2UpIHsKKyAgICAgICAgaWYgKFVD
aGFyIGZvbGxvd2luZ0NoYXJhY3RlciA9IGVuZC5jaGFyYWN0ZXJBZnRlcigpKQorICAgICAgICAg
ICAgYWRkVHJhaWxpbmdTcGFjZSA9ICFXZWJDb3JlOjppc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4
ZW1wdChmb2xsb3dpbmdDaGFyYWN0ZXIsIGZhbHNlKTsKKyAgICB9CiAKLSAgICBib29sIGFkZExl
YWRpbmdTcGFjZSA9IHN0YXJ0UG9zLmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oV2ViQ29yZTo6
VlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOdWxsKCkgJiYgIWlzU3RhcnRPZlBhcmFncmFw
aChzdGFydFZpc2libGVQb3MpOwotICAgIGlmIChhZGRMZWFkaW5nU3BhY2UpCi0gICAgICAgIGlm
IChVQ2hhciBwcmV2aW91c0NoYXIgPSBzdGFydFZpc2libGVQb3MucHJldmlvdXMoKS5jaGFyYWN0
ZXJBZnRlcigpKQotICAgICAgICAgICAgYWRkTGVhZGluZ1NwYWNlID0gIVdlYkNvcmU6OmlzQ2hh
cmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KHByZXZpb3VzQ2hhciwgdHJ1ZSk7Ci0gICAgCi0gICAg
Ym9vbCBhZGRUcmFpbGluZ1NwYWNlID0gZW5kUG9zLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9u
KFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTnVsbCgpICYmICFpc0VuZE9m
UGFyYWdyYXBoKGVuZFZpc2libGVQb3MpOwotICAgIGlmIChhZGRUcmFpbGluZ1NwYWNlKQotICAg
ICAgICBpZiAoVUNoYXIgdGhpc0NoYXIgPSBlbmRWaXNpYmxlUG9zLmNoYXJhY3RlckFmdGVyKCkp
Ci0gICAgICAgICAgICBhZGRUcmFpbGluZ1NwYWNlID0gIVdlYkNvcmU6OmlzQ2hhcmFjdGVyU21h
cnRSZXBsYWNlRXhlbXB0KHRoaXNDaGFyLCBmYWxzZSk7Ci0gICAgCiAgICAgLy8gaW5zcGVjdCBz
b3VyY2UKICAgICBib29sIGhhc1doaXRlc3BhY2VBdFN0YXJ0ID0gZmFsc2U7CiAgICAgYm9vbCBo
YXNXaGl0ZXNwYWNlQXRFbmQgPSBmYWxzZTsKQEAgLTIwMTksMTQgKzIwMTUsMTUgQEAgLSAodm9p
ZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFjaW5n
UmFuZ2U6KERPTVJhbmdlICoKICAgICAgICAgICAgIGhhc1doaXRlc3BhY2VBdEVuZCA9IFlFUzsK
ICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIGlzc3VlIHRoZSB2ZXJkaWN0CiAgICAg
aWYgKGJlZm9yZVN0cmluZyAmJiBhZGRMZWFkaW5nU3BhY2UgJiYgIWhhc1doaXRlc3BhY2VBdFN0
YXJ0KQogICAgICAgICAqYmVmb3JlU3RyaW5nID0gQCIgIjsKICAgICBpZiAoYWZ0ZXJTdHJpbmcg
JiYgYWRkVHJhaWxpbmdTcGFjZSAmJiAhaGFzV2hpdGVzcGFjZUF0RW5kKQogICAgICAgICAqYWZ0
ZXJTdHJpbmcgPSBAIiAiOwogfQotI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtIChOU011dGFibGVEaWN0aW9uYXJ5ICopX2NhY2hl
YWJpbGl0eURpY3Rpb25hcnkKIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA2NWRlZDUxNDllNWYyNDhlMDMwODg2NTExZDU1ZDE4ZTgzZDgwNDMx
Li4zMjk2ZTYxNzlmY2MyZjQ0OGZhMDc2NWZmMDM0ZjljMGU5MTNkY2VmIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MjAtMDgtMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0
ZSBkb2N1bWVudE9yZGVyIGZ1bmN0aW9uLCBzdGFydCByZWZhY3RvcmluZyB0byB1c2UgaXQgaW5z
dGVhZCBvZiBSYW5nZTo6Y29tcGFyZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIERvY3VtZW50T3JkZXIuY3BwLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIFJlbGF0aXZlbHkgdGhvcm91Z2ggdGVzdCBvZiB0aHJlZSBkaWZmZXJlbnQgZG9j
dW1lbnRPcmRlciBmdW5jdGlvbnMuCisgICAgICAgIENvdWxkIHN0aWxsIHVzZSBzb21lIG1vcmUg
dGVzdCBjYXNlcyBpbnZvbHZpbmcgZGlmZmVyZW50IHR5cGVzIG9mIHNoYWRvdyB0cmVlcy4KKwog
MjAyMC0wOC0xNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBMaXZlIFdlYiBDb250ZW50IHByb2Nlc3NlcyBkbyBub3QgcmVzcGVjdCBhY2NlbnQgY29s
b3IgaWYgZHluYW1pY2FsbHkgY2hhbmdlZCB0byAibXVsdGljb2xvciIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMDgxMmJmYWQ2NzhhZDUyNjE3NTQ2Y2RmMmEyZDM5YWU0ZGM1M2EwZC4uOTli
YjM4ZDVmZWZkNThmMTI3NjAwYWExNGM5MzFiYWYyNjU0Y2E5MSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTgwNSw2ICs4MDUsNyBAQAogCQk5MzdBNkM4QTI0MzU3QzE3MDBDM0E2QjAgLyog
S2lsbFdlYlByb2Nlc3NXaXRoT3BlbkNvbm5lY3Rpb24tMS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzN0E2Qzg4MjQzNTdCRjMwMEMz
QTZCMCAvKiBLaWxsV2ViUHJvY2Vzc1dpdGhPcGVuQ29ubmVjdGlvbi0xLmh0bWwgKi87IH07CiAJ
CTkzN0E2QzhCMjQzNTdDMTcwMEMzQTZCMCAvKiBLaWxsV2ViUHJvY2Vzc1dpdGhPcGVuQ29ubmVj
dGlvbi0yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM3QTZDODkyNDM1N0JGMzAwQzNBNkIwIC8qIEtpbGxXZWJQcm9jZXNzV2l0aE9w
ZW5Db25uZWN0aW9uLTIuaHRtbCAqLzsgfTsKIAkJOTM3QjU2OUUyM0NEMjNEQjAwMkFFNjQwIC8q
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JDQkM4MTIzQ0M2RUY1MDBDQTIyMjEg
LyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzICovOyB9OworCQk5MzkxNUExNzI0
REI2NkM3MDAxOUZGNDMgLyogRG9jdW1lbnRPcmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkxNUExNjI0REI2NkM3MDAxOUZGNDMgLyogRG9j
dW1lbnRPcmRlci5jcHAgKi87IH07CiAJCTkzOTlCQTA0MjM3MTExNDAwMDgzOTJCRiAvKiBJbmRl
eGVkREJJblBhZ2VDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzOTlCQTAxMjM3MTEwQUUwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNo
ZS5tbSAqLzsgfTsKIAkJOTM5OUJBMDUyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFn
ZUNhY2hlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTM5OUJBMDIyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hl
Lmh0bWwgKi87IH07CiAJCTkzOTlCQTA2MjM3MTExNEYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJ
blBhZ2VDYWNoZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzOTlCQTAzMjM3MTEwQkYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBh
Z2VDYWNoZS5odG1sICovOyB9OwpAQCAtMjExNCw3ICsyMTE1LDYgQEAKIAkJNTc0RjU1RDAyMDRE
NDcxQzAwMjk0OEM2IC8qIFNlY3VyaXR5LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gU2Vj
dXJpdHkuZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9TZWN1cml0
eS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQk1NzUxQjI4OTI0OUQ1Qjk5
MDA2NjRDMkEgLyogd2ViLWF1dGhlbnRpY2F0aW9uLW1ha2UtY3JlZGVudGlhbC1oaWQtcGluLWdl
dC1waW4tdG9rZW4tZmFrZS1waW4taW52YWxpZC1lcnJvci1yZXRyeS5odG1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
IndlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNyZWRlbnRpYWwtaGlkLXBpbi1nZXQtcGluLXRva2Vu
LWZha2UtcGluLWludmFsaWQtZXJyb3ItcmV0cnkuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3NTM3RUU3MjRCRUEwMTkwMDQ4REJBNSAvKiB3ZWItYXV0aGVudGljYXRpb24t
Z2V0LWFzc2VydGlvbi1uZmMtcGluLWRpc2Nvbm5lY3QuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJ3ZWItYXV0
aGVudGljYXRpb24tZ2V0LWFzc2VydGlvbi1uZmMtcGluLWRpc2Nvbm5lY3QuaHRtbCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3NTg1OTdEMjNBMjUyN0EwMEM3NDU3MiAvKiBDdGFw
UGluVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdGFwUGluVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1NzU4NTk3RTIzQTI1MjdBMDBDNzQ1NzIgLyogQ3RhcFBpblRlc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ3RhcFBpblRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzU4NTk4MzIzQzNDMzYyMDBDNzQ1NzIgLyogd2ViLWF1dGhlbnRpY2F0aW9u
LW1ha2UtY3JlZGVudGlhbC1oaWQtcGluLWdldC1yZXRyaWVzLWVycm9yLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGgg
PSAid2ViLWF1dGhlbnRpY2F0aW9uLW1ha2UtY3JlZGVudGlhbC1oaWQtcGluLWdldC1yZXRyaWVz
LWVycm9yLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzU5OUUyMDFGMDcx
OTE3MDBBM0ZCOEMgLyogSW5kZXhlZERCU3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmls
aXR5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5kZXhlZERC
U3RydWN0dXJlZENsb25lQmFja3dhcmRDb21wYXRpYmlsaXR5Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjM3OSw2ICsyMzc5LDcgQEAKIAkJOTM2RjcyN0YxQ0Q3RDlEMDAwNjhB
MEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8ubXA0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJsYXJnZS12aWRlby13aXRo
LWF1ZGlvLm1wNCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzN0E2Qzg4MjQzNTdC
RjMwMEMzQTZCMCAvKiBLaWxsV2ViUHJvY2Vzc1dpdGhPcGVuQ29ubmVjdGlvbi0xLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiS2lsbFdlYlByb2Nlc3NXaXRoT3BlbkNvbm5lY3Rp
b24tMS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3QTZDODkyNDM1N0JG
MzAwQzNBNkIwIC8qIEtpbGxXZWJQcm9jZXNzV2l0aE9wZW5Db25uZWN0aW9uLTIuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJLaWxsV2ViUHJvY2Vzc1dpdGhPcGVuQ29ubmVjdGlv
bi0yLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzkxNUExNjI0REI2NkM3
MDAxOUZGNDMgLyogRG9jdW1lbnRPcmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEb2N1bWVudE9yZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTM5OUJBMDEyMzcxMTBBRTAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5kZXhlZERCSW5QYWdlQ2Fj
aGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTlCQTAyMjM3MTEwQkYwMDgz
OTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gSW5kZXhlZERCSW5QYWdlQ2FjaGUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTM5OUJBMDMyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hl
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJbmRleGVkREJOb3RJblBhZ2VDYWNo
ZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQzNSwxMiArMzQzNiwxMiBA
QAogCQkJCTQ0Q0YzMUZCMjQ5OTNGNjYwMDlDQjZDQiAvKiBDb250ZXh0TWVudUFjdGlvbi5jcHAg
Ki8sCiAJCQkJQ0Q1NDUxRTkxOUU0MUY5RDAwMTY5MzZGIC8qIENTU1BhcnNlci5jcHAgKi8sCiAJ
CQkJNTc1ODU5N0UyM0EyNTI3QTAwQzc0NTcyIC8qIEN0YXBQaW5UZXN0LmNwcCAqLywKLQkJCQk1
NzU4NTk3RDIzQTI1MjdBMDBDNzQ1NzIgLyogQ3RhcFBpblRlc3QuaCAqLywKIAkJCQk1NzJCNDAz
MzIxNzY5QTg4MDAwQUQ0M0UgLyogQ3RhcFJlcXVlc3RUZXN0LmNwcCAqLywKIAkJCQk1NzJCNDA0
MzIxNzgxQjQyMDAwQUQ0M0UgLyogQ3RhcFJlc3BvbnNlVGVzdC5jcHAgKi8sCiAJCQkJMjYwQkE1
NzgxQjFEMkU3QjAwNEZBMDdDIC8qIERGQUNvbWJpbmVyLmNwcCAqLywKIAkJCQkyNjBCQTU3QTFC
MUQyRUUyMDA0RkEwN0MgLyogREZBSGVscGVycy5oICovLAogCQkJCTI2RjZFMUVGMUFEQzc0OUIw
MERFNjk2QiAvKiBERkFNaW5pbWl6ZXIuY3BwICovLAorCQkJCTkzOTE1QTE2MjREQjY2QzcwMDE5
RkY0MyAvKiBEb2N1bWVudE9yZGVyLmNwcCAqLywKIAkJCQkzMTUxMTgwRjFEQjFBREQ1MDAxNzYz
MDQgLyogRXh0ZW5kZWRDb2xvclRlc3RzLmNwcCAqLywKIAkJCQk1Nzk2NTFFNjIxNkJGRDUzMDA2
RUJGRTUgLyogRmlkb0hpZE1lc3NhZ2VUZXN0LmNwcCAqLywKIAkJCQk1NzJCNDAzNTIxNzZBMDI5
MDAwQUQ0M0UgLyogRmlkb1Rlc3REYXRhLmggKi8sCkBAIC00ODY1LDkgKzQ4NjYsOSBAQAogCQkJ
CTdDODNERUQyMUQwQTU5MEMwMEZFQkNGMyAvKiBIYXNoTWFwLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERUQ0MUQwQTU5MEMwMEZFQkNGMyAvKiBIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDOEJGRjcxMjNDMDEwN0EwMEMwMDlCMyAvKiBIZXhOdW1iZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzM5NzZEODMyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUUwMUQwQTU5MEMwMEZFQkNGMyAvKiBJbnRlZ2Vy
VG9TdHJpbmdDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzRkNERTZCMjI5RUZG
QjkwMDU5OEVDRiAvKiBJc29IZWFwLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTMzOTc2RDgzMjRE
QzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
Q0VCNjJBQjIyMzYwOURFMDA2OUNCQjAgLyogSXRlcmF0b3JSYW5nZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3QTA1MDk0MTFGQjlGMDY0MDBCMzNGQjggLyogSlNPTlZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MDYwLDcgQEAKIAkJCQk3M0JENzMxODIzQTg0NjUw
MDAyMEY0NTAgLyogRGlzcGxheU5hbWUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MThFRTUxQjIw
QTc4RDAwMDBFMDI0RjMgLyogRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVBZnRlckNyYXNo
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ3RkQxOTMyMjQxOTA4NzAwNzg4N0YxIC8qIERvY3Vt
ZW50RWRpdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKKwkJCQk5MzkxNUExNzI0REI2NkM3
MDAxOUZGNDMgLyogRG9jdW1lbnRPcmRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VF
QjFBNDExQUU2MDA0NDdDNEMgLyogRG9jdW1lbnRTdGFydFVzZXJTY3JpcHRBbGVydENyYXNoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJCMUE0MTFBN0UwMDQ0N0M0QyAvKiBET01IVE1M
VGFibGVDZWxsQ2VsbEFib3ZlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1MUEwQzcxQzhCRjAw
QzAwNzY1QzQ1IC8qIERPTUhUTUxWaWRlb0VsZW1lbnRXcmFwcGVyLm1tIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRP
cmRlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDAyMWFlYzBhYjlhYjVlNTA0OWY5NjMwMjRhODQzMTE4MmMyOTkx
YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9E
b2N1bWVudE9yZGVyLmNwcApAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQm91bmRhcnlQb2ludC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCb2R5RWxlbWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTERpdkVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxIdG1sRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRleHRBcmVhRWxl
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUG9zaXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oPgorCisjZGVmaW5lIEVYUEVDVF9CT1RIKGEsIGIs
IGZvcndhcmQsIHJldmVyc2VkKSBkbyB7IEVYUEVDVF9TVFJFUShzdHJpbmcoZG9jdW1lbnRPcmRl
cihhLCBiKSksIHN0cmluZyhQYXJ0aWFsT3JkZXJpbmc6OmZvcndhcmQpKTsgRVhQRUNUX1NUUkVR
KHN0cmluZyhkb2N1bWVudE9yZGVyKGIsIGEpKSwgc3RyaW5nKFBhcnRpYWxPcmRlcmluZzo6cmV2
ZXJzZWQpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRVhQRUNUX0VRVUlWQUxFTlQoYSwgYikgRVhQ
RUNUX0JPVEgoYSwgYiwgRXF1aXZhbGVudCwgRXF1aXZhbGVudCkKKyNkZWZpbmUgRVhQRUNUX0xF
U1MoYSwgYikgRVhQRUNUX0JPVEgoYSwgYiwgTGVzcywgR3JlYXRlcikKKyNkZWZpbmUgRVhQRUNU
X1VOT1JERVJFRChhLCBiKSBFWFBFQ1RfQk9USChhLCBiLCBVbm9yZGVyZWQsIFVub3JkZXJlZCkK
KworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
Kworc3RhdGljIFJlZjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoKQoreworICAgIEhUTUxOYW1l
czo6aW5pdCgpOworICAgIGF1dG8gZG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKGFib3V0Qmxh
bmtVUkwoKSk7CisgICAgYXV0byBkb2N1bWVudEVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CisgICAgZG9jdW1lbnQtPmFwcGVuZENoaWxkKGRvY3VtZW50RWxlbWVu
dCk7CisgICAgYXV0byBib2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwor
ICAgIGRvY3VtZW50RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSk7CisgICAgcmV0dXJuIGRvY3Vt
ZW50OworfQorCitzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludChOb2RlJiBu
b2RlLCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgcmV0dXJuIHsgbm9kZSwgb2Zmc2V0IH07Cit9
CisKK2NvbnN0ZXhwciBjb25zdCBjaGFyKiBzdHJpbmcoUGFydGlhbE9yZGVyaW5nIG9yZGVyaW5n
KQoreworICAgIHN3aXRjaCAob3JkZXJpbmcpIHsKKyAgICBjYXNlIFBhcnRpYWxPcmRlcmluZzo6
TGVzczoKKyAgICAgICAgcmV0dXJuICJsZXNzIjsKKyAgICBjYXNlIFBhcnRpYWxPcmRlcmluZzo6
R3JlYXRlcjoKKyAgICAgICAgcmV0dXJuICJncmVhdGVyIjsKKyAgICBjYXNlIFBhcnRpYWxPcmRl
cmluZzo6RXF1aXZhbGVudDoKKyAgICAgICAgcmV0dXJuICJlcXVpdmFsZW50IjsKKyAgICBjYXNl
IFBhcnRpYWxPcmRlcmluZzo6VW5vcmRlcmVkOgorICAgICAgICByZXR1cm4gInVub3JkZXJlZCI7
CisgICAgfQorICAgIHJldHVybiAiaW52YWxpZCI7Cit9CisKK3N0YXRpYyBQYXJ0aWFsT3JkZXJp
bmcgb3BlcmF0b3ItKFBhcnRpYWxPcmRlcmluZyBvcmRlcmluZykKK3sKKyAgICBzd2l0Y2ggKG9y
ZGVyaW5nKSB7CisgICAgY2FzZSBQYXJ0aWFsT3JkZXJpbmc6Okxlc3M6CisgICAgICAgIHJldHVy
biBQYXJ0aWFsT3JkZXJpbmc6OkdyZWF0ZXI7CisgICAgY2FzZSBQYXJ0aWFsT3JkZXJpbmc6Okdy
ZWF0ZXI6CisgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6Okxlc3M7CisgICAgY2FzZSBQ
YXJ0aWFsT3JkZXJpbmc6OkVxdWl2YWxlbnQ6CisgICAgY2FzZSBQYXJ0aWFsT3JkZXJpbmc6OlVu
b3JkZXJlZDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBvcmRlcmluZzsKK30K
KworVEVTVChEb2N1bWVudE9yZGVyLCBOb2RlKQoreworICAgIEhUTUxOYW1lczo6aW5pdCgpOwor
CisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgYm9keSA9
ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX0VRVUlWQUxFTlQoZG9jdW1lbnQsIGRv
Y3VtZW50KTsKKworICAgIEVYUEVDVF9FUVVJVkFMRU5UKGJvZHksIGJvZHkpOworICAgIEVYUEVD
VF9MRVNTKGRvY3VtZW50LCBib2R5KTsKKyAgICBFWFBFQ1RfTEVTUyhkb2N1bWVudCwgYm9keSk7
CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBF
WFBFQ1RfRVFVSVZBTEVOVChhLCBhKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKGJvZHksIGEpOwor
ICAgIEVYUEVDVF9VTk9SREVSRUQoYSwgYm9keSk7CisKKyAgICBib2R5LmFwcGVuZENoaWxkKGEp
OworICAgIEVYUEVDVF9MRVNTKGJvZHksIGEpOworICAgIEVYUEVDVF9MRVNTKGJvZHksIGEpOwor
ICAgIEVYUEVDVF9FUVVJVkFMRU5UKGEsIGEpOworCisgICAgYXV0byBiID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKyAgICBFWFBF
Q1RfTEVTUyhib2R5LCBiKTsKKyAgICBFWFBFQ1RfTEVTUyhib2R5LCBiKTsKKyAgICBFWFBFQ1Rf
TEVTUyhhLCBiKTsKKyAgICBFWFBFQ1RfTEVTUyhhLCBiKTsKKworICAgIGF1dG8gYyA9IEhUTUxE
aXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVuZENoaWxkKGMpOworICAg
IEVYUEVDVF9MRVNTKGJvZHksIGMpOworICAgIEVYUEVDVF9MRVNTKGJvZHksIGMpOworICAgIEVY
UEVDVF9MRVNTKGEsIGMpOworICAgIEVYUEVDVF9MRVNTKGIsIGMpOworICAgIEVYUEVDVF9MRVNT
KGEsIGMpOworICAgIEVYUEVDVF9MRVNTKGIsIGMpOworCisgICAgYXV0byBkID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7CisgICAgRVhQ
RUNUX0xFU1MoYm9keSwgZCk7CisgICAgRVhQRUNUX0xFU1MoYm9keSwgZCk7CisgICAgRVhQRUNU
X0xFU1MoYSwgZCk7CisgICAgRVhQRUNUX0xFU1MoZCwgYik7CisgICAgRVhQRUNUX0xFU1MoZCwg
Yyk7CisgICAgRVhQRUNUX0xFU1MoYSwgZCk7CisgICAgRVhQRUNUX0xFU1MoZCwgYik7CisgICAg
RVhQRUNUX0xFU1MoZCwgYyk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKGJvZHksIGYp
OworICAgIEVYUEVDVF9VTk9SREVSRUQoZiwgYm9keSk7CisKKyAgICBhdXRvIGcgPSBIVE1MVGV4
dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGMtPmFwcGVuZENoaWxkKGcpOwor
ICAgIEVYUEVDVF9MRVNTKGJvZHksIGcpOworCisgICAgYXV0byYgaCA9ICpnLT5pbm5lclRleHRF
bGVtZW50KCk7CisgICAgRVhQRUNUX0xFU1MoYm9keSwgaCk7Cit9CisKK1RFU1QoRG9jdW1lbnRP
cmRlciwgQm91bmRhcnlQb2ludE9mZnNldFplcm8pCit7CisgICAgYXV0byBkb2N1bWVudCA9IGNy
ZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisg
ICAgRVhQRUNUX0VRVUlWQUxFTlQobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtl
Qm91bmRhcnlQb2ludChkb2N1bWVudCwgMCkpOworCisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5k
YXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSk7CisKKyAg
ICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBFWFBFQ1Rf
RVFVSVZBTEVOVChtYWtlQm91bmRhcnlQb2ludChhLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwg
MCkpOworICAgIEVYUEVDVF9VTk9SREVSRUQobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMCksIG1h
a2VCb3VuZGFyeVBvaW50KGEsIDApKTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisgICAg
RVhQRUNUX0VRVUlWQUxFTlQobWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCksIG1ha2VCb3VuZGFyeVBv
aW50KGEsIDApKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwg
bWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpOworCisgICAgYXV0byBiID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKyAgICBFWFBFQ1Rf
TEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYiwgMCkp
OworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGEsIDApLCBtYWtlQm91bmRhcnlQ
b2ludChiLCAwKSk7CisKKyAgICBhdXRvIGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRh
cnlQb2ludChib2R5LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYywgMCkpOworICAgIEVYUEVDVF9M
RVNTKG1ha2VCb3VuZGFyeVBvaW50KGEsIDApLCBtYWtlQm91bmRhcnlQb2ludChjLCAwKSk7Cisg
ICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYiwgMCksIG1ha2VCb3VuZGFyeVBvaW50
KGMsIDApKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGEtPmFwcGVuZENoaWxkKGQpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBv
aW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChkLCAwKSk7CisgICAgRVhQRUNUX0xFU1Mo
bWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGQsIDApKTsKKyAgICBF
WFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChkLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYiwg
MCkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGQsIDApLCBtYWtlQm91bmRh
cnlQb2ludChjLCAwKSk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKG1ha2VCb3VuZGFy
eVBvaW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChmLCAwKSk7CisKKyAgICBhdXRvIGcg
PSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8gaCA9IGct
PmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBBU1NFUlRfVFJVRShoKTsKKyAgICBjLT5hcHBlbmRD
aGlsZChnKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoZywgMCkpOworfQorCitURVNUKERvY3VtZW50T3JkZXIsIEJvdW5kYXJ5
UG9pbnRPZmZzZXRzKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOwor
ICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9MRVNTKG1h
a2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQs
IDEpKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFrZUJv
dW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisgICAgRVhQRUNU
X0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEp
KTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAg
IGJvZHkuYXBwZW5kQ2hpbGQoYik7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQo
Ym9keSwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGIsIDApKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtl
Qm91bmRhcnlQb2ludChiLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMikpOworCisgICAg
YXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5k
Q2hpbGQoYyk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMSksIG1h
a2VCb3VuZGFyeVBvaW50KGMsIDApKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2lu
dChjLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMikpOworICAgIEVYUEVDVF9MRVNTKG1h
a2VCb3VuZGFyeVBvaW50KGEsIDEpLCBtYWtlQm91bmRhcnlQb2ludChjLCAwKSk7CisgICAgRVhQ
RUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYywgMCksIG1ha2VCb3VuZGFyeVBvaW50KGIsIDEp
KTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAg
IGEtPmFwcGVuZENoaWxkKGQpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGQs
IDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJv
dW5kYXJ5UG9pbnQoZCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDEpKTsKKyAgICBFWFBFQ1Rf
TEVTUyhtYWtlQm91bmRhcnlQb2ludChkLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYiwgMSkpOwor
ICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGQsIDApLCBtYWtlQm91bmRhcnlQb2lu
dChjLCAxKSk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBl
LT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKG1ha2VCb3VuZGFyeVBvaW50
KGJvZHksIDEpLCBtYWtlQm91bmRhcnlQb2ludChmLCAwKSk7CisKKyAgICBhdXRvIGcgPSBIVE1M
VGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGMtPmFwcGVuZENoaWxkKGcp
OworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpLCBtYWtlQm91bmRh
cnlQb2ludChnLCAwKSk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYywgMCks
IG1ha2VCb3VuZGFyeVBvaW50KGMsIDEpKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQ
b2ludChjLCAxKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYywgMikpOworICAgIEVYUEVDVF9MRVNTKG1h
a2VCb3VuZGFyeVBvaW50KGMsIDApLCBtYWtlQm91bmRhcnlQb2ludChjLCAyKSk7CisgICAgRVhQ
RUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYywgMCksIG1ha2VCb3VuZGFyeVBvaW50KGcsIDAp
KTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChnLCAwKSwgbWFrZUJvdW5kYXJ5
UG9pbnQoYywgMSkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGcsIDApLCBt
YWtlQm91bmRhcnlQb2ludChjLCAyKSk7CisKKyAgICBhdXRvJiBoID0gKmctPmlubmVyVGV4dEVs
ZW1lbnQoKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoaCwgMCkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50
KGMsIDApLCBtYWtlQm91bmRhcnlQb2ludChoLCAwKSk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJv
dW5kYXJ5UG9pbnQoaCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGMsIDEpKTsKKyAgICBFWFBFQ1Rf
TEVTUyhtYWtlQm91bmRhcnlQb2ludChoLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYywgMikpOwor
fQorCitzdGF0aWMgVmVjdG9yPFBvc2l0aW9uPiBhbGxQb3NpdGlvblR5cGVzKE5vZGUqIG5vZGUs
IHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBWZWN0b3I8UG9zaXRpb24+IHBvc2l0aW9uczsKKyAg
ICBib29sIGNhbkNvbnRhaW5SYW5nZUVuZHBvaW50ID0gIW5vZGUgfHwgbm9kZS0+Y2FuQ29udGFp
blJhbmdlRW5kUG9pbnQoKTsKKyAgICBpZiAoY2FuQ29udGFpblJhbmdlRW5kcG9pbnQpCisgICAg
ICAgIHBvc2l0aW9ucy5hcHBlbmQobWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKG5vZGUsIG9m
ZnNldCkpOworICAgIGlmICghbm9kZSAmJiAhb2Zmc2V0KSB7CisgICAgICAgIHBvc2l0aW9ucy5h
cHBlbmQoeyBudWxscHRyLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciB9KTsKKyAg
ICAgICAgcG9zaXRpb25zLmFwcGVuZCh7IG51bGxwdHIsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0
ZXJBbmNob3IgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNhbkNvbnRhaW5SYW5nZUVu
ZHBvaW50ICYmICFvZmZzZXQpCisgICAgICAgICAgICBwb3NpdGlvbnMuYXBwZW5kKHsgbm9kZSwg
UG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbiB9KTsKKyAgICAgICAgaWYgKGNhbkNv
bnRhaW5SYW5nZUVuZHBvaW50ICYmIG9mZnNldCA9PSAobm9kZSA/IG5vZGUtPmxlbmd0aCgpIDog
MCkpCisgICAgICAgICAgICBwb3NpdGlvbnMuYXBwZW5kKHsgbm9kZSwgUG9zaXRpb246OlBvc2l0
aW9uSXNBZnRlckNoaWxkcmVuIH0pOworICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAg
aWYgKG9mZnNldCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNoaWxkQmVmb3JlID0gbm9k
ZS0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0IC0gMSkpCisgICAgICAgICAgICAgICAgICAgIHBv
c2l0aW9ucy5hcHBlbmQoeyBjaGlsZEJlZm9yZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFu
Y2hvciB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRvIGNoaWxkQWZ0ZXIg
PSBub2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQpKQorICAgICAgICAgICAgICAgIHBvc2l0
aW9ucy5hcHBlbmQoeyBjaGlsZEFmdGVyLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hv
ciB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcG9zaXRpb25zOworfQorCitjb25z
dGV4cHIgY29uc3QgY2hhciogdHlwZVN0cmluZ1N1ZmZpeChjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pCit7CisgICAgc3dpdGNoIChwb3NpdGlvbi5hbmNob3JUeXBlKCkpIHsKKyAgICBjYXNlIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46CisgICAgICAgIHJldHVy
biAiW2JlZm9yZS1jaGlsZHJlbl0iOworICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRl
ckNoaWxkcmVuOgorICAgICAgICByZXR1cm4gIlthZnRlci1jaGlsZHJlbl0iOworICAgIGNhc2Ug
UG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I6CisgICAgICAgIHJldHVybiAiW2JlZm9y
ZV0iOworICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcjoKKyAgICAgICAg
cmV0dXJuICJbYWZ0ZXJdIjsKKyAgICB9CisgICAgcmV0dXJuICJbaW52YWxpZF0iOworfQorCitz
dGF0aWMgU3RyaW5nIGpvaW4oY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvciwgQVNDSUlMaXRl
cmFsIHNlcGFyYXRvcikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYm9vbCBu
ZWVkU2VwYXJhdG9yID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdHJpbmcgOiB2ZWN0b3IpIHsK
KyAgICAgICAgaWYgKG5lZWRTZXBhcmF0b3IpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChz
ZXBhcmF0b3IpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOworICAgICAgICBuZWVk
U2VwYXJhdG9yID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
K30KKworc3RhdGljIENTdHJpbmcgYWxsUG9zaXRpb25UeXBlRmFpbHVyZXMoY29uc3QgUG9zaXRp
b24mIGEsIE5vZGUqIG5vZGVCLCB1bnNpZ25lZCBvZmZzZXRCLCBQYXJ0aWFsT3JkZXJpbmcgZXhw
ZWN0ZWRSZXN1bHQpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZmFpbHVyZXM7CisgICAgZm9yIChh
dXRvJiBiIDogYWxsUG9zaXRpb25UeXBlcyhub2RlQiwgb2Zmc2V0QikpIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBkb2N1bWVudE9yZGVyKGEsIGIpOworICAgICAgICBpZiAocmVzdWx0ICE9IGV4
cGVjdGVkUmVzdWx0KQorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKG1ha2VTdHJpbmcoIm9y
ZGVyKGIiLCB0eXBlU3RyaW5nU3VmZml4KGIpLCAiKT0iLCBzdHJpbmcocmVzdWx0KSwgIjxleHBl
Y3RlZDoiLCBzdHJpbmcoZXhwZWN0ZWRSZXN1bHQpLCAnPicpKTsKKyAgICAgICAgcmVzdWx0ID0g
ZG9jdW1lbnRPcmRlcihiLCBhKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAtZXhwZWN0ZWRSZXN1
bHQpCisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQobWFrZVN0cmluZygib3JkZXIoYiIsIHR5
cGVTdHJpbmdTdWZmaXgoYiksICIpPSIsIHN0cmluZyhyZXN1bHQpLCAiPGV4cGVjdGVkOiIsIHN0
cmluZygtZXhwZWN0ZWRSZXN1bHQpLCAnPicpKTsKKyAgICB9CisgICAgcmV0dXJuIGpvaW4oZmFp
bHVyZXMsICIsICJfcykudXRmOCgpOworfQorCitzdGF0aWMgQ1N0cmluZyBhbGxQb3NpdGlvblR5
cGVGYWlsdXJlcyhOb2RlKiBub2RlQSwgdW5zaWduZWQgb2Zmc2V0QSwgTm9kZSogbm9kZUIsIHVu
c2lnbmVkIG9mZnNldEIsIFBhcnRpYWxPcmRlcmluZyBleHBlY3RlZFJlc3VsdCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiBmYWlsdXJlczsKKyAgICBmb3IgKGF1dG8mIGEgOiBhbGxQb3NpdGlvblR5
cGVzKG5vZGVBLCBvZmZzZXRBKSkgeworICAgICAgICBmb3IgKGF1dG8mIGIgOiBhbGxQb3NpdGlv
blR5cGVzKG5vZGVCLCBvZmZzZXRCKSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBkb2N1
bWVudE9yZGVyKGEsIGIpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBleHBlY3RlZFJlc3Vs
dCkKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQobWFrZVN0cmluZygib3JkZXIoYSIs
IHR5cGVTdHJpbmdTdWZmaXgoYSksICIsYiIsIHR5cGVTdHJpbmdTdWZmaXgoYiksICIpPSIsIHN0
cmluZyhyZXN1bHQpLCAiPGV4cGVjdGVkOiIsIHN0cmluZyhleHBlY3RlZFJlc3VsdCksICc+Jykp
OworICAgICAgICAgICAgcmVzdWx0ID0gZG9jdW1lbnRPcmRlcihiLCBhKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gLWV4cGVjdGVkUmVzdWx0KQorICAgICAgICAgICAgICAgIGZhaWx1cmVz
LmFwcGVuZChtYWtlU3RyaW5nKCJvcmRlcihiIiwgdHlwZVN0cmluZ1N1ZmZpeChiKSwgIixhIiwg
dHlwZVN0cmluZ1N1ZmZpeChhKSwgIik9Iiwgc3RyaW5nKHJlc3VsdCksICI8ZXhwZWN0ZWQ6Iiwg
c3RyaW5nKC1leHBlY3RlZFJlc3VsdCksICc+JykpOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBqb2luKGZhaWx1cmVzLCAiIHwgIl9zKS51dGY4KCk7Cit9CisKK3N0YXRpYyBDU3RyaW5n
IGFsbFBvc2l0aW9uVHlwZUZhaWx1cmVzKE5vZGUmIG5vZGVBLCB1bnNpZ25lZCBvZmZzZXRBLCBO
b2RlJiBub2RlQiwgdW5zaWduZWQgb2Zmc2V0QiwgUGFydGlhbE9yZGVyaW5nIGV4cGVjdGVkUmVz
dWx0KQoreworICAgIHJldHVybiBhbGxQb3NpdGlvblR5cGVGYWlsdXJlcygmbm9kZUEsIG9mZnNl
dEEsICZub2RlQiwgb2Zmc2V0QiwgZXhwZWN0ZWRSZXN1bHQpOworfQorCitzdGF0aWMgQ1N0cmlu
ZyBhbGxQb3NpdGlvblR5cGVGYWlsdXJlcyhOb2RlKiBub2RlQSwgdW5zaWduZWQgb2Zmc2V0QSwg
Tm9kZSYgbm9kZUIsIHVuc2lnbmVkIG9mZnNldEIsIFBhcnRpYWxPcmRlcmluZyBleHBlY3RlZFJl
c3VsdCkKK3sKKyAgICByZXR1cm4gYWxsUG9zaXRpb25UeXBlRmFpbHVyZXMobm9kZUEsIG9mZnNl
dEEsICZub2RlQiwgb2Zmc2V0QiwgZXhwZWN0ZWRSZXN1bHQpOworfQorCitzdGF0aWMgQ1N0cmlu
ZyBhbGxQb3NpdGlvblR5cGVGYWlsdXJlcyhjb25zdCBQb3NpdGlvbiYgYSwgTm9kZSYgbm9kZUIs
IHVuc2lnbmVkIG9mZnNldEIsIFBhcnRpYWxPcmRlcmluZyBleHBlY3RlZFJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gYWxsUG9zaXRpb25UeXBlRmFpbHVyZXMoYSwgJm5vZGVCLCBvZmZzZXRCLCBleHBl
Y3RlZFJlc3VsdCk7Cit9CisKKyNkZWZpbmUgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMobm9kZUEs
IG9mZnNldEEsIG5vZGVCLCBvZmZzZXRCLCBleHBlY3RlZFJlc3VsdCkgXAorICAgIEVYUEVDVF9T
VFJFUShhbGxQb3NpdGlvblR5cGVGYWlsdXJlcyhub2RlQSwgb2Zmc2V0QSwgbm9kZUIsIG9mZnNl
dEIsIFBhcnRpYWxPcmRlcmluZzo6ZXhwZWN0ZWRSZXN1bHQpLmRhdGEoKSwgIiIpCisjZGVmaW5l
IFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTX0IocG9zaXRpb25BLCBub2RlQiwgb2Zmc2V0QiwgZXhw
ZWN0ZWRSZXN1bHQpIFwKKyAgICBFWFBFQ1RfU1RSRVEoYWxsUG9zaXRpb25UeXBlRmFpbHVyZXMo
cG9zaXRpb25BLCBub2RlQiwgb2Zmc2V0QiwgUGFydGlhbE9yZGVyaW5nOjpleHBlY3RlZFJlc3Vs
dCkuZGF0YSgpLCAiIikKKworc3RhdGljIFBvc2l0aW9uIG1ha2VQb3NpdGlvbkJlZm9yZShOb2Rl
JiBub2RlKQoreworICAgIHJldHVybiB7ICZub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9y
ZUFuY2hvciB9OworfQorCitzdGF0aWMgUG9zaXRpb24gbWFrZVBvc2l0aW9uQWZ0ZXIoTm9kZSYg
bm9kZSkKK3sKKyAgICByZXR1cm4geyAmbm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFu
Y2hvciB9OworfQorCitURVNUKERvY3VtZW50T3JkZXIsIFBvc2l0aW9ucykKK3sKKyAgICBhdXRv
IGRvY3VtZW50ID0gY3JlYXRlRG9jdW1lbnQoKTsKKyAgICBhdXRvJiBib2R5ID0gKmRvY3VtZW50
LT5ib2R5KCk7CisKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhudWxscHRyLCAwLCBudWxs
cHRyLCAwLCBFcXVpdmFsZW50KTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhudWxscHRy
LCAxLCBudWxscHRyLCAwLCBFcXVpdmFsZW50KTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBF
UyhudWxscHRyLCAxLCBudWxscHRyLCAxLCBFcXVpdmFsZW50KTsKKworICAgIFRFU1RfQUxMX1BP
U0lUSU9OX1RZUEVTKG51bGxwdHIsIDAsIGRvY3VtZW50LCAwLCBVbm9yZGVyZWQpOworICAgIFRF
U1RfQUxMX1BPU0lUSU9OX1RZUEVTKG51bGxwdHIsIDAsIGRvY3VtZW50LCAxLCBVbm9yZGVyZWQp
OworCisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoZG9jdW1lbnQsIDAsIGRvY3VtZW50LCAw
LCBFcXVpdmFsZW50KTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhkb2N1bWVudCwgMCwg
ZG9jdW1lbnQsIDEsIExlc3MpOworCisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoZG9jdW1l
bnQsIDAsIGJvZHksIDAsIExlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGJvZHks
IDAsIGRvY3VtZW50LCAxLCBMZXNzKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisgICAgVEVTVF9BTExf
UE9TSVRJT05fVFlQRVMoYm9keSwgMCwgYSwgMCwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJ
T05fVFlQRVMoYSwgMCwgYm9keSwgMSwgTGVzcyk7CisKKyAgICBhdXRvIGIgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBib2R5LmFwcGVuZENoaWxkKGIpOworICAgIFRF
U1RfQUxMX1BPU0lUSU9OX1RZUEVTKGJvZHksIDAsIGIsIDAsIExlc3MpOworICAgIFRFU1RfQUxM
X1BPU0lUSU9OX1RZUEVTKGJvZHksIDEsIGIsIDAsIExlc3MpOworICAgIFRFU1RfQUxMX1BPU0lU
SU9OX1RZUEVTKGIsIDAsIGJvZHksIDIsIExlc3MpOworCisgICAgYXV0byBjID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+YXBwZW5kQ2hpbGQoYyk7CisgICAgVEVT
VF9BTExfUE9TSVRJT05fVFlQRVMoYm9keSwgMCwgYywgMCwgTGVzcyk7CisgICAgVEVTVF9BTExf
UE9TSVRJT05fVFlQRVMoYm9keSwgMSwgYywgMCwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJ
T05fVFlQRVMoYywgMCwgYm9keSwgMiwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQ
RVMoYSwgMCwgYywgMCwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoYSwgMSwg
YywgMCwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoYiwgMCwgYywgMCwgTGVz
cyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoYywgMCwgYiwgMSwgTGVzcyk7CisKKyAg
ICBhdXRvIGQgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhLT5hcHBl
bmRDaGlsZChkKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhib2R5LCAwLCBkLCAwLCBM
ZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhkLCAwLCBib2R5LCAxLCBMZXNzKTsK
KyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhhLCAwLCBkLCAwLCBMZXNzKTsKKyAgICBURVNU
X0FMTF9QT1NJVElPTl9UWVBFUyhkLCAwLCBhLCAxLCBMZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJ
VElPTl9UWVBFUyhkLCAwLCBiLCAwLCBMZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBF
UyhkLCAwLCBiLCAxLCBMZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhkLCAwLCBj
LCAwLCBMZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhkLCAwLCBjLCAxLCBMZXNz
KTsKKworICAgIGF1dG8gZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAg
IEVYUEVDVF9VTk9SREVSRUQobWFrZVBvc2l0aW9uQmVmb3JlKGRvY3VtZW50KSwgbWFrZVBvc2l0
aW9uQmVmb3JlKGUpKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKG1ha2VQb3NpdGlvbkJlZm9yZShk
b2N1bWVudCksIG1ha2VQb3NpdGlvbkFmdGVyKGUpKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKG1h
a2VQb3NpdGlvbkFmdGVyKGRvY3VtZW50KSwgbWFrZVBvc2l0aW9uQmVmb3JlKGUpKTsKKyAgICBF
WFBFQ1RfVU5PUkRFUkVEKG1ha2VQb3NpdGlvbkFmdGVyKGRvY3VtZW50KSwgbWFrZVBvc2l0aW9u
QWZ0ZXIoZSkpOworCisgICAgYXV0byBmID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CisgICAgZS0+YXBwZW5kQ2hpbGQoZik7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMo
Ym9keSwgMSwgZiwgMCwgVW5vcmRlcmVkKTsKKworICAgIGF1dG8gZyA9IEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYy0+YXBwZW5kQ2hpbGQoZyk7CisgICAgVEVT
VF9BTExfUE9TSVRJT05fVFlQRVMoYm9keSwgMSwgZywgMCwgTGVzcyk7CisgICAgVEVTVF9BTExf
UE9TSVRJT05fVFlQRVMoYywgMCwgYywgMSwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05f
VFlQRVMoYywgMSwgYywgMiwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoYywg
MCwgYywgMiwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoYywgMCwgZywgMCwg
TGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoZywgMCwgYywgMSwgTGVzcyk7Cisg
ICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoZywgMCwgYywgMiwgTGVzcyk7CisKKyAgICBhdXRv
JiBoID0gKmctPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBF
Uyhib2R5LCAxLCBoLCAwLCBMZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhjLCAw
LCBoLCAwLCBMZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhoLCAwLCBjLCAxLCBM
ZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhoLCAwLCBjLCAyLCBMZXNzKTsKKwor
ICAgIEVYUEVDVF9FUVVJVkFMRU5UKG1ha2VQb3NpdGlvbkJlZm9yZShkb2N1bWVudCksIG1ha2VQ
b3NpdGlvbkJlZm9yZShkb2N1bWVudCkpOworICAgIEVYUEVDVF9FUVVJVkFMRU5UKG1ha2VQb3Np
dGlvbkFmdGVyKGRvY3VtZW50KSwgbWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpKTsKKyAgICBF
WFBFQ1RfTEVTUyhtYWtlUG9zaXRpb25CZWZvcmUoZG9jdW1lbnQpLCBtYWtlUG9zaXRpb25BZnRl
cihkb2N1bWVudCkpOworCisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVNfQihtYWtlUG9zaXRp
b25CZWZvcmUoZG9jdW1lbnQpLCBkb2N1bWVudCwgMCwgTGVzcyk7CisgICAgVEVTVF9BTExfUE9T
SVRJT05fVFlQRVNfQihtYWtlUG9zaXRpb25CZWZvcmUoZG9jdW1lbnQpLCBib2R5LCAwLCBMZXNz
KTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFU19CKG1ha2VQb3NpdGlvbkJlZm9yZShkb2N1
bWVudCksIGRvY3VtZW50LCAxLCBMZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFU19C
KG1ha2VQb3NpdGlvbkJlZm9yZShkb2N1bWVudCksIGJvZHksIDEsIExlc3MpOworICAgIFRFU1Rf
QUxMX1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9uQmVmb3JlKGRvY3VtZW50KSwgaCwgMCwg
TGVzcyk7CisKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFU19CKG1ha2VQb3NpdGlvbkFmdGVy
KGRvY3VtZW50KSwgZG9jdW1lbnQsIDAsIEdyZWF0ZXIpOworICAgIFRFU1RfQUxMX1BPU0lUSU9O
X1RZUEVTX0IobWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBkb2N1bWVudCwgMSwgR3JlYXRl
cik7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVNfQihtYWtlUG9zaXRpb25BZnRlcihkb2N1
bWVudCksIGJvZHksIDAsIEdyZWF0ZXIpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTX0Io
bWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBib2R5LCAxLCBHcmVhdGVyKTsKKyAgICBURVNU
X0FMTF9QT1NJVElPTl9UWVBFU19CKG1ha2VQb3NpdGlvbkFmdGVyKGRvY3VtZW50KSwgaCwgMCwg
R3JlYXRlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406755</attachid>
            <date>2020-08-17 17:21:10 -0700</date>
            <delta_ts>2020-08-20 09:59:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215551-20200817172110.patch</filename>
            <type>text/plain</type>
            <size>90737</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc4NTMyNDBlY2FhOTlm
NzMzZDZjZDE5OWJlZGYyZWQ4NmM1NTZhYS4uOGZiNjNlZmI4MTYwMWYzYjgzNjcxMjc1NDA1MTI4
ZjMwZjA2ODcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMCBAQAorMjAyMC0wOC0xNyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGRvY3VtZW50T3Jk
ZXIgZnVuY3Rpb24sIHN0YXJ0IHJlZmFjdG9yaW5nIHRvIHVzZSBpdCBpbnN0ZWFkIG9mIFJhbmdl
Ojpjb21wYXJlIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE1NTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1ha2UgVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmggUHJpdmF0ZSBzbworICAgICAgICB3ZSBjYW4gdXNlIGl0
IGZyb20gdW5pdCB0ZXN0cy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OnRleHQgY29uc3QpOiBUd2VhayBjb2RlIHNsaWdodGx5LgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGV4dFJhbmdlIGNvbnN0KTogQWx3
YXlzIHVzZSB0aGUgbmF0aXZlCisgICAgICAgIHRleHQgY29udHJvbCdzIGlkZWEgb2YgdGhlIHNl
bGVjdGVkIHRleHQgcmFuZ2UuIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIHRoZQorICAgICAgICBk
b2N1bWVudC1iYXNlZCByYW5nZSB3aXRoIGFueSBvZiB0aGVzZSBuYXRpdmUgdGV4dCBjb250cm9s
cy4gVGhlIGNoZWNrIGJlZm9yZSB3b3VsZAorICAgICAgICBhbG1vc3QgYWx3YXlzIHJldHVybiB0
cnVlLCBleGNlcHQgZm9yIHVudXN1YWwgY2FzZXMsIHBhcnRpY3VsYXJseSBjb21ibyBib3gsIHdo
aWNoCisgICAgICAgIHJldHVybnMgZmFsc2UgZm9yIGlzQVJJQVRleHRDb250cm9sLiBXZSBtYXkg
d2FudCB0byBjaGFuZ2UgaXNBUklBVGV4dENvbnRyb2wgdG8KKyAgICAgICAgcmV0dXJuIHRydWUg
Zm9yIGNvbWJvIGJveCwgYnV0IGl0J3Mgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBmaXguIFdpdGhv
dXQgdGhpcyBjaGFuZ2UsCisgICAgICAgIGEgdGVzdCBpbnZvbHZpbmcgYSBjb21ibyBib3ggd2Fz
IGZhaWxpbmcgYmVjYXVzZSBjaGFuZ2VzIGNhdXNlZAorICAgICAgICBkb2N1bWVudEJhc2VkU2Vs
ZWN0ZWRUZXh0UmFuZ2UgdG8gbm8gbG9uZ2VyIGFjY2lkZW50YWxseSBkbyB0aGUgcmlnaHQgdGhp
bmcuCisKKyAgICAgICAgKiBkb20vQm91bmRhcnlQb2ludC5oOiBBZGRlZCAhPSBhbmQgZG9jdW1l
bnRPcmRlci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBFeHBvcnQgYWxsb2NhdGlvbiBm
dW5jdGlvbiBhbmQgY29uc3RydWN0b3IgIHNvIHdlIGNhbiBhbGxvY2F0ZQorICAgICAgICBpbiBh
IHVuaXQgdGVzdC4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbm5lY3RlZEluU2FtZVRyZWVTY29wZSk6IFJlbmFtZWQgZnJvbSBhcmVOb2Rlc0Nvbm5lY3Rl
ZEluU2FtZVRyZWVTY29wZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UgYWJvdmUuCisgICAgICAgIChXZWJD
b3JlOjpkZXB0aCk6IENoYW5nZWQgdG8gdGFrZSBhIGNvbnN0JiBhbmQgdG8gd2FsayBhY3Jvc3Nz
IHNoYWRvdyBob3N0IGJvdW5kYXJpZXMsCisgICAgICAgIHNvIHRoaXMgY2FuIGJlIHVzZWQgaW4g
YWxnb3JpdGhtcyB0aGF0IGFyZSBpbnRlbmRlZCB0byB3b3JrIG9uIHRoZSBjb21iaW5lZCB0cmVl
LgorICAgICAgICBIYXMgbm8gZWZmZWN0IHdoZW4gY2FsbGVkIG9uIG5vZGVzIHRoYXQgYXJlIG5v
dCBpbiBhIHNoYWRvdyB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uSW5jbHVzaXZlQW5j
ZXN0b3JBbmRDaGlsZHJlbik6IFJlZmFjdG9yZWQgc28gdGhpcyBjYW4gYmUgdXNlZCBieQorICAg
ICAgICBjYWxsZXJzIHRoYXQgbmVlZCB0byBrbm93IHRoZSBkaXN0aW5jdCBhbmNlc3RvciBjaGls
ZHJlbiBhcyB3ZWxsIGFzIHRoZSBjb21tb24KKyAgICAgICAgYW5jZXN0b3IuIEFsc28gcmV2aXNl
ZCBpdCB0byB3b3JrIGFjcm9zcyBzaGFkb3cgdHJlZSBib3VuZGFyaWVzLgorICAgICAgICAoV2Vi
Q29yZTo6Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IpOiBVcGRhdGVkIHRvIGNhbGwgY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbi4KKyAgICAgICAgKFdlYkNvcmU6OmlzU2libGluZ1N1
YnNlcXVlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBBZGRl
ZC4gSW1wbGVtZW50ZWQgdXNpbmcgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbiBh
bmQKKyAgICAgICAgaXNTaWJsaW5nU3Vic2VxdWVudC4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBV
cGRhdGVkIGZvciBhYm92ZS4gQWxzbyBhZGRlZCBQYXJ0aWFsT3JkZXJpbmcgY2xhc3MsIGEgY29t
cGF0aWJsZQorICAgICAgICBzdWJzZXQgb2YgQysrMjAncyBzdGQ6OnBhcnRpYWxfb3JkZXJpbmcs
IGZvciByZXR1cm4gdmFsdWUgZm9yIGRvY3VtZW50T3JkZXIuCisKKyAgICAgICAgKiBkb20vUG9z
aXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmNvbXB1dGVPZmZzZXRJbkNv
bnRhaW5lck5vZGUgY29uc3QpOiBSZW1vdmVkIGNsYW1waW5nIHRoZQorICAgICAgICByZXN1bHQg
dG8gdGhlIGxlbmd0aCBvZiB0aGUgY29udGFpbmVyIG5vZGU7IG5vdCBuZWVkZWQuCisgICAgICAg
IChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlvdXMgY29uc3QpOiBVcGRhdGVkIGZvciBuYW1lIGNo
YW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpuZXh0IGNvbnN0KTogVXBkYXRlZCBm
b3IgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBzdHJlYW0gY29u
c3QpOiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
Ojpkb3duc3RyZWFtIGNvbnN0KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpjb21tb25JbmNsdXNpdmVBbmNlc3Rvcik6IFJlbmFtZWQgZnJvbSBjb21tb25TaGFk
b3dJbmNsdWRpbmdBbmNlc3RvcgorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB0aGUgc2FtZSBh
cyB0aGUgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IgdGhhdCB0YWtlcyB0d28gbm9kZXM7CisgICAg
ICAgIHRoZXkgbm93IGJvdGggdGFrZSBzaGFkb3cgdHJlZXMgaW50byBhY2NvdW50LgorICAgICAg
ICAoV2ViQ29yZTo6bWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKTogQWRkZWQuIENsZWFyZXIg
d2F5IHRvIGNvbnN0cnVjdAorICAgICAgICBwb3NpdGlvbnMgZnJvbSBjb250YWluZXJzIGFuZCBv
ZmZzZXRzLiBBbiBhbHRlcm5hdGl2ZSB0byBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uCisg
ICAgICAgIGZvciBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIHRoZSBkZXByZWNhdGVkIGxlZ2Fj
eSBiZWhhdmlvci4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRp
b24pOiBSZW5hbWVkIGZyb20gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uLgorICAgICAgICBB
ZGRpbmcgdGhlIHdvcmQgImRlcHJlY2F0ZWQiIHRvIGJlIGNsZWFyZXIgdGhhdCB0aGlzIGlzIG5v
dCBqdXN0ICJsZWdhY3kiIGJ1dCBhbHNvCisgICAgICAgIHNvbWV0aGluZyB3ZSBhcmUgdHJ5aW5n
IHRvIGdldCByaWQgb2YuIENoYW5naW5nIGZyb20gImNyZWF0ZSIgdG8gIm1ha2UiIGJlY2F1c2UK
KyAgICAgICAgdGhpcyBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgb24gdGhlIGhlYXAuCisgICAg
ICAgIChXZWJDb3JlOjpkb2N1bWVudE9yZGVyKTogQWRkZWQuIFN0aWxsIHRvIGRvOiBtb3JlIG9w
dGltaXplZCBpbXBsZW1lbnRhdGlvbiB3aGVuCisgICAgICAgIHdlIGNhbiBjb21wYXJlIHR3byBw
b3NpdGlvbnMgd2l0aG91dCBjb21wdXRpbmcgbm9kZSBvZmZzZXRzLgorCisgICAgICAgICogZG9t
L1Bvc2l0aW9uLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6bWluT2Zm
c2V0Rm9yTm9kZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6
IFVzZSBkb2N1bWVudE9yZGVyIGluc3RlYWQgb2YKKyAgICAgICAgZG9jdW1lbnRPcmRlckNvbXBh
cmF0b3IuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJl
UmFuZ2VzRXF1YWwpOiBSZXdyb3RlIHRvIG5vdCB1c2UgUG9zaXRpb24uCisgICAgICAgIChXZWJD
b3JlOjpyYW5nZXNPdmVybGFwKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6ZXhwYW5kKTogUmV3cm90ZSB0byBub3QgdXNlIFJhbmdlOjpzdGFydC9l
bmRQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorCisg
ICAgICAgICogZG9tL1JhbmdlLmg6IFJlbW92ZWQgbm93LXVudXNlZCBSYW5nZTo6c3RhcnQvZW5k
UG9zaXRpb24sIGRvY3VtZW50T3JkZXJDb21wYXJhdG9yLAorICAgICAgICBhbmQgVGV4dFN0cmVh
bSBvcGVyYXRvcnMuCisKKyAgICAgICAgKiBkb20vUmFuZ2VCb3VuZGFyeVBvaW50Lmg6IFJlbW92
ZWQgbm93LXVudXNlZCBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnRvUG9zaXRpb24uCisgICAgICAgIEFk
ZGVkIG1ha2VCb3VuZGFyeVBvaW50IGZ1bmN0aW9uIHRvIGNvbnZlcnQgUmFuZ2VCb3VuZGFyeVBv
aW50IGludG8gQm91bmRhcnlQb2ludC4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppc09mZnNldEJlZm9yZUNoaWxkKTogQWRkZWQuIEZvciB1c2Ug
YnkgZG9jdW1lbnRPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBBZGRl
ZC4KKworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNoYXJhY3RlckNvdW50KTogVXNlIGRvY3VtZW50T3JkZXIgaW5zdGVhZCBvZgorICAgICAg
ICBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJlVmlzaWJsZVBvc2l0aW9uc0lu
U2FtZVRyZWVTY29wZSk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlLgorCisgICAgICAgICogZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uaDogVXNlIGFzc2lnbm1lbnQgaW5zdGVlZCBvZiBjYWxsaW5n
IGNsZWFyLAorICAgICAgICB0byBwb3NzaWJseSBwcmVwYXJlIHRvIGdldCByaWQgb2YgUG9zaXRp
b246OmNsZWFyIGluIHRoZSBmdXR1cmUuCisgICAgICAgIEFkZGVkIGEgZG9jdW1lbnRPUmRlciBm
dW5jdGlvbiB0aGF0IHRha2VzIHR3byB2aXNpYmxlIHBvc2l0aW9ucy4KKworICAgICAgICAqIGVk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNo
ZXM6OmNhY2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQpOiBVc2UKKyAgICAgICAgY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IgaW5zdGVhZCBvZiBjb21tb25TaGFkb3dJbmNsdWRpbmdBbmNl
c3Rvci4KKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKTogRGl0dG8uCisKKyAg
ICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5oOiBFeHBvcnQgY3JlYXRlIGZ1bmN0aW9uIHNv
IGl0IGNhbiB1c2VkIGluIHVuaXQgdGVzdHMuCisgICAgICAgICogaHRtbC9IVE1MRGl2RWxlbWVu
dC5oOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxIdG1sRWxlbWVudC5oOiBEaXR0by4KKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlKTogQWRkZWQgc28gaXQgY2FuIGJlIHVzZWQgaW4g
dW5pdCB0ZXN0cy4KKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDogRGl0dG8u
IEFsc28gZXhwb3J0IHRoZSBpbm5lclRleHRFbGVtZW50IGZ1bmN0aW9uCisgICAgICAgIHNvIGl0
IGNhbiBiZSB1c2VkIGluIHVuaXQgdGVzdHMuCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFkZFJhbmdlKTogVXNlIG1h
a2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24gZGlyZWN0bHkKKyAgICAgICAgcmF0aGVyIHRoYW4g
dXNpbmcgUmFuZ2U6OnN0YXJ0L2VuZFBvc2l0aW9uLiBUaGlzIHdhcyB0aGUgb25seSBwbGFjZSBp
biBXZWJDb3JlCisgICAgICAgIHN0aWxsIHVzaW5nIFJhbmdlOjpzdGFydC9lbmRQb3NpdGlvbiBh
bmQgb3ZlciB0aW1lIHdlIHdvdWxkIGxpa2UgdG8gbW92ZSBmcm9tCisgICAgICAgIG1ha2VEZXBy
ZWNhdGVkTGVnYWN5UG9zaXRpb24gdG8gbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uLCBzbyBp
dCdzIGdvb2QgdG8KKyAgICAgICAgaGF2ZSBpdCBiZSBleHBsaWNpdCBoZXJlIHJhdGhlciB0aGFu
IGhpZGRlbiBpbnNpZGUgdGhlIFJhbmdlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjpjb250YWluc05vZGUgY29uc3QpOiBBZGRlZCBhIGNoZWNrIG9mIGNvbnRhaW5pbmdT
aGFkb3dSb290LgorICAgICAgICBUaGlzIHByZXNlcnZlcyB0aGUgb2xkIGJlaGF2aW9yLiBCZWZv
cmUsIGNvbnN0cnVjdGluZyB0aGUgcmFuZ2UgcmVzdWx0ZWQgaW4KKyAgICAgICAgYSBjb2xsYXBz
ZWQgcmFuZ2Ugd2hlbiB0aGUgc2hhZG93IHRyZWUgd2FzIGludm9sdmVkLiBUaGlzIGlzIGEgbW9y
ZSBkaXJlY3Qgd2F5CisgICAgICAgIHRvIGFjaGlldmUgdGhlIHNhbWUgcmVzdWx0LgorCisgICAg
ICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VSYW5nZXMpOiBV
c2UgZG9jdW1lbnRPcmRlciBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIEV2
ZW50dWFsbHkgd2Ugd2lsbCBkZWxldGUgY29tcGFyZVBvc2l0aW9ucy4KKwogMjAyMC0wOC0xNyAg
S2FybCBSYWNrbGVyICA8cmFja2xlckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cmV2ZXJ0aW5nIHIyNjU2MDMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRhZWYwODgxNTRhN2Q3MGM1ZmE1OTA0NTlj
ZjM5MWMzYTE1Y2VlMGQuLjQxY2JhY2UzZjJkZjljNWExMGIzNDNlYTA4YWE5MjgzNTg0ZTE0OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjAtMDgtMTcgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBkb2N1bWVudE9yZGVyIGZ1bmN0aW9uLCBz
dGFydCByZWZhY3RvcmluZyB0byB1c2UgaXQgaW5zdGVhZCBvZiBSYW5nZTo6Y29tcGFyZSBmdW5j
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW06CisgICAgICAg
ICgtW1dLRE9NUmFuZ2UgcmFuZ2VCeUV4cGFuZGluZ1RvV29yZEJvdW5kYXJ5QnlDaGFyYWN0ZXJz
OmluRGlyZWN0aW9uOl0pOgorICAgICAgICBVc2UgbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlv
biBpbnN0ZWFkIG9mIFJhbmdlOjpzdGFydC9lbmRQb3NpdGlvbi4KKyAgICAgICAgVGhpcyB3YXMg
dGhlIG9ubHkgcGxhY2UgaW4gdGhlIFdlYktpdCBmcmFtZXdvcmsgc3RpbGwgdXNpbmcKKyAgICAg
ICAgUmFuZ2U6OnN0YXJ0L2VuZFBvc2l0aW9uIGFuZCBvdmVyIHRpbWUgd2Ugd291bGQgbGlrZSB0
byBtb3ZlIGZyb20KKyAgICAgICAgbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbiB0byBtYWtl
Q29udGFpbmVyT2Zmc2V0UG9zaXRpb24sIHNvIGl0J3MgZ29vZAorICAgICAgICB0byBoYXZlIGl0
IGJlIGV4cGxpY2l0IGhlcmUgcmF0aGVyIHRoYW4gaGlkZGVuIGluc2lkZSB0aGUgUmFuZ2UgY2xh
c3MuCisKIDIwMjAtMDgtMTcgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtDb2NvYV0gQXZvaWQgd2FpdGluZyBmb3IgTGF1bmNoIFNlcnZpY2VzIG9uIGV2
ZXJ5IGxvYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwppbmRleCBlNDhiYmI4NDcxZDhlZjcz
MzU2NTRiMTI1MTljMmNmMDIzOTEzNWJlLi43YmQ1MTY1MmJkODkzNDBhYzk2NDRmYWRlNmQ3ZGYz
NmQ4YmMyNWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMjAtMDgtMTcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENy
ZWF0ZSBkb2N1bWVudE9yZGVyIGZ1bmN0aW9uLCBzdGFydCByZWZhY3RvcmluZyB0byB1c2UgaXQg
aW5zdGVhZCBvZiBSYW5nZTo6Y29tcGFyZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTU1MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBv
c2l0aW9uLm1tOgorICAgICAgICAoLVtET01SYW5nZSBzdGFydFBvc2l0aW9uXSk6IFJld3JvdGUg
dG8gbm90IHVzZSBSYW5nZTo6c3RhcnRQb3NpdGlvbi4KKyAgICAgICAgKC1bRE9NUmFuZ2UgZW5k
UG9zaXRpb25dKTogUmV3cm90ZSB0byBub3QgdXNlIFJhbmdlOjplbmRQb3NpdGlvbi4KKwogMjAy
MC0wOC0xMyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBtYWNDYXRhbHlzdDogR3JhbnRpbmcgbG9jYXRpb24gcGVybWlzc2lvbiBkb2Vzbid0IGFsbG93
IGdlb2xvY2F0aW9uIGFjY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDg3MGEz
OTRkOWE1MjI2Nzc0OTJlMTJlZmU1ZTljNjQ1ZDc5NGQzOTcuLmY2NjNiODUyYTVkZWQ5NmUyYmQz
YjEyYmIyNjUxZjlhNWMwOGIzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMC0wOC0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ3JlYXRlIGRvY3VtZW50T3JkZXIgZnVuY3Rpb24sIHN0YXJ0IHJlZmFjdG9yaW5n
IHRvIHVzZSBpdCBpbnN0ZWFkIG9mIFJhbmdlOjpjb21wYXJlIGZ1bmN0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NTUxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnRJbnNlcnRGb3JTdHJpbmc6cmVwbGFjaW5n
UmFuZ2U6YmVmb3JlU3RyaW5nOmFmdGVyU3RyaW5nOl0pOgorICAgICAgICBSZXdyaXRlIHRvIHVz
ZSBtYWtlU2ltcGxlUmFuZ2UgYW5kIG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbi4gU2ltcGxp
ZmllcworICAgICAgICB0aGUgbnVsbCBjaGVja3MuIFdvdWxkIGxvdmUgdG8gcmVtb3ZlIHRoZSBm
dW5jdGlvbiBidXQgYXQgdGhpcyB0aW1lIGl0J3MKKyAgICAgICAgc3RpbGwgdXNlZCBieSBBcHBs
ZSdzIE1haWwgYXBwIChhbGJlaXQgaW4gYSBwZWN1bGlhciB3YXksIGFsd2F5cyBwYXNzaW5nIGEK
KyAgICAgICAgY29uc3RhbnQgc3RyaW5nKS4KKwogMjAyMC0wOC0xNyAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIERyYWdBcHBsaWNhdGlvbkZs
YWdzIGFmdGVyIHN3aXRjaCB0byBPcHRpb25TZXQ8PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJjNjg4MWJlODIwOGUyMGQzM2Uy
NDZkMjU2ZTc2OWJmZDI3ZjRmMGEuLjMyNDEyZTNiNGMzOWFiN2NkYmFhOGMxMTZkYTA5MGZjYzYz
ZjI4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTQwNSw3ICs0MDUsNyBAQAogCQkxNDFEQzA1MzE2NDgzNEI5MDAzNzFFNUEg
LyogTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQxREMwNEQxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFJlY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDFEQzA1NDE2NDgzNEI5
MDAzNzFFNUEgLyogTGF5b3V0U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQxREMwNEUxNjQ4MzRCOTAwMzcxRTVBIC8qIExheW91dFNpemUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDIwMTFC
NzBBMDAzMTMzMDA4MzAzRjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDIwMTFCNTBBMDAzMTMzMDA4MzAz
RjkgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQyQjk3Q0ExMzEzODk0MzAwOEJFRjRCIC8qIFRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQyQjk3QzgxMzEzODk0MzAwOEJFRjRCIC8qIFRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oICovOyB9OworCQkxNDJCOTdDQTEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDJCOTdDODEzMTM4OTQzMDA4QkVGNEIgLyogVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTQzMkU4NDcwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzMkU4NDYwQzUxNDkzODAwQjE1MDBG
IC8qIEdDQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0NDc2QUE4MTVEQzRCQjEwMDMwNURCMiAvKiBXcml0aW5nTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NzZBQTcxNURD
NEJCMTAwMzA1REIyIC8qIFdyaXRpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0OUUyNEMxMDdENEE4NDAwQjU3OTNGIC8qIEpTQ2Fs
bGJhY2tEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDQ5RTI0QTEwN0Q0QTg0MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuaCAqLzsgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAKaW5kZXggNzgxNTFiYzg4YTdhNThmYWVlZWFlMDBiMmFmNzZiYTlhODg4OWJm
Yi4uYzhmMzAwMzdkNmE0ZDNhZWFiOThjNzY3OGQyMDFhMGUxYTAyZDY2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAKQEAgLTE5NDEsMTYgKzE5NDEsMTMgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojp0ZXh0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgTm9kZSog
bm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYgKCFpczxFbGVtZW50
Pihub2RlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKGlzTmF0aXZlVGV4
dENvbnRyb2woKSAmJiBpczxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKm5vZGUpKQogICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpub2RlKS52
YWx1ZSgpOwogCi0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKS0+aW5uZXJU
ZXh0KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5pbm5lclRleHQoKTsK
IH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAwZDgzOGQ1NzQ4MWZiNDdiZDlmZTI5ZDk3YTVkYzA5
YWIxZDhjYWI2Li4wM2M2OTJjNWQ3MGZhODljYzc5ODI0MmNkNGE0ZGE0ZDEzZDMyOWUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKQEAgLTE2MTMsMTcgKzE2MTMsMTYgQEAgVmlzaWJsZVNlbGVjdGlv
biBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb24oKSBjb25zdAogUGxhaW5UZXh0
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25z
dAogewogICAgIEFTU0VSVChpc1RleHRDb250cm9sKCkpOwotICAgIAorCiAgICAgaWYgKGlzUGFz
c3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKLSAgICAKLSAg
ICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSA9IGFyaWFSb2xlQXR0cmlidXRlKCk7Ci0gICAg
Ly8gVXNlIHRoZSB0ZXh0IGNvbnRyb2wgbmF0aXZlIHJhbmdlIGlmIGl0J3MgYSBuYXRpdmUgb2Jq
ZWN0IGFuZCBpdCBoYXMgbm8gQVJJQSByb2xlIChvciBoYXMgYSB0ZXh0IGJhc2VkIEFSSUEgcm9s
ZSkuCi0gICAgaWYgKGlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAoYXJpYVJvbGUgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OlVua25vd24gfHwgaXNBUklBVGV4dENvbnRyb2woKSkpIHsKLSAgICAgICAg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sID0gZG93bmNhc3Q8UmVuZGVy
VGV4dENvbnRyb2w+KCptX3JlbmRlcmVyKS50ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAg
ICAvLyBVc2UgdGhlIHRleHQgY29udHJvbCBuYXRpdmUgcmFuZ2UgaWYgaXQncyBhIG5hdGl2ZSBv
YmplY3QuCisgICAgaWYgKGlzTmF0aXZlVGV4dENvbnRyb2woKSkgeworICAgICAgICBhdXRvJiB0
ZXh0Q29udHJvbCA9IGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sPigqbV9yZW5kZXJlcikudGV4
dEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UodGV4
dENvbnRyb2wuc2VsZWN0aW9uU3RhcnQoKSwgdGV4dENvbnRyb2wuc2VsZWN0aW9uRW5kKCkgLSB0
ZXh0Q29udHJvbC5zZWxlY3Rpb25TdGFydCgpKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4g
ZG9jdW1lbnRCYXNlZFNlbGVjdGVkVGV4dFJhbmdlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRh
cnlQb2ludC5oCmluZGV4IGZkYmUxZWFhYjcyNGVmMGJiY2MyM2NmYmY0ZjUzY2ViN2M3ZmQ4ZDku
LmJkZjFlODgwMDVlODVjNGM2NjQ0NjFiZTY1OWY5NjUyYzY3OTUyNDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0JvdW5kYXJ5UG9pbnQuaApAQCAtMzksNiArMzksOCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7
CiB9OwogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5k
YXJ5UG9pbnQmKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3Qg
Qm91bmRhcnlQb2ludCYpOworV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50
T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIAogV0VC
Q09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5UG9pbnRCZWZv
cmVOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1h
a2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXgg
NDFjOWZlYzYxZTI4YmFjMzg3Y2NjN2I5YjMzZjVmZDBkOGYzNDFlMi4uZjBjOGEzNGVmMzNlYmMw
NmRkNTcyOTYyMDg1MGZhMTE5NWNiNzUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTMzOCw3
ICszMzgsNyBAQCBjbGFzcyBEb2N1bWVudAogICAgICwgcHVibGljIFN1cHBsZW1lbnRhYmxlPERv
Y3VtZW50PgogICAgICwgcHVibGljIExvZ2dlcjo6T2JzZXJ2ZXIKICAgICAsIHB1YmxpYyBDYW52
YXNPYnNlcnZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChEb2N1bWVudCk7CisgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBPUlQoRG9jdW1lbnQsIFdFQkNPUkVfRVhQT1JUKTsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvY3VtZW50PiBjcmVhdGUoY29uc3QgVVJMJik7CiAg
ICAgc3RhdGljIFJlZjxEb2N1bWVudD4gY3JlYXRlTm9uUmVuZGVyZWRQbGFjZWhvbGRlcihGcmFt
ZSYsIGNvbnN0IFVSTCYpOwpAQCAtMTU5Myw3ICsxNTkzLDcgQEAgcHVibGljOgogCiBwcm90ZWN0
ZWQ6CiAgICAgZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0gMSwgTm9uUmVu
ZGVyZWRQbGFjZWhvbGRlciA9IDEgPDwgMSB9OwotICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3Qg
VVJMJiwgRG9jdW1lbnRDbGFzc0ZsYWdzID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVk
IGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQoRnJh
bWUqLCBjb25zdCBVUkwmLCBEb2N1bWVudENsYXNzRmxhZ3MgPSBEZWZhdWx0RG9jdW1lbnRDbGFz
cywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKIAogICAgIHZvaWQgY2xlYXJYTUxW
ZXJzaW9uKCkgeyBtX3htbFZlcnNpb24gPSBTdHJpbmcoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5k
ZXggYzU2NjBmY2JlYzFlNmVlYmJlODVmNTczYzQ0Zjg0MjQ3NzMzZGYwMy4uZGI0NGJiN2ZhN2Ji
MTU3OTg4NDNiODIzN2UxNDY5ZDNlMWFjNGNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMzIsOSAr
MzIsNiBAQAogI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5j
ZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRlICJDb250ZW50Q2hhbmdlT2JzZXJ2ZXIu
aCIKLSNlbmRpZgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgpAQCAtODcsNiArODQsMTAg
QEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJD
b250ZW50Q2hhbmdlT2JzZXJ2ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChOb2RlKTsKQEAgLTE2MjEsMTQgKzE2MjIsMTMg
QEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBjb21wYXJlRGV0YWNoZWRFbGVtZW50c1Bv
c2l0aW9uKE5vZGUmIGZpcnN0Tm9kZSwgTm8KICAgICByZXR1cm4gTm9kZTo6RE9DVU1FTlRfUE9T
SVRJT05fRElTQ09OTkVDVEVEIHwgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJ
T05fU1BFQ0lGSUMgfCBkaXJlY3Rpb247CiB9CiAKLWJvb2wgYXJlTm9kZXNDb25uZWN0ZWRJblNh
bWVUcmVlU2NvcGUoY29uc3QgTm9kZSogYSwgY29uc3QgTm9kZSogYikKK2Jvb2wgY29ubmVjdGVk
SW5TYW1lVHJlZVNjb3BlKGNvbnN0IE5vZGUqIGEsIGNvbnN0IE5vZGUqIGIpCiB7Ci0gICAgaWYg
KCFhIHx8ICFiKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gTm90ZSB0aGF0IHdlIGF2
b2lkIGNvbXBhcmluZyBBdHRyIG5vZGVzIGhlcmUsIHNpbmNlIHRoZXkgcmV0dXJuIGZhbHNlIGZy
b20gaXNDb25uZWN0ZWQoKSBhbGwgdGhlIHRpbWUgKHdoaWNoIHNlZW1zIGxpa2UgYSBidWcpLgot
ICAgIHJldHVybiBhLT5pc0Nvbm5lY3RlZCgpID09IGItPmlzQ29ubmVjdGVkKCkgJiYgJmEtPnRy
ZWVTY29wZSgpID09ICZiLT50cmVlU2NvcGUoKTsKKyAgICByZXR1cm4gYSAmJiBiICYmIGEtPmlz
Q29ubmVjdGVkKCkgPT0gYi0+aXNDb25uZWN0ZWQoKSAmJiAmYS0+dHJlZVNjb3BlKCkgPT0gJmIt
PnRyZWVTY29wZSgpOwogfQogCisvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBzbyBpdCBjYWxscyBk
b2N1bWVudE9yZGVyaW5nLCBleGNlcHQgZm9yIGFueSBleG90aWMgaW5lZmZpY2llbnQgdGhpbmdz
IHRoYXQgYXJlIG5lZWRlZCBvbmx5IGhlcmUuCiB1bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21wYXJl
RG9jdW1lbnRQb3NpdGlvbihOb2RlJiBvdGhlck5vZGUpCiB7CiAgICAgaWYgKCZvdGhlck5vZGUg
PT0gdGhpcykKQEAgLTE2NzQsNyArMTY3NCw3IEBAIHVuc2lnbmVkIHNob3J0IE5vZGU6OmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKE5vZGUmIG90aGVyTm9kZSkKIAogICAgIC8vIElmIG9uZSBub2Rl
IGlzIGluIHRoZSBkb2N1bWVudCBhbmQgdGhlIG90aGVyIGlzIG5vdCwgd2UgbXVzdCBiZSBkaXNj
b25uZWN0ZWQuCiAgICAgLy8gSWYgdGhlIG5vZGVzIGhhdmUgZGlmZmVyZW50IG93bmluZyBkb2N1
bWVudHMsIHRoZXkgbXVzdCBiZSBkaXNjb25uZWN0ZWQuCi0gICAgaWYgKCFhcmVOb2Rlc0Nvbm5l
Y3RlZEluU2FtZVRyZWVTY29wZShzdGFydDEsIHN0YXJ0MikpCisgICAgaWYgKCFjb25uZWN0ZWRJ
blNhbWVUcmVlU2NvcGUoc3RhcnQxLCBzdGFydDIpKQogICAgICAgICByZXR1cm4gY29tcGFyZURl
dGFjaGVkRWxlbWVudHNQb3NpdGlvbigqdGhpcywgb3RoZXJOb2RlKTsKIAogICAgIC8vIFdlIG5l
ZWQgdG8gZmluZCBhIGNvbW1vbiBhbmNlc3RvciBjb250YWluZXIsIGFuZCB0aGVuIGNvbXBhcmUg
dGhlIGluZGljZXMgb2YgdGhlIHR3byBpbW1lZGlhdGUgY2hpbGRyZW4uCkBAIC0yNjIzLDMyICsy
NjIzLDc0IEBAIHZvaWQqIE5vZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKICAgICByZXR1cm4g
Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKIH0KIAot
c3RhdGljIHNpemVfdCBkZXB0aChOb2RlJiBub2RlKQorc3RhdGljIHNpemVfdCBkZXB0aChjb25z
dCBOb2RlJiBub2RlKQogewogICAgIHNpemVfdCBkZXB0aCA9IDA7CiAgICAgYXV0byBhbmNlc3Rv
ciA9ICZub2RlOwotICAgIHdoaWxlICgoYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgp
KSkKKyAgICB3aGlsZSAoKGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE9yU2hhZG93SG9zdE5v
ZGUoKSkpCiAgICAgICAgICsrZGVwdGg7CiAgICAgcmV0dXJuIGRlcHRoOwogfQogCi1SZWZQdHI8
Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYgYikKK3N0cnVjdCBB
bmNlc3RvckFuZENoaWxkcmVuIHsKKyAgICBjb25zdCBOb2RlKiBjb21tb25BbmNlc3RvcjsKKyAg
ICBjb25zdCBOb2RlKiBkaXN0aW5jdEFuY2VzdG9yQTsKKyAgICBjb25zdCBOb2RlKiBkaXN0aW5j
dEFuY2VzdG9yQjsKK307CitzdGF0aWMgQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25JbmNsdXNp
dmVBbmNlc3RvckFuZENoaWxkcmVuKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIpCiB7CiAg
ICAgLy8gVGhpcyBmaXJzdCBjaGVjayBpc24ndCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzLCBidXQg
aXQgaXMgY2hlYXAgYW5kIGxpa2VseSB0byBiZQogICAgIC8vIGNvbW1vbiBlbm91Z2ggdG8gYmUg
d29ydGggb3B0aW1pemluZyBzbyB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgdG8gdGhlIHJvb3QuCiAg
ICAgaWYgKCZhID09ICZiKQotICAgICAgICByZXR1cm4gJmE7CisgICAgICAgIHJldHVybiB7ICZh
LCBudWxscHRyLCBudWxscHRyIH07CiAgICAgYXV0byBbZGVwdGhBLCBkZXB0aEJdID0gc3RkOjpt
YWtlX3R1cGxlKGRlcHRoKGEpLCBkZXB0aChiKSk7Ci0gICAgYXV0byBbeCwgeSwgZGlmZmVyZW5j
ZV0gPSBkZXB0aEEgPiBkZXB0aEIKKyAgICBhdXRvIFt4LCB5LCBkaWZmZXJlbmNlXSA9IGRlcHRo
QSA+PSBkZXB0aEIKICAgICAgICAgPyBzdGQ6Om1ha2VfdHVwbGUoJmEsICZiLCBkZXB0aEEgLSBk
ZXB0aEIpCiAgICAgICAgIDogc3RkOjptYWtlX3R1cGxlKCZiLCAmYSwgZGVwdGhCIC0gZGVwdGhB
KTsKLSAgICBmb3IgKGRlY2x0eXBlKGRpZmZlcmVuY2UpIGkgPSAwOyBpIDwgZGlmZmVyZW5jZTsg
KytpKQotICAgICAgICB4ID0geC0+cGFyZW50Tm9kZSgpOworICAgIGRlY2x0eXBlKHgpIGRpc3Rp
bmN0QW5jZXN0b3JBID0gbnVsbHB0cjsKKyAgICBmb3IgKGRlY2x0eXBlKGRpZmZlcmVuY2UpIGkg
PSAwOyBpIDwgZGlmZmVyZW5jZTsgKytpKSB7CisgICAgICAgIGRpc3RpbmN0QW5jZXN0b3JBID0g
eDsKKyAgICAgICAgeCA9IHgtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUoKTsKKyAgICB9CisgICAg
ZGVjbHR5cGUoeSkgZGlzdGluY3RBbmNlc3RvckIgPSBudWxscHRyOwogICAgIHdoaWxlICh4ICE9
IHkpIHsKLSAgICAgICAgeCA9IHgtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgeSA9IHktPnBhcmVu
dE5vZGUoKTsKKyAgICAgICAgZGlzdGluY3RBbmNlc3RvckEgPSB4OworICAgICAgICBkaXN0aW5j
dEFuY2VzdG9yQiA9IHk7CisgICAgICAgIHggPSB4LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7
CisgICAgICAgIHkgPSB5LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CisgICAgfQorICAgIGlm
IChkZXB0aEEgPCBkZXB0aEIpCisgICAgICAgIHN0ZDo6c3dhcChkaXN0aW5jdEFuY2VzdG9yQSwg
ZGlzdGluY3RBbmNlc3RvckIpOworICAgIHJldHVybiB7IHgsIGRpc3RpbmN0QW5jZXN0b3JBLCBk
aXN0aW5jdEFuY2VzdG9yQiB9OworfQorCitSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5j
ZXN0b3IoTm9kZSYgYSwgTm9kZSYgYikKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxOb2RlKj4o
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbihhLCBiKS5jb21tb25BbmNlc3Rvcik7
Cit9CisKK3N0YXRpYyBib29sIGlzU2libGluZ1N1YnNlcXVlbnQoY29uc3QgTm9kZSYgc2libGlu
Z0EsIGNvbnN0IE5vZGUmIHNpYmxpbmdCKQoreworICAgIEFTU0VSVCgmc2libGluZ0EgIT0gJnNp
YmxpbmdCKTsKKyAgICBmb3IgKGF1dG8gc2libGluZyA9ICZzaWJsaW5nQTsgc2libGluZzsgc2li
bGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmcgPT0g
JnNpYmxpbmdCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiB4
OworICAgIHJldHVybiBmYWxzZTsKK30KKworUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIo
Y29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikKK3sKKyAgICBpZiAoJmEgPT0gJmIpCisgICAg
ICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CisgICAgYXV0byByZXN1bHQg
PSBjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuKGEsIGIpOworICAgIGlmICghcmVz
dWx0LmNvbW1vbkFuY2VzdG9yKQorICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjp1bm9y
ZGVyZWQ7CisgICAgaWYgKCFyZXN1bHQuZGlzdGluY3RBbmNlc3RvckEpCisgICAgICAgIHJldHVy
biBQYXJ0aWFsT3JkZXJpbmc6Omxlc3M7CisgICAgaWYgKCFyZXN1bHQuZGlzdGluY3RBbmNlc3Rv
ckIpCisgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXI7CisgICAgcmV0dXJu
IGlzU2libGluZ1N1YnNlcXVlbnQoKnJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQSwgKnJlc3VsdC5k
aXN0aW5jdEFuY2VzdG9yQikgPyBQYXJ0aWFsT3JkZXJpbmc6Omxlc3MgOiBQYXJ0aWFsT3JkZXJp
bmc6OmdyZWF0ZXI7CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IE5vZGUmIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA0MzFjYjM2NGRiNGNkMzA1OTQzYmIz
YTMyY2ViOThiYjg3ZjRlMjU0Li5lYjc1YjY0OGU1ODVkNTJiN2I3MGU3YjBjZGViNTA4MDExZGM4
YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY3MCw4ICs2NzAsMjggQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Tm9kZVJhcmVEYXRhLCBOb2RlUmFyZURhdGFEZWxldGVyPiBtX3JhcmVEYXRh
OwogfTsKIAorYm9vbCBjb25uZWN0ZWRJblNhbWVUcmVlU2NvcGUoY29uc3QgTm9kZSosIGNvbnN0
IE5vZGUqKTsKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcihOb2RlJiwgTm9kZSYpOwogCitjbGFzcyBQYXJ0aWFsT3JkZXJpbmcgeworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCBQYXJ0aWFsT3JkZXJpbmcgbGVzczsKKyAgICBzdGF0aWMgY29uc3Qg
UGFydGlhbE9yZGVyaW5nIGVxdWl2YWxlbnQ7CisgICAgc3RhdGljIGNvbnN0IFBhcnRpYWxPcmRl
cmluZyBncmVhdGVyOworICAgIHN0YXRpYyBjb25zdCBQYXJ0aWFsT3JkZXJpbmcgdW5vcmRlcmVk
OworCisgICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIGlzX2VxKFBhcnRpYWxPcmRlcmluZyk7Cisg
ICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIGlzX2x0KFBhcnRpYWxPcmRlcmluZyk7CisgICAgZnJp
ZW5kIGNvbnN0ZXhwciBib29sIGlzX2d0KFBhcnRpYWxPcmRlcmluZyk7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7IExlc3MsIEVxdWl2YWxlbnQsIEdyZWF0ZXIs
IFVub3JkZXJlZCB9OworICAgIGNvbnN0ZXhwciBQYXJ0aWFsT3JkZXJpbmcoVHlwZSB0eXBlKSA6
IG1fdHlwZSB7IHR5cGUgfSB7IH0KKyAgICBUeXBlIG1fdHlwZTsKK307CisKK1dFQkNPUkVfRVhQ
T1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IE5vZGUmLCBjb25zdCBOb2Rl
Jik7CisKICNpZiBBU1NFUlRfRU5BQkxFRAogCiBpbmxpbmUgdm9pZCBhZG9wdGVkKE5vZGUqIG5v
ZGUpCkBAIC03ODUsNyArODA1LDI1IEBAIGlubGluZSB2b2lkIE5vZGU6OnNldFRyZWVTY29wZVJl
Y3Vyc2l2ZWx5KFRyZWVTY29wZSYgbmV3VHJlZVNjb3BlKQogICAgICAgICBtb3ZlVHJlZVRvTmV3
U2NvcGUoKnRoaXMsICptX3RyZWVTY29wZSwgbmV3VHJlZVNjb3BlKTsKIH0KIAotYm9vbCBhcmVO
b2Rlc0Nvbm5lY3RlZEluU2FtZVRyZWVTY29wZShjb25zdCBOb2RlKiwgY29uc3QgTm9kZSopOwor
aW5saW5lIGNvbnN0ZXhwciBQYXJ0aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVyaW5nOjpsZXNzKFR5
cGU6Okxlc3MpOworaW5saW5lIGNvbnN0ZXhwciBQYXJ0aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVy
aW5nOjplcXVpdmFsZW50KFR5cGU6OkVxdWl2YWxlbnQpOworaW5saW5lIGNvbnN0ZXhwciBQYXJ0
aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVyaW5nOjpncmVhdGVyKFR5cGU6OkdyZWF0ZXIpOworaW5s
aW5lIGNvbnN0ZXhwciBQYXJ0aWFsT3JkZXJpbmcgUGFydGlhbE9yZGVyaW5nOjp1bm9yZGVyZWQo
VHlwZTo6VW5vcmRlcmVkKTsKKworY29uc3RleHByIGJvb2wgaXNfZXEoUGFydGlhbE9yZGVyaW5n
IG9yZGVyaW5nKQoreworICAgIHJldHVybiBvcmRlcmluZy5tX3R5cGUgPT0gUGFydGlhbE9yZGVy
aW5nOjpUeXBlOjpFcXVpdmFsZW50OworfQorCitjb25zdGV4cHIgYm9vbCBpc19sdChQYXJ0aWFs
T3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAgcmV0dXJuIG9yZGVyaW5nLm1fdHlwZSA9PSBQYXJ0
aWFsT3JkZXJpbmc6OlR5cGU6Okxlc3M7Cit9CisKK2NvbnN0ZXhwciBib29sIGlzX2d0KFBhcnRp
YWxPcmRlcmluZyBvcmRlcmluZykKK3sKKyAgICByZXR1cm4gb3JkZXJpbmcubV90eXBlID09IFBh
cnRpYWxPcmRlcmluZzo6VHlwZTo6R3JlYXRlcjsKK30KIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IE5vZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAKaW5kZXggNGIyNjQ5OTBmOGMyMWNiZDkzZmZmYzE4MTc3Y2UxM2FmNTQwYTI2MS4uMmQ3
YjQzZDQxMTdhMjg3ZmEwNmVkNmFkZDVjOGQ0NWMzMTU0OWVhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgaW50IFBvc2l0aW9uOjpjb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgY29uc3QKICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckNoaWxkcmVuOgog
ICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5sZW5ndGgoKTsKICAgICBjYXNlIFBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcjoKLSAgICAgICAgcmV0dXJuIG1pbk9mZnNldEZvck5vZGUobV9hbmNo
b3JOb2RlLmdldCgpLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICBj
YXNlIFBvc2l0aW9uSXNCZWZvcmVBbmNob3I6CiAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUt
PmNvbXB1dGVOb2RlSW5kZXgoKTsKICAgICBjYXNlIFBvc2l0aW9uSXNBZnRlckFuY2hvcjoKQEAg
LTM1NSwxMSArMzU1LDExIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhQb3NpdGlvbk1v
dmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgICAgICAvLyAgICAgIEdvaW5nIGZyb20gMSB0byAw
IGlzIGNvcnJlY3QuCiAgICAgICAgIHN3aXRjaCAobW92ZVR5cGUpIHsKICAgICAgICAgY2FzZSBD
b2RlUG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG5vZGUsIG9mZnNldCAtIDEpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VEZXByZWNhdGVkTGVn
YWN5UG9zaXRpb24obm9kZSwgb2Zmc2V0IC0gMSk7CiAgICAgICAgIGNhc2UgQ2hhcmFjdGVyOgot
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCB1bmNo
ZWNrZWRQcmV2aW91c09mZnNldChub2RlLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKG5vZGUsIHVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0
KG5vZGUsIG9mZnNldCkpOwogICAgICAgICBjYXNlIEJhY2t3YXJkRGVsZXRpb246Ci0gICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIHVuY2hlY2tlZFBy
ZXZpb3VzT2Zmc2V0Rm9yQmFja3dhcmREZWxldGlvbihub2RlLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKG5vZGUsIHVuY2hlY2tlZFBy
ZXZpb3VzT2Zmc2V0Rm9yQmFja3dhcmREZWxldGlvbihub2RlLCBvZmZzZXQpKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMzc0LDcgKzM3NCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91
cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogICAgIGlmIChwcmV2aW91c1NpYmxp
bmcgJiYgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRlKCpwcmV2aW91c1NpYmxp
bmcpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUocHJldmlvdXNTaWJsaW5nKTsK
IAotICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFyZW50LCBub2RlLT5j
b21wdXRlTm9kZUluZGV4KCkpOworICAgIHJldHVybiBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0
aW9uKHBhcmVudCwgbm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpKTsKIH0KIAogUG9zaXRpb24gUG9z
aXRpb246Om5leHQoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKQEAgLTQwOCw3ICs0
MDgsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBl
KSBjb25zdAogICAgICAgICAvLyAgICAgIEdvaW5nIGZvcndhcmQgb25lIGNoYXJhY3RlciBhdCBh
IHRpbWUgaXMgY29ycmVjdC4KICAgICAgICAgLy8gICAyKSBUaGUgbmV3IG9mZnNldCBpcyBhIGJv
Z3VzIG9mZnNldCBsaWtlICg8YnI+LCAxKSwgYW5kIHRoZXJlIGlzIG5vIGNoaWxkLgogICAgICAg
ICAvLyAgICAgIEdvaW5nIGZyb20gMCB0byAxIGlzIGNvcnJlY3QuCi0gICAgICAgIHJldHVybiBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgKG1vdmVUeXBlID09IENoYXJhY3Rlcikg
PyB1bmNoZWNrZWROZXh0T2Zmc2V0KG5vZGUsIG9mZnNldCkgOiBvZmZzZXQgKyAxKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24obm9kZSwgKG1vdmVUeXBlID09
IENoYXJhY3RlcikgPyB1bmNoZWNrZWROZXh0T2Zmc2V0KG5vZGUsIG9mZnNldCkgOiBvZmZzZXQg
KyAxKTsKICAgICB9CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnRO
b2RlKCk7CkBAIC00MjIsNyArNDIyLDcgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHQoUG9zaXRp
b25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKICAgICBpZiAobmV4dFNpYmxpbmcgJiYgcG9zaXRp
b25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRlKCpuZXh0U2libGluZykpCiAgICAgICAgIHJl
dHVybiBwb3NpdGlvbkJlZm9yZU5vZGUobmV4dFNpYmxpbmcpOwogCi0gICAgcmV0dXJuIGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSAr
IDEpOworICAgIHJldHVybiBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKHBhcmVudCwgbm9k
ZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSk7CiB9CiAKIGludCBQb3NpdGlvbjo6dW5jaGVja2Vk
UHJldmlvdXNPZmZzZXQoY29uc3QgTm9kZSogbiwgdW5zaWduZWQgY3VycmVudCkKQEAgLTY3NCw3
ICs2NzQsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jv
c3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAgICAgLy8gaXRlcmF0ZSBiYWNrd2FyZCBmcm9tIHRoZXJl
LCBsb29raW5nIGZvciBhIHF1YWxpZmllZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0g
ZW5jbG9zaW5nVmlzdWFsQm91bmRhcnkoc3RhcnROb2RlKTsKICAgICAvLyBGSVhNRTogUG9zaXRp
b25JdGVyYXRvciBzaG91bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KLSAg
ICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9u
SXNBZnRlckFuY2hvciA/IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX2FuY2hvck5vZGUu
Z2V0KCksIGNhcmV0TWF4T2Zmc2V0KCptX2FuY2hvck5vZGUpKSA6ICp0aGlzOworICAgIFBvc2l0
aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVy
QW5jaG9yID8gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihtX2FuY2hvck5vZGUuZ2V0KCks
IGNhcmV0TWF4T2Zmc2V0KCptX2FuY2hvck5vZGUpKSA6ICp0aGlzOwogICAgIFBvc2l0aW9uSXRl
cmF0b3IgY3VycmVudFBvc2l0aW9uID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRh
YmxlID0gc3RhcnROb2RlLT5oYXNFZGl0YWJsZVN0eWxlKCk7CiAgICAgTm9kZSogbGFzdE5vZGUg
PSBzdGFydE5vZGU7CkBAIC03NDAsNyArNzQwLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3Ry
ZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogICAgICAgICAgICAg
ICAgIC8vIHJlbmRlciB0cmVlIHdoaWNoIGNhbiBoYXZlIGEgZGlmZmVyZW50IGxlbmd0aCBkdWUg
dG8gY2FzZSB0cmFuc2Zvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAvLyBVbnRpbCB3ZSByZXNv
bHZlIHRoYXQsIGRpc2FibGUgdGhpcyBzbyB3ZSBjYW4gcnVuIHRoZSBsYXlvdXQgdGVzdHMhCiAg
ICAgICAgICAgICAgICAgLy9BU1NFUlQoY3VycmVudE9mZnNldCA+PSByZW5kZXJlci0+Y2FyZXRN
YXhPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbigmY3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1heE9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbigmY3VycmVudE5v
ZGUsIHJlbmRlcmVyLT5jYXJldE1heE9mZnNldCgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3NpdGlvbi5vZmZzZXRJbkxlYWZO
b2RlKCk7CkBAIC03NzYsNyArNzc2LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0o
RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAgICAgLy8gaXRlcmF0ZSBm
b3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0aW9uCiAgICAg
Tm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5vZGUpOwogICAg
IC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0IEJlZm9yZSBhbmQgQWZ0
ZXIgcG9zaXRpb25zLgotICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hv
clR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZzZXQoKm1fYW5jaG9yTm9kZSkpIDog
KnRoaXM7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9
PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKG1f
YW5jaG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZzZXQoKm1fYW5jaG9yTm9kZSkpIDogKnRoaXM7
CiAgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zaXRpb24gPSBsYXN0VmlzaWJsZTsKICAg
ICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPmhhc0VkaXRhYmxlU3R5bGUoKTsKICAg
ICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKQEAgLTg0Myw3ICs4NDMsNyBAQCBQb3NpdGlv
biBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkg
Y29uc3QKIAogICAgICAgICAgICAgaWYgKCZjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uLmF0U3RhcnRPZk5vZGUoKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmY3VycmVu
dE5vZGUsIHRleHRSZW5kZXJlci5jYXJldE1pbk9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbigmY3VycmVudE5vZGUsIHRleHRSZW5k
ZXJlci5jYXJldE1pbk9mZnNldCgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdW5z
aWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3NpdGlvbi5vZmZzZXRJbkxlYWZOb2RlKCk7CkBA
IC0xNTYwLDE1ICsxNTYwLDEyIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
c3RyZWFtLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgcmV0dXJuIHN0cmVhbTsKIH0K
IAotUmVmUHRyPE5vZGU+IGNvbW1vblNoYWRvd0luY2x1ZGluZ0FuY2VzdG9yKGNvbnN0IFBvc2l0
aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKK1JlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVB
bmNlc3Rvcihjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7Ci0gICAgYXV0
byogY29tbW9uU2NvcGUgPSBjb21tb25UcmVlU2NvcGUoYS5jb250YWluZXJOb2RlKCksIGIuY29u
dGFpbmVyTm9kZSgpKTsKLSAgICBpZiAoIWNvbW1vblNjb3BlKQorICAgIGF1dG8gbm9kZUEgPSBh
LmNvbnRhaW5lck5vZGUoKTsKKyAgICBhdXRvIG5vZGVCID0gYi5jb250YWluZXJOb2RlKCk7Cisg
ICAgaWYgKCFub2RlQSB8fCAhbm9kZUIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1
dG8qIG5vZGVBID0gY29tbW9uU2NvcGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGEuY29udGFp
bmVyTm9kZSgpKTsKLSAgICBBU1NFUlQobm9kZUEpOwotICAgIGF1dG8qIG5vZGVCID0gY29tbW9u
U2NvcGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGIuY29udGFpbmVyTm9kZSgpKTsKLSAgICBB
U1NFUlQobm9kZUIpOwogICAgIHJldHVybiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcigqbm9kZUEs
ICpub2RlQik7CiB9CiAKQEAgLTE1OTQsMTAgKzE1OTEsMTQgQEAgUG9zaXRpb24gcG9zaXRpb25J
blBhcmVudEFmdGVyTm9kZShOb2RlKiBub2RlKQogICAgIHJldHVybiBQb3NpdGlvbihhbmNlc3Rv
ciwgbm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcik7CiB9CiAKLS8vIEZJWE1FOiBSZW5hbWUgdG8gdXNlIG1ha2UgZm9yIHRoZSBw
cmVmaXggdmVyYiBpbnN0ZWFkIG9mIGNyZWF0ZS4KLVBvc2l0aW9uIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK1Bvc2l0aW9uIG1ha2VDb250
YWluZXJPZmZzZXRQb3NpdGlvbihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHBvaW50LmNvbnRhaW5lci5wdHIoKSwg
cG9pbnQub2Zmc2V0KTsKKyAgICByZXR1cm4gbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKHBv
aW50LmNvbnRhaW5lci5wdHIoKSwgcG9pbnQub2Zmc2V0KTsKK30KKworUG9zaXRpb24gbWFrZURl
cHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAg
ICByZXR1cm4gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihwb2ludC5jb250YWluZXIucHRy
KCksIHBvaW50Lm9mZnNldCk7CiB9CiAKIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3Vu
ZGFyeVBvaW50KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTE2MDcsNiArMTYwOCwyOSBA
QCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludChjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24pCiAgICAgcmV0dXJuIEJvdW5kYXJ5UG9pbnQgeyAqcG9zaXRpb24uY29udGFp
bmVyTm9kZSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24uY29tcHV0ZU9mZnNldElu
Q29udGFpbmVyTm9kZSgpKSB9OwogfQogCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihj
b25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCit7CisgICAgaWYgKGEuaXNOdWxs
KCkgfHwgYi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGEuaXNOdWxsKCkgJiYgYi5pc051bGwo
KSA/IFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudCA6IFBhcnRpYWxPcmRlcmluZzo6dW5vcmRl
cmVkOworCisgICAgYXV0byBhQ29udGFpbmVyID0gYS5jb250YWluZXJOb2RlKCk7CisgICAgYXV0
byBiQ29udGFpbmVyID0gYi5jb250YWluZXJOb2RlKCk7CisKKyAgICBpZiAoIWFDb250YWluZXIg
fHwgIWJDb250YWluZXIpIHsKKyAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNlc3Rvcigq
YS5hbmNob3JOb2RlKCksICpiLmFuY2hvck5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4gUGFy
dGlhbE9yZGVyaW5nOjp1bm9yZGVyZWQ7CisgICAgICAgIGlmICghYUNvbnRhaW5lciAmJiAhYkNv
bnRhaW5lciAmJiBhLmFuY2hvclR5cGUoKSA9PSBiLmFuY2hvclR5cGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CisgICAgICAgIGlmIChiQ29udGFp
bmVyKQorICAgICAgICAgICAgcmV0dXJuIGEuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3Np
dGlvbklzQmVmb3JlQW5jaG9yID8gUGFydGlhbE9yZGVyaW5nOjpsZXNzIDogUGFydGlhbE9yZGVy
aW5nOjpncmVhdGVyOworICAgICAgICByZXR1cm4gYi5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246
OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IgPyBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXIgOiBQYXJ0
aWFsT3JkZXJpbmc6Omxlc3M7CisgICAgfQorCisgICAgLy8gRklYTUU6IEF2b2lkIGNvbXB1dGlu
ZyBub2RlIG9mZnNldCBmb3IgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0by4KKworICAgIHJl
dHVybiBkb2N1bWVudE9yZGVyKCptYWtlQm91bmRhcnlQb2ludChhKSwgKm1ha2VCb3VuZGFyeVBv
aW50KGIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVf
REVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAppbmRleCBiYjk5MzA4ZGZjZjQ1NmE2OTg4MzRk
NTdjZTE3MzMwMWZjMzc5MzM2Li43ODUzN2Y5YTEyMGI2ZDI4NWYxMWFlZmQzMDMyOTM3OGRhZGZh
YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaApAQCAtMjAxLDcgKzIwMSw3IEBAIHByaXZhdGU6CiAg
ICAgLy8gRm9yIGNyZWF0aW5nIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9uczogKEFuY2hvciB0eXBl
IHdpbGwgYmUgZGV0ZXJtaW5lZCBmcm9tIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKICAg
ICBlbnVtIGNsYXNzIExlZ2FjeUVkaXRpbmdQb3NpdGlvbkZsYWcgeyBPbiB9OwogICAgIFdFQkNP
UkVfRVhQT1JUIFBvc2l0aW9uKE5vZGUqIGFuY2hvck5vZGUsIHVuc2lnbmVkIG9mZnNldCwgTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uRmxhZyk7Ci0gICAgZnJpZW5kIFBvc2l0aW9uIGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihOb2RlKiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICBmcmllbmQgUG9z
aXRpb24gbWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihOb2RlKiwgdW5zaWduZWQgb2Zmc2V0
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGludCBvZmZzZXRGb3JQb3NpdGlvbkFmdGVyQW5jaG9y
KCkgY29uc3Q7CiAgICAgCkBAIC0yMjEsMTQgKzIyMSwxOCBAQCBwcml2YXRlOgogCiBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwogYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKKworV0VCQ09SRV9FWFBPUlQg
UGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3Np
dGlvbiYpOwogYm9vbCBvcGVyYXRvcjwoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYp
OwogYm9vbCBvcGVyYXRvcj4oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwogYm9v
bCBvcGVyYXRvcj49KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CiAKLS8vIEZJWE1FOiBD
b25zaWRlciByZW5hbWluZyB0aGlzIHRvICJtYWtlIiBpbnN0ZWFkIG9mICJjcmVhdGUiIHNpbmNl
IHdlIG5vcm1hbGx5IHVzZSAiY3JlYXRlIiBmb3IgZnVuY3Rpb25zIHRoYXQgYWxsb2NhdGUgaGVh
cCBvYmplY3RzLgotUG9zaXRpb24gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKE5vZGUqLCB1
bnNpZ25lZCBvZmZzZXQpOwotV0VCQ09SRV9FWFBPUlQgUG9zaXRpb24gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1Bvc2l0aW9uIG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihOb2RlKiwgdW5zaWduZWQgb2Zmc2V0KTsKK1dFQkNPUkVfRVhQT1JU
IFBvc2l0aW9uIG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihjb25zdCBCb3VuZGFyeVBvaW50
Jik7CisKK1Bvc2l0aW9uIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oTm9kZSosIHVuc2ln
bmVkIG9mZnNldCk7CitXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbiBtYWtlRGVwcmVjYXRlZExlZ2Fj
eVBvc2l0aW9uKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIAogV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgUG9zaXRpb24mKTsKIApA
QCAtMjQzLDEwICsyNDcsOSBAQCBQb3NpdGlvbiBwb3NpdGlvbkFmdGVyTm9kZShOb2RlKiBhbmNo
b3JOb2RlKTsKIFBvc2l0aW9uIGZpcnN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSk7
CiBQb3NpdGlvbiBsYXN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSk7CiAKLWludCBt
aW5PZmZzZXRGb3JOb2RlKE5vZGUqIGFuY2hvck5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiBib29s
IG9mZnNldElzQmVmb3JlTGFzdE5vZGVPZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBhbmNo
b3JOb2RlKTsKIAotUmVmUHRyPE5vZGU+IGNvbW1vblNoYWRvd0luY2x1ZGluZ0FuY2VzdG9yKGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKK1JlZlB0cjxOb2RlPiBjb21tb25JbmNs
dXNpdmVBbmNlc3Rvcihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CiAKIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBQb3NpdGlvbiYp
OwogCkBAIC0yNTksMTUgKzI2MiwyMSBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBs
ZVJhbmdlKGNvbnN0IFBvc2l0aW9uUmFuZ2UmKTsKIAogLy8gaW5saW5lcwogCi1pbmxpbmUgUG9z
aXRpb24gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKE5vZGUqIG5vZGUsIHVuc2lnbmVkIG9m
ZnNldCkKK2lubGluZSBQb3NpdGlvbiBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24oTm9kZSog
bm9kZSwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIHJldHVybiB7IG5vZGUsIG9mZnNldCwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB9OworfQorCitpbmxpbmUgUG9zaXRpb24g
bWFrZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihOb2RlKiBub2RlLCB1bnNpZ25lZCBvZmZzZXQp
CiB7CiAgICAgcmV0dXJuIHsgbm9kZSwgb2Zmc2V0LCBQb3NpdGlvbjo6TGVnYWN5RWRpdGluZ1Bv
c2l0aW9uRmxhZzo6T24gfTsKIH0KIAorLy8gRklYTUU6IFBvc2l0aW9ucyBhdCB0aGUgc2FtZSBk
b2N1bWVudCBsb2NhdGlvbiB3aXRoIGRpZmZlcmVudCBhbmNob3Jpbmcgd2lsbCByZXR1cm4gZmFs
c2U7IHRoYXQncyB1bmxpa2UgPD0gYW5kID49LgorLy8gRklYTUU6IFRoaXMgaWdub3JlcyBkaWZm
ZXJlbmNlcyBpbiBtX2lzTGVnYWN5RWRpdGluZ1Bvc2l0aW9uIGluIGEgc3VidGxlIHdheS4KKy8v
IEZJWE1FOiBGb3IgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zLCA8ZGl2PjxpbWc+PC9kaXY+IFtk
aXYsIDBdICE9IFtpbWcsIDBdIGV2ZW4gdGhvdWdoIG1vc3Qgb2YgZWRpdGluZyBjb2RlIHdpbGwg
dHJlYXQgdGhlbSBhcyBpZGVudGljYWwuCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBv
c2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKLSAgICAvLyBGSVhNRTogSW4gPGRpdj48
aW1nPjwvZGl2PiBbZGl2LCAwXSAhPSBbaW1nLCAwXSBldmVuIHRob3VnaCBtb3N0IG9mIHRoZQot
ICAgIC8vIGVkaXRpbmcgY29kZSB3aWxsIHRyZWF0IHRoZW0gYXMgaWRlbnRpY2FsLgogICAgIHJl
dHVybiBhLmFuY2hvck5vZGUoKSA9PSBiLmFuY2hvck5vZGUoKSAmJiBhLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkgPT0gYi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpICYmIGEuYW5jaG9yVHlw
ZSgpID09IGIuYW5jaG9yVHlwZSgpOwogfQogCkBAIC0zMjgsMTcgKzMzNyw2IEBAIGlubGluZSBQ
b3NpdGlvbiBsYXN0UG9zaXRpb25Jbk5vZGUoTm9kZSogYW5jaG9yTm9kZSkKICAgICByZXR1cm4g
UG9zaXRpb24oYW5jaG9yTm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckNoaWxkcmVuKTsK
IH0KIAotaW5saW5lIGludCBtaW5PZmZzZXRGb3JOb2RlKE5vZGUqIGFuY2hvck5vZGUsIHVuc2ln
bmVkIG9mZnNldCkKLXsKLSAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKmFuY2hvck5vZGUpKQot
ICAgICAgICByZXR1cm4gc3RkOjptaW4ob2Zmc2V0LCBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigq
YW5jaG9yTm9kZSkubGVuZ3RoKCkpOwotCi0gICAgdW5zaWduZWQgbmV3T2Zmc2V0ID0gMDsKLSAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBhbmNob3JOb2RlLT5maXJzdENoaWxkKCk7IG5vZGUgJiYgbmV3
T2Zmc2V0IDwgb2Zmc2V0OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgbmV3
T2Zmc2V0Kys7Ci0gICAgcmV0dXJuIG5ld09mZnNldDsKLX0KLQogaW5saW5lIGJvb2wgb2Zmc2V0
SXNCZWZvcmVMYXN0Tm9kZU9mZnNldCh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIGFuY2hvck5vZGUp
CiB7CiAgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KCphbmNob3JOb2RlKSkKQEAgLTM1MCw2ICsz
NDgsMTggQEAgaW5saW5lIGJvb2wgb2Zmc2V0SXNCZWZvcmVMYXN0Tm9kZU9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQsIE5vZGUqIGFuY2hvck5vZGUpCiAgICAgcmV0dXJuIG9mZnNldCA8IGN1cnJlbnRP
ZmZzZXQ7CiB9CiAKKy8vIEZJWE1FOiBEZWxldGUgdGhpcyBhZnRlciBjaGFuZ2luZyBhbGwgY2Fs
bGVycyB0byB1c2UgdGhlIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24gbmFtZS4KK2lubGlu
ZSBQb3NpdGlvbiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oTm9kZSogbm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KQoreworICAgIHJldHVybiBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKG5v
ZGUsIG9mZnNldCk7Cit9CisKKy8vIEZJWE1FOiBEZWxldGUgdGhpcyBhZnRlciBjaGFuZ2luZyBh
bGwgY2FsbGVycyB0byB1c2UgdGhlIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24gbmFtZS4K
K2lubGluZSBQb3NpdGlvbiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3QgQm91bmRh
cnlQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRp
b24ocG9pbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJF
RV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25H
cm91cHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAppbmRl
eCBjZmI1NWYzOTg4OGMxMWMyZjgzZGM5OTEzYjA1ZDBjYjEwNjFkNTBlLi5lNDJjNTk1NzI4ZDU0
ZjE5NTc3OGVjY2ZkYzU5OTU3Y2Q2Mzk1NTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5jcHAKQEAgLTYwLDEwICs2MCwxMCBAQCBpbmxpbmUgYm9vbCBSYWRpb0J1dHRv
bkdyb3VwOjppc1ZhbGlkKCkgY29uc3QKIFZlY3RvcjxSZWY8SFRNTElucHV0RWxlbWVudD4+IFJh
ZGlvQnV0dG9uR3JvdXA6Om1lbWJlcnMoKSBjb25zdAogewogICAgIFZlY3RvcjxSZWY8SFRNTElu
cHV0RWxlbWVudD4+IHNvcnRlZE1lbWJlcnM7Ci0gICAgZm9yIChhdXRvJiBtZW1lYmVyIDogbV9t
ZW1iZXJzKQotICAgICAgICBzb3J0ZWRNZW1iZXJzLmFwcGVuZChtZW1lYmVyKTsKKyAgICBmb3Ig
KGF1dG8mIG1lbWJlciA6IG1fbWVtYmVycykKKyAgICAgICAgc29ydGVkTWVtYmVycy5hcHBlbmQo
bWVtYmVyKTsKICAgICBzdGQ6OnNvcnQoc29ydGVkTWVtYmVycy5iZWdpbigpLCBzb3J0ZWRNZW1i
ZXJzLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7Ci0gICAgICAgIHJldHVybiBkb2N1bWVu
dE9yZGVyQ29tcGFyYXRvcihhLnB0cigpLCBiLnB0cigpKTsKKyAgICAgICAgcmV0dXJuIGlzX2x0
KGRvY3VtZW50T3JkZXIoYSwgYikpOwogICAgIH0pOwogICAgIHJldHVybiBzb3J0ZWRNZW1iZXJz
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggNzAwODFiZTIwY2IxYjczYjZiNGE3OTRmYWI5YTdh
MWU5Y2IyY2U0NS4uMzA3NTc3Y2Q2Y2MzNDFiMjI3ZmI0YzhhZDY1M2Y1MmIyYzZlODdlYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCkBAIC0xMTg4LDcgKzExODgsNyBAQCBib29sIGFyZVJhbmdlc0VxdWFs
KGNvbnN0IFJhbmdlKiBhLCBjb25zdCBSYW5nZSogYikKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKCFhIHx8ICFiKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGEtPnN0
YXJ0UG9zaXRpb24oKSA9PSBiLT5zdGFydFBvc2l0aW9uKCkgJiYgYS0+ZW5kUG9zaXRpb24oKSA9
PSBiLT5lbmRQb3NpdGlvbigpOworICAgIHJldHVybiAmYS0+c3RhcnRDb250YWluZXIoKSA9PSAm
Yi0+c3RhcnRDb250YWluZXIoKSAmJiBhLT5zdGFydE9mZnNldCgpID09IGItPnN0YXJ0T2Zmc2V0
KCkgJiYgJmEtPmVuZENvbnRhaW5lcigpID09ICZiLT5lbmRDb250YWluZXIoKSAmJiBhLT5lbmRP
ZmZzZXQoKSA9PSBiLT5lbmRPZmZzZXQoKTsKIH0KIAogYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0
IFJhbmdlKiBhLCBjb25zdCBSYW5nZSogYikKQEAgLTExOTksNyArMTE5OSw3IEBAIGJvb2wgcmFu
Z2VzT3ZlcmxhcChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCiAgICAgaWYgKGEgPT0g
YikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIWFyZU5vZGVzQ29ubmVjdGVkSW5T
YW1lVHJlZVNjb3BlKGEtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCksIGItPmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKCkpKQorICAgIGlmICghY29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGEtPmNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKCksIGItPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzaG9ydCBzdGFydFRvU3RhcnQgPSBhLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqYikucmVsZWFzZVJldHVy
blZhbHVlKCk7CkBAIC0xMzg3LDggKzEzODcsOCBAQCB2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0
KFRleHQmIG9sZE5vZGUpCiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpleHBhbmQoY29uc3Qg
U3RyaW5nJiB1bml0KQogewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCB7IHN0YXJ0UG9zaXRp
b24oKSB9OwotICAgIFZpc2libGVQb3NpdGlvbiBlbmQgeyBlbmRQb3NpdGlvbigpIH07CisgICAg
YXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbiB7IG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRp
b24oJnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0KCkpIH07CisgICAgYXV0byBlbmQgPSBW
aXNpYmxlUG9zaXRpb24geyBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZlbmRDb250YWlu
ZXIoKSwgZW5kT2Zmc2V0KCkpIH07CiAgICAgaWYgKHVuaXQgPT0gIndvcmQiKSB7CiAgICAgICAg
IHN0YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQpOwogICAgICAgICBlbmQgPSBlbmRPZldvcmQoZW5k
KTsKQEAgLTE1NDQsMTYgKzE1NDQsNiBAQCBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShj
b25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoKnJhbmdlKTsKIH0KIAotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgcikKLXsKLSAgICByZXR1cm4g
dHMgPDwgci50b1Bvc2l0aW9uKCk7Ci19Ci0gICAgCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgUmFuZ2UmIHIpCi17Ci0gICAgcmV0dXJuIHRz
IDw8ICJSYW5nZTogIiA8PCAic3RhcnQ6ICIgPDwgci5zdGFydFBvc2l0aW9uKCkgPDwgIiBlbmQ6
ICIgPDwgci5lbmRQb3NpdGlvbigpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IGZhYjhmODJiYWZmOGIz
NTljODIwMWI2MjFjMDFmZjk2MDkyMjMxMjQuLjEzZWIyNWVhMzY2N2ZhN2I5Y2IxZTRmN2Q2MDZj
ZWUzMzRiYWEwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC05Myw5ICs5Myw2IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzdXJyb3VuZENvbnRlbnRzKE5vZGUm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydEJlZm9yZShO
b2RlJik7CiAKLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydC50b1Bvc2l0aW9uKCk7IH0KLSAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kLnRvUG9zaXRpb24oKTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSog
Zmlyc3ROb2RlKCkgY29uc3Q7CiAKICAgICBlbnVtIGNsYXNzIEJvdW5kaW5nUmVjdEJlaGF2aW9y
IDogdWludDhfdCB7CkBAIC0xNzEsMTYgKzE2OCw2IEBAIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYpOwogV0VC
Q09SRV9FWFBPUlQgUmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
KTsKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYpOwogCi1ib29sIGRvY3VtZW50T3JkZXJDb21wYXJhdG9yKGNv
bnN0IE5vZGUqLCBjb25zdCBOb2RlKik7Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmKTsKLVdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBSYW5nZSYpOwotCi1pbmxp
bmUgYm9vbCBkb2N1bWVudE9yZGVyQ29tcGFyYXRvcihjb25zdCBOb2RlKiBhLCBjb25zdCBOb2Rl
KiBiKQotewotICAgIHJldHVybiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNvbnN0X2Nh
c3Q8Tm9kZSo+KGEpLCAwLCBjb25zdF9jYXN0PE5vZGUqPihiKSwgMCkucmVsZWFzZVJldHVyblZh
bHVlKCkgPCAwOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJF
RV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFy
eVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgKaW5kZXgg
MTlmYTg0NDJjNDgyNzUzOTRhMTAwN2JkMTRmNmM2Nzg3ZjhjNWRkZi4uYjI0NDA5ODQ3OGI3Nzc3
ZjA0Y2RmNjhkNjE5MjliZGM4ODQ1NTE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5k
YXJ5UG9pbnQuaApAQCAtMjUsOCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
Ik5vZGUuaCIKLSNpbmNsdWRlICJQb3NpdGlvbi5oIgorI2luY2x1ZGUgIkJvdW5kYXJ5UG9pbnQu
aCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJEYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzQsOCArMzQsNiBAQCBjbGFzcyBSYW5nZUJvdW5kYXJ5UG9pbnQgewogcHVibGljOgogICAg
IGV4cGxpY2l0IFJhbmdlQm91bmRhcnlQb2ludChOb2RlKiBjb250YWluZXIpOwogCi0gICAgUG9z
aXRpb24gdG9Qb3NpdGlvbigpIGNvbnN0OwotCiAgICAgTm9kZSogY29udGFpbmVyKCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3Q7CiAgICAgTm9kZSogY2hpbGRCZWZvcmUoKSBj
b25zdDsKQEAgLTYwLDYgKzU4LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9jaGls
ZEJlZm9yZUJvdW5kYXJ5OwogfTsKIAorQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludChj
b25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmKTsKKwogaW5saW5lIFJhbmdlQm91bmRhcnlQb2ludDo6
UmFuZ2VCb3VuZGFyeVBvaW50KE5vZGUqIGNvbnRhaW5lcikKICAgICA6IG1fY29udGFpbmVyTm9k
ZShjb250YWluZXIpCiB7CkBAIC04NSwxMiArODUsNiBAQCBpbmxpbmUgdm9pZCBSYW5nZUJvdW5k
YXJ5UG9pbnQ6OmVuc3VyZU9mZnNldElzVmFsaWQoKSBjb25zdAogICAgIG1fb2Zmc2V0SW5Db250
YWluZXIgPSBtX2NoaWxkQmVmb3JlQm91bmRhcnktPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7CiB9
CiAKLWlubGluZSBQb3NpdGlvbiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnRvUG9zaXRpb24oKSBjb25z
dAotewotICAgIGVuc3VyZU9mZnNldElzVmFsaWQoKTsKLSAgICByZXR1cm4gY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKG1fY29udGFpbmVyTm9kZS5nZXQoKSwgbV9vZmZzZXRJbkNvbnRhaW5l
ci52YWx1ZSgpKTsKLX0KLQogaW5saW5lIHVuc2lnbmVkIFJhbmdlQm91bmRhcnlQb2ludDo6b2Zm
c2V0KCkgY29uc3QKIHsKICAgICBlbnN1cmVPZmZzZXRJc1ZhbGlkKCk7CkBAIC0xODUsNCArMTc5
LDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGEs
IGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgYikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5s
aW5lIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgUmFuZ2VCb3VuZGFyeVBv
aW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4geyAqcG9pbnQuY29udGFpbmVyKCksIHBvaW50Lm9m
ZnNldCgpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxl
UmFuZ2UuY3BwCmluZGV4IDUzMGM3MDUyZTAzODBjZWQwNDYzMDYwOTZmMWY5OGRmZmU3M2Q4ZWYu
LmZhZGFmMWUzOWJkODI0N2MwZGFmODIxMTBlZTNiMzA2MDcyNDdiM2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NpbXBsZVJhbmdlLmNwcApAQCAtNjYsNiArNjYsNDUgQEAgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGUoTm9kZSYgbm9kZSkKICAgICByZXR1cm4gQm91
bmRhcnlQb2ludCB7ICpwYXJlbnQsIG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgMSB9OwogfQog
CisvLyBGSVhNRTogQ3JlYXRlIEJvdW5kYXJ5UG9pbnQuY3BwIGFuZCBtb3ZlIHRoaXMgdGhlcmUu
CitzdGF0aWMgYm9vbCBpc09mZnNldEJlZm9yZUNoaWxkKENvbnRhaW5lck5vZGUmIGNvbnRhaW5l
ciwgdW5zaWduZWQgb2Zmc2V0LCBOb2RlJiBjaGlsZCkKK3sKKyAgICBpZiAoIW9mZnNldCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgdW5zaWduZWQgY3VycmVudE9mZnNldCA9IDA7CisgICAg
Zm9yIChhdXRvIGN1cnJlbnRDaGlsZCA9IGNvbnRhaW5lci5maXJzdENoaWxkKCk7IGN1cnJlbnRD
aGlsZCAmJiBjdXJyZW50Q2hpbGQgIT0gJmNoaWxkOyBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKG9mZnNldCA8PSArK2N1cnJlbnRPZmZz
ZXQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLyBGSVhNRTogQ3JlYXRlIEJvdW5kYXJ5UG9pbnQuY3BwIGFuZCBtb3ZlIHRoaXMgdGhl
cmUuCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBh
LCBjb25zdCBCb3VuZGFyeVBvaW50JiBiKQoreworICAgIGlmIChhLm9mZnNldCA9PSBiLm9mZnNl
dCkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50T3JkZXIoYS5jb250YWluZXIsIGIuY29udGFpbmVy
KTsKKworICAgIGlmIChhLmNvbnRhaW5lci5wdHIoKSA9PSBiLmNvbnRhaW5lci5wdHIoKSkKKyAg
ICAgICAgcmV0dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQgPyBQYXJ0aWFsT3JkZXJpbmc6Omxlc3Mg
OiBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXI7CisKKyAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBi
LmNvbnRhaW5lci5wdHIoKTsgYW5jZXN0b3I7ICkgeworICAgICAgICBhdXRvIG5leHRBbmNlc3Rv
ciA9IGFuY2VzdG9yLT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCk7CisgICAgICAgIGlmIChuZXh0
QW5jZXN0b3IgPT0gYS5jb250YWluZXIucHRyKCkpCisgICAgICAgICAgICByZXR1cm4gaXNPZmZz
ZXRCZWZvcmVDaGlsZCgqbmV4dEFuY2VzdG9yLCBhLm9mZnNldCwgKmFuY2VzdG9yKSA/IFBhcnRp
YWxPcmRlcmluZzo6bGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKKyAgICAgICAgYW5j
ZXN0b3IgPSBuZXh0QW5jZXN0b3I7CisgICAgfQorCisgICAgZm9yIChhdXRvIGFuY2VzdG9yID0g
YS5jb250YWluZXIucHRyKCk7IGFuY2VzdG9yOyApIHsKKyAgICAgICAgYXV0byBuZXh0QW5jZXN0
b3IgPSBhbmNlc3Rvci0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpOworICAgICAgICBpZiAobmV4
dEFuY2VzdG9yID09IGIuY29udGFpbmVyLnB0cigpKQorICAgICAgICAgICAgcmV0dXJuIGlzT2Zm
c2V0QmVmb3JlQ2hpbGQoKm5leHRBbmNlc3RvciwgYi5vZmZzZXQsICphbmNlc3RvcikgPyBQYXJ0
aWFsT3JkZXJpbmc6OmdyZWF0ZXIgOiBQYXJ0aWFsT3JkZXJpbmc6Omxlc3M7CisgICAgICAgIGFu
Y2VzdG9yID0gbmV4dEFuY2VzdG9yOworICAgIH0KKworICAgIHJldHVybiBkb2N1bWVudE9yZGVy
KGEuY29udGFpbmVyLCBiLmNvbnRhaW5lcik7Cit9CisKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgYXV0byBwYXJlbnQgPSBu
b2RlLnBhcmVudE5vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApp
bmRleCAzOWI2NDM4Y2JiMWY0MDQ2MDM5ODllMWRkMWE1ZWEwN2RiMDAwM2Y2Li44MDAwZThmNDVh
NmJlMjY5Zjg4OWFkMjI5OWI1ZjFlYmYxZmYzNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCkBAIC0xNTYzLDcgKzE1NjMsNyBAQCB2b2lkIFdvcmRBd2FyZUl0ZXJh
dG9yOjphZHZhbmNlKCkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIC8vIFN0YXJ0IGdvYmJsaW5nIGNodW5rcyB1bnRpbCB3ZSBnZXQg
dG8gYSBzdWl0YWJsZSBzdG9wcGluZyBwb2ludAorICAgICAgICAgICAgLy8gU3RhcnQgZ29iYmxp
bmcgY2h1bmtzIHVudGlsIHdlIGdldCB0byBhIHN1aXRhYmxlIHN0b3BwaW5nIHBvaW50LgogICAg
ICAgICAgICAgYXBwZW5kKG1fYnVmZmVyLCBtX3ByZXZpb3VzVGV4dC50ZXh0KCkpOwogICAgICAg
ICAgICAgbV9wcmV2aW91c1RleHQucmVzZXQoKTsKICAgICAgICAgfQpAQCAtMjA5MCwxMCArMjA5
MCwxMCBAQCBpbmxpbmUgYm9vbCBTZWFyY2hCdWZmZXI6OmlzV29yZEVuZE1hdGNoKHNpemVfdCBz
dGFydCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKICAgICBBU1NFUlQobGVuZ3RoKTsKICAgICBBU1NF
UlQobV9vcHRpb25zLmNvbnRhaW5zKEF0V29yZEVuZHMpKTsKIAotICAgIGludCBlbmRXb3JkOwog
ICAgIC8vIFN0YXJ0IHNlYXJjaGluZyBhdCB0aGUgZW5kIG9mIG1hdGNoZWQgc2VhcmNoLCBzbyB0
aGF0IG11bHRpcGxlIHdvcmQgbWF0Y2hlcyBzdWNjZWVkLgorICAgIGludCBlbmRXb3JkOwogICAg
IGZpbmRFbmRXb3JkQm91bmRhcnkoU3RyaW5nVmlldyhtX2J1ZmZlci5kYXRhKCksIG1fYnVmZmVy
LnNpemUoKSksIHN0YXJ0ICsgbGVuZ3RoIC0gMSwgJmVuZFdvcmQpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3Q+KGVuZFdvcmQpID09IChzdGFydCArIGxlbmd0aCk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHNpemVfdD4oZW5kV29yZCkgPT0gc3RhcnQgKyBsZW5ndGg7CiB9CiAKIGlu
bGluZSBib29sIFNlYXJjaEJ1ZmZlcjo6aXNXb3JkU3RhcnRNYXRjaChzaXplX3Qgc3RhcnQsIHNp
emVfdCBsZW5ndGgpIGNvbnN0CkBAIC0yMzMzLDE0ICsyMzMzLDEyIEBAIHNpemVfdCBTZWFyY2hC
dWZmZXI6Omxlbmd0aCgpIGNvbnN0CiAKIHVpbnQ2NF90IGNoYXJhY3RlckNvdW50KGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCiB7Ci0gICAg
YXV0byBjb21wYXJpc29uUmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cygmcmFu
Z2Uuc3RhcnRDb250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSwgJnJhbmdlLmVuZENvbnRh
aW5lcigpLCByYW5nZS5lbmRPZmZzZXQoKSk7Ci0gICAgaWYgKGNvbXBhcmlzb25SZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byBhZGp1c3RlZFJhbmdl
KHJhbmdlKTsKLSAgICBpZiAoY29tcGFyaXNvblJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+
IDApCisgICAgYXV0byBhZGp1c3RlZFJhbmdlID0gcmFuZ2U7CisgICAgYXV0byBvcmRlcmluZyA9
IGRvY3VtZW50T3JkZXIocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CisgICAgaWYgKGlzX2d0KG9y
ZGVyaW5nKSkKICAgICAgICAgc3RkOjpzd2FwKGFkanVzdGVkUmFuZ2Uuc3RhcnQsIGFkanVzdGVk
UmFuZ2UuZW5kKTsKLQorICAgIGVsc2UgaWYgKCFpc19sdChvcmRlcmluZykpCisgICAgICAgIHJl
dHVybiAwOwogICAgIHVpbnQ2NF90IGxlbmd0aCA9IDA7CiAgICAgZm9yIChUZXh0SXRlcmF0b3Ig
aXQoYWRqdXN0ZWRSYW5nZSwgYmVoYXZpb3IpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKQog
ICAgICAgICBsZW5ndGggKz0gaXQudGV4dCgpLmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IGQxN2Y1NTZiZDNiNGNlZjgyMWEwMTgxMzBi
YmFlM2FlNDE4NGEwNzIuLmYwNjhiZjU4MDkwMzc3NWQ1OGJmMWE4ODdmZGQ1MTUzM2JjMDY5OTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTc2Niw3
ICs3NjYsNyBAQCBib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgY29uc3QgTgogCiBib29sIGFyZVZpc2libGVQb3Np
dGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGIpCiB7Ci0gICAgcmV0dXJuIGFyZU5vZGVzQ29ubmVjdGVkSW5TYW1lVHJl
ZVNjb3BlKGEuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCksIGIuZGVlcEVxdWl2YWxlbnQo
KS5hbmNob3JOb2RlKCkpOworICAgIHJldHVybiBjb25uZWN0ZWRJblNhbWVUcmVlU2NvcGUoYS5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKSwgYi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5v
ZGUoKSk7CiB9CiAKIGJvb2wgVmlzaWJsZVBvc2l0aW9uOjplcXVhbHMoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5oCmluZGV4IDBiOTgzYjE5M2M5YTBiNGY4NTIwYTRkZjIwMmE1YjA2MTU4YWM2NTkuLmVlMGJm
ZWY0NmRmMjAzZDQ2MTFhNjBmMDlhYWU1ZmVmNTNhNGNjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtNTQsNyArNTQsOCBAQCBwdWJsaWM6CiAgICAgVmlz
aWJsZVBvc2l0aW9uKCkgOiBtX2FmZmluaXR5KFZQX0RFRkFVTFRfQUZGSU5JVFkpIHsgfQogICAg
IFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0
eSA9IFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogCi0gICAgdm9pZCBjbGVhcigpIHsgbV9kZWVwUG9z
aXRpb24uY2xlYXIoKTsgfQorICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIHJlc2V0IG1f
YWZmaW5pdHk/CisgICAgdm9pZCBjbGVhcigpIHsgbV9kZWVwUG9zaXRpb24gPSB7IH07IH0KIAog
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOdWxsKCk7
IH0KICAgICBib29sIGlzTm90TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlz
Tm90TnVsbCgpOyB9CkBAIC0xMTksNiArMTIwLDggQEAgcHJpdmF0ZToKIAogYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOworCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogYm9vbCBvcGVyYXRvcj4oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBib29sIG9wZXJh
dG9yPD0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CkBA
IC0xNDcsNyArMTUwLDcgQEAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VTaW1wbGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYKIAogLy8gaW5saW5lcwog
Ci0vLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgaWdub3JlIGFmZmluaXR5LgorLy8gRklYTUU6IElz
IGl0IGNvcnJlY3QgYW5kIGhlbHBmdWwgZm9yIHRoaXMgdG8gYmUgaWdub3JpbmcgYWZmaW5pdHk/
CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPT0g
Yi5kZWVwRXF1aXZhbGVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLm1tCmluZGV4IGNhZTUwZjgxOTQ4OTdhMjdiZWJlYjQxNDg3ZjFkMzQxOTI0MGZm
MzYuLjY5NDVlMmU1NTE3MTc4Zjc4YzU1NTQxZjI0YTA4NWYwMDQwYjViYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTIyOTQsNyArMjI5
NCw3IEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X2FkanVzdFRyYWlsaW5nTmV3bGluZSgpCiAKIE5v
ZGUqIEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNhY2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0
ZWQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGF1
dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25TaGFkb3dJbmNsdWRpbmdBbmNlc3RvcihzdGFydCwg
ZW5kKTsKKyAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Io
c3RhcnQsIGVuZCk7CiAgICAgTm9kZSogYW5jZXN0b3IgPSBzdGFydC5jb250YWluZXJOb2RlKCk7
CiAKICAgICB3aGlsZSAoYW5jZXN0b3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRl
eCBkMjIxMDhiNjUxZmRjY2NiNDEzZGYxZjcwZWI3ODEyZmE0ZDkyYWQ5Li4yN2JjYWVlZDM2ZmVh
NjEwOTA0ODE1MTRlMTZlMjU4MDhhMDIyY2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CkBAIC04NDIsNyArODQyLDcgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICBpZiAoIWNv
bXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVuZCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCi0gICAgUmVmUHRyPE5vZGU+IGNvbW1vbkFuY2VzdG9yID0gY29tbW9uU2hhZG93SW5jbHVk
aW5nQW5jZXN0b3Ioc3RhcnQsIGVuZCk7CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKHN0YXJ0LCBlbmQpOwogICAgIGlmICghY29tbW9uQW5jZXN0b3Ip
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9k
eUVsZW1lbnQuaAppbmRleCBmNmE4MDFkYjQwNDA2ZGViMTZmOWQ3N2UzNTAzMmYyN2Y5MzU1ZDAy
Li5kYTcyYWFmN2U3NWJiOWM3ZWUzOGY5YTUyYWNhMGMyNTM0NjQzODNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEJvZHlFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgSFRNTEJvZHlFbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsK
ICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEhUTUxCb2R5RWxlbWVudCk7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxIVE1MQm9keUVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SFRNTEJvZHlFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQm
KTsKICAgICBzdGF0aWMgUmVmPEhUTUxCb2R5RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCYpOwogICAgIHZpcnR1YWwgfkhUTUxCb2R5RWxlbWVudCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmgKaW5kZXggYTI3Y2IxMGZkYzIyZDVhOWJiNzg2
ZjFmYTIwYzY5MjZmZDQ5YmM3NS4uNjkyOTFhMjlhYjUyYWEyZjRkN2IwZDA0NjVmYjk1ODUxMTIw
YzVmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuaApAQCAtMjksNyArMjksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MRGl2RWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChIVE1MRGl2RWxlbWVudCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxIVE1MRGl2RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxIVE1MRGl2RWxlbWVudD4gY3JlYXRlKERv
Y3VtZW50Jik7CiAgICAgc3RhdGljIFJlZjxIVE1MRGl2RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSHRtbEVsZW1lbnQuaAppbmRleCAxMjE5NWQzZDYxMzU5MTgwZTZjODlmYzA1YjNjYmY4ODhl
NTdhNzA5Li5iNjg1Mjg4Njk3NjNhNGIzZDE4NzhlNDU5ZDI5MDRjNjczZTliMmRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgSFRNTEh0bWxFbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVt
ZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEhUTUxIdG1sRWxlbWVudCk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxIVE1MSHRtbEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCYpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SFRNTEh0bWxFbGVtZW50PiBjcmVhdGUoRG9j
dW1lbnQmKTsKICAgICBzdGF0aWMgUmVmPEhUTUxIdG1sRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCiAgICAgdm9pZCBpbnNlcnRlZEJ5UGFyc2VyKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBhODk4
ODNmYWQzMGQ5NzlmZWU2YThhZDMzNDJjOGQyYmI1MzQ5NDczLi44ODE2ODU5NDYxODRlN2M0YTk3
NjZlYWFlM2I1MWNkOTkwMmQ0YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKQEAgLTEwMyw2ICsxMDMsMTEgQEAgUmVmPEhUTUxUZXh0QXJlYUVsZW1l
bnQ+IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW0KICAgICByZXR1cm4gdGV4dEFyZWE7CiB9CiAKK1JlZjxIVE1MVGV4dEFyZWFFbGVtZW50PiBI
VE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIHJl
dHVybiBjcmVhdGUodGV4dGFyZWFUYWcsIGRvY3VtZW50LCBudWxscHRyKTsKK30KKwogdm9pZCBI
VE1MVGV4dEFyZWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3Qm
IHJvb3QpCiB7CiAgICAgcm9vdC5hcHBlbmRDaGlsZChUZXh0Q29udHJvbElubmVyVGV4dEVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5oCmluZGV4IGRkMTA3YzM4OTUzMDQ5YTNiMWU1NzA4NjE2MWIyNjJiZGFkNDg2YWQu
LjAxN2QwZTNhMWFmMzQ3ZTI3MDBiOWZjMWJlZGVhNmQ5NzcyNjdiYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIFZp
c2libGVTZWxlY3Rpb247CiBjbGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50IGZpbmFsIDogcHVibGlj
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEhUTUxUZXh0QXJlYUVsZW1lbnQpOwogcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Jik7CiAgICAgc3RhdGlj
IFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50JiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKICAgICB1bnNpZ25lZCBjb2xzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xzOyB9CkBAIC01NCw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBib29sIHRv
b0xvbmcoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBTdHJpbmcm
KSBjb25zdDsKICAgICAKLSAgICBSZWZQdHI8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50PiBp
bm5lclRleHRFbGVtZW50KCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4gaW5uZXJUZXh0RWxlbWVudCgpIGNvbnN0IGZp
bmFsOwogICAgIFJlbmRlclN0eWxlIGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJikgZmluYWw7CiAgICAgdm9pZCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVt
ZW50KGNvbnN0IEVsZW1lbnQmKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwCmluZGV4IDNlZjY2ZTU5OWE5YWY2YWVkZmFkZGExMDU1ZDFiMTc3YzBlNDJhM2EuLjk2NDQ5
ZDMyN2FlYjlhOTFjZmVkNzkyOWNhNmMzNjY0MTIwMjA1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAKQEAgLTMzNiwxNSArMzM2LDEzIEBAIHZvaWQgRE9NU2VsZWN0aW9uOjph
ZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsK
IAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2Vs
ZWN0aW9uLmlzTm9uZSgpKSB7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkg
ewogICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBub3JtYWxpemVkUmFuZ2UgPSBj
cmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
OwotICAgIGlmICghbm9ybWFsaXplZFJhbmdlKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRv
IG5vcm1hbGl6ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKTsKICAgICBh
dXRvIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9f
U1RBUlQsICpub3JtYWxpemVkUmFuZ2UpOwogICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewogICAgICAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2VsZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGlu
ZyBpZiB0aGUgdHdvIHJhbmdlcyBkb24ndCBpbnRlcnNlY3QuCkBAIC0zNTMsNyArMzUxLDcgQEAg
dm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgICAgIHJl
c3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5v
cm1hbGl6ZWRSYW5nZSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAv
LyBUaGUgcmFuZ2VzIGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRv
KHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgbm9ybWFsaXplZFJhbmdlLT5lbmRQb3NpdGlvbigpLCBE
T1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VEZXByZWNh
dGVkTGVnYWN5UG9zaXRpb24oJnJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLnN0YXJ0T2Zm
c2V0KCkpLCBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZub3JtYWxpemVkUmFuZ2UtPmVu
ZENvbnRhaW5lcigpLCBub3JtYWxpemVkUmFuZ2UtPmVuZE9mZnNldCgpKSwgRE9XTlNUUkVBTSk7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2Ug
Y29udGFpbnMgdGhlIG9yaWdpbmFsIHJhbmdlLgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CkBAIC0zNjksNyArMzY3LDcgQEAg
dm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZSgqbm9ybWFsaXplZFJhbmdl
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZXMg
aW50ZXJzZWN0LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obm9ybWFsaXplZFJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwor
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obWFrZURlcHJlY2F0ZWRMZWdhY3lQb3Np
dGlvbigmbm9ybWFsaXplZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBub3JtYWxpemVkUmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCkpLCBtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKCZyYW5nZS5lbmRD
b250YWluZXIoKSwgcmFuZ2UuZW5kT2Zmc2V0KCkpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTQwNCw3ICs0MDIsNyBAQCBib29sIERPTVNlbGVjdGlv
bjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogCiAg
ICAgUmVmPE5vZGU+IHByb3RlY3RlZE5vZGUobm9kZSk7CiAgICAgYXV0byBzZWxlY3RlZFJhbmdl
ID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFz
ZWxlY3RlZFJhbmdlKQorICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5z
dGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDcyMWVlMGQwMDVlZDRjYTdhYTNmNDM2NTIzMGM3NWUw
ZjAxODVhODguLjQ5NzI5ZDA5Njk3ODAxMWU4ZTc1MGFhMzg0OGI2YmMzNDAwZTMwNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcApAQCAtODU5LDkgKzg1OSwxMCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlUmFu
Z2VzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZlY3RvcjxGaW5kUmVwbGFjZW1lbnRSYW5nZT4mIHJhbmdl
cwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChmaXJzdEZyYW1lID09
IHNlY29uZEZyYW1lKSB7Ci0gICAgICAgICAgICAvLyBjb21wYXJlUG9zaXRpb25zIGlzIHVzZWQg
aGVyZSBpbnN0ZWFkIG9mIE5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIGJlY2F1c2Ugc29t
ZSBlZGl0aW5nIHJvb3RzIG1heSBleGlzdCBpbnNpZGUgc2hhZG93IHJvb3RzLgotICAgICAgICAg
ICAgcmV0dXJuIGNvbXBhcmVQb3NpdGlvbnMoeyBmaXJzdE5vZGUuZ2V0KCksIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQmVmb3JlQ2hpbGRyZW4gfSwgeyBzZWNvbmROb2RlLmdldCgpLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVuIH0pID4gMDsKKyAgICAgICAgICAgIC8vIFVzZSBkb2N1
bWVudE9yZGVyIGluc3RlYWQgb2YgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24gYmVjYXVz
ZSBzb21lIGVkaXRpbmcgcm9vdHMgYXJlIGluc2lkZSBzaGFkb3cgcm9vdHMuCisgICAgICAgICAg
ICByZXR1cm4gaXNfZ3QoZG9jdW1lbnRPcmRlcigqZmlyc3ROb2RlLCAqc2Vjb25kTm9kZSkpOwog
ICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIGZyYW1lVG9UcmF2ZXJzYWxJbmRleE1hcC5nZXQo
Zmlyc3RGcmFtZSkgPiBmcmFtZVRvVHJhdmVyc2FsSW5kZXhNYXAuZ2V0KHNlY29uZEZyYW1lKTsK
ICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KaW5kZXggMzAyMTFjOTc4N2Q2Mzhj
MWE2ZjVkOGRlMDU1NDgwYWQ0MzZmNTA5Yi4uY2YyNjlhMWNkZDMwMmE0M2I5N2FiMmI2MDAwYzBh
ZDMwMjgwZTgyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCkBAIC0xMzQsNyArMTM0LDgg
QEAgLSAoTlNBcnJheSAqKXRleHRSZWN0cwogCiAtIChXS0RPTVJhbmdlICopcmFuZ2VCeUV4cGFu
ZGluZ1RvV29yZEJvdW5kYXJ5QnlDaGFyYWN0ZXJzOihOU1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5E
aXJlY3Rpb246KFdLRE9NUmFuZ2VEaXJlY3Rpb24pZGlyZWN0aW9uCiB7Ci0gICAgYXV0byBuZXdS
YW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5
KGRpcmVjdGlvbiA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/ICBfaW1wbC0+ZW5kUG9z
aXRpb24oKSA6IF9pbXBsLT5zdGFydFBvc2l0aW9uKCksIGNoYXJhY3RlcnMsIGRpcmVjdGlvbiA9
PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlv
bjo6Rm9yd2FyZCA6IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOworICAg
IGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKl9pbXBsKTsKKyAgICBhdXRvIG5ld1Jhbmdl
ID0gcmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobWFr
ZURlcHJlY2F0ZWRMZWdhY3lQb3NpdGlvbihkaXJlY3Rpb24gPT0gV0tET01SYW5nZURpcmVjdGlv
bkZvcndhcmQgPyByYW5nZS5lbmQgOiByYW5nZS5zdGFydCksIGNoYXJhY3RlcnMsIGRpcmVjdGlv
biA9PSBXS0RPTVJhbmdlRGlyZWN0aW9uRm9yd2FyZCA/IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVj
dGlvbjo6Rm9yd2FyZCA6IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpOwog
ICAgIHJldHVybiBbW1tXS0RPTVJhbmdlIGFsbG9jXSBfaW5pdFdpdGhJbXBsOmNyZWF0ZUxpdmVS
YW5nZShuZXdSYW5nZSkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0
aW9uLm1tCmluZGV4IGYyMGJjNGJiMWNjOTM3YzkwY2Y0ZTgzMzhlOTQ5NzQ3YTcwODhmZTkuLjk3
OGFiMTE2YzM2YjUyZTdmNjUyNWE3YmQ2MTMwMmVhMDMyZTQ3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9z
aXRpb24ubW0KQEAgLTQ1NSwxNCArNDU1LDE0IEBAIEBpbXBsZW1lbnRhdGlvbiBET01SYW5nZSAo
VmlzaWJsZVBvc2l0aW9uRXh0ZW5zaW9ucykKIAogLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopc3Rh
cnRQb3NpdGlvbgogewotICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJu
IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246VmlzaWJsZVBvc2l0aW9u
KHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpXTsKKyAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYp
OworICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOm1h
a2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oJnJhbmdlLnN0YXJ0Q29udGFpbmVyKCksIHJhbmdl
LnN0YXJ0T2Zmc2V0KCkpXTsKIH0KIAogLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopZW5kUG9zaXRp
b24KIHsKLSAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNlbGYpOwotICAgIHJldHVybiBbV2ViVmlz
aWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOlZpc2libGVQb3NpdGlvbihyYW5nZS0+
ZW5kUG9zaXRpb24oKSldOworICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7CisgICAgcmV0
dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246bWFrZURlcHJlY2F0
ZWRMZWdhY3lQb3NpdGlvbigmcmFuZ2UuZW5kQ29udGFpbmVyKCksIHJhbmdlLmVuZE9mZnNldCgp
KV07CiB9CiAKIC0gKERPTVJhbmdlICopZW5jbG9zaW5nV29yZFJhbmdlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBlZjczNTAwNGVhNmQwNWU5MTI4
NmVjZmE2ZjBmOGQ0MDEwNWU2NmRlLi5hOGVjNTJmYjU4ZWI0ZjhiODU3Y2U2ZmE0OGVlY2E5Njli
ZGI5NTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
QEAgLTE5NjgsNyArMTk2OCw4IEBAIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoTWFya3Vw
U3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nCiAgICAgW3NlbGYg
X3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6
c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOk5P
XTsKIH0KIAotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykKKwog
Ly8gRGV0ZXJtaW5lcyB3aGV0aGVyIHdoaXRlc3BhY2UgbmVlZHMgdG8gYmUgYWRkZWQgYXJvdW5k
IGFTdHJpbmcgdG8gcHJlc2VydmUgcHJvcGVyIHNwYWNpbmcgYW5kCiAvLyBwdW5jdHVhdGlvbiB3
aGVuIGl0J3MgaW5zZXJ0ZWQgaW50byB0aGUgcmVjZWl2ZXIncyB0ZXh0IG92ZXIgY2hhclJhbmdl
LiBSZXR1cm5zIGJ5IHJlZmVyZW5jZQogLy8gaW4gYmVmb3JlU3RyaW5nIGFuZCBhZnRlclN0cmlu
ZyBhbnkgd2hpdGVzcGFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCwgdW5sZXNzIGVpdGhlciBvciBi
b3RoIGFyZQpAQCAtMTk4MSwzMCArMTk4MiwyNSBAQCAtICh2b2lkKV9zbWFydEluc2VydEZvclN0
cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBsYWNpbmdSYW5nZTooRE9NUmFuZ2UgKgog
ICAgIGlmIChhZnRlclN0cmluZykKICAgICAgICAgKmFmdGVyU3RyaW5nID0gbmlsOwogICAgICAg
ICAKLSAgICAvLyBpbnNwZWN0IGRlc3RpbmF0aW9uCi0gICAgV2ViQ29yZTo6Tm9kZSAqc3RhcnRD
b250YWluZXIgPSBjb3JlKFtyYW5nZVRvUmVwbGFjZSBzdGFydENvbnRhaW5lcl0pOwotICAgIFdl
YkNvcmU6Ok5vZGUgKmVuZENvbnRhaW5lciA9IGNvcmUoW3JhbmdlVG9SZXBsYWNlIGVuZENvbnRh
aW5lcl0pOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY29yZShyYW5nZVRvUmVw
bGFjZSkpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKIAotICAgIFdlYkNvcmU6
OlBvc2l0aW9uIHN0YXJ0UG9zKHN0YXJ0Q29udGFpbmVyLCBbcmFuZ2VUb1JlcGxhY2Ugc3RhcnRP
ZmZzZXRdLCBXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKLSAg
ICBXZWJDb3JlOjpQb3NpdGlvbiBlbmRQb3MoZW5kQ29udGFpbmVyLCBbcmFuZ2VUb1JlcGxhY2Ug
ZW5kT2Zmc2V0XSwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7
CisgICAgYXV0byBzdGFydCA9IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiB7IG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+c3RhcnQpIH07CisgICAgYXV0byBlbmQgPSBXZWJDb3Jl
OjpWaXNpYmxlUG9zaXRpb24geyBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24ocmFuZ2UtPmVu
ZCkgfTsKIAotICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3MgPSBX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24oc3RhcnRQb3MsIFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZG
SU5JVFkpOwotICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zID0gV2Vi
Q29yZTo6VmlzaWJsZVBvc2l0aW9uKGVuZFBvcywgV2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklU
WSk7CisgICAgYm9vbCBhZGRMZWFkaW5nU3BhY2UgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLmxl
YWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oV2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1
ZSkuaXNOdWxsKCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydCk7CisgICAgaWYgKGFkZExl
YWRpbmdTcGFjZSkgeworICAgICAgICBpZiAoVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIgPSBzdGFy
dC5wcmV2aW91cygpLmNoYXJhY3RlckFmdGVyKCkpCisgICAgICAgICAgICBhZGRMZWFkaW5nU3Bh
Y2UgPSAhV2ViQ29yZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQocHJldmlvdXNDaGFy
YWN0ZXIsIHRydWUpOworICAgIH0KICAgICAKLSAgICAvLyB0aGlzIGNoZWNrIGFsc28gZW5zdXJl
cyBzdGFydENvbnRhaW5lciwgc3RhcnRQb3MsIGVuZENvbnRhaW5lciwgYW5kIGVuZFBvcyBhcmUg
bm9uLW51bGwKLSAgICBpZiAoc3RhcnRWaXNpYmxlUG9zLmlzTnVsbCgpIHx8IGVuZFZpc2libGVQ
b3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBib29sIGFkZFRyYWlsaW5nU3BhY2Ug
PSBlbmQuZGVlcEVxdWl2YWxlbnQoKS50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihXZWJDb3Jl
OjpWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVlKS5pc051bGwoKSAmJiAhaXNFbmRPZlBhcmFncmFw
aChlbmQpOworICAgIGlmIChhZGRUcmFpbGluZ1NwYWNlKSB7CisgICAgICAgIGlmIChVQ2hhciBm
b2xsb3dpbmdDaGFyYWN0ZXIgPSBlbmQuY2hhcmFjdGVyQWZ0ZXIoKSkKKyAgICAgICAgICAgIGFk
ZFRyYWlsaW5nU3BhY2UgPSAhV2ViQ29yZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQo
Zm9sbG93aW5nQ2hhcmFjdGVyLCBmYWxzZSk7CisgICAgfQogCi0gICAgYm9vbCBhZGRMZWFkaW5n
U3BhY2UgPSBzdGFydFBvcy5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFdlYkNvcmU6OlZQX0RF
RkFVTFRfQUZGSU5JVFksIHRydWUpLmlzTnVsbCgpICYmICFpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3Rh
cnRWaXNpYmxlUG9zKTsKLSAgICBpZiAoYWRkTGVhZGluZ1NwYWNlKQotICAgICAgICBpZiAoVUNo
YXIgcHJldmlvdXNDaGFyID0gc3RhcnRWaXNpYmxlUG9zLnByZXZpb3VzKCkuY2hhcmFjdGVyQWZ0
ZXIoKSkKLSAgICAgICAgICAgIGFkZExlYWRpbmdTcGFjZSA9ICFXZWJDb3JlOjppc0NoYXJhY3Rl
clNtYXJ0UmVwbGFjZUV4ZW1wdChwcmV2aW91c0NoYXIsIHRydWUpOwotICAgIAotICAgIGJvb2wg
YWRkVHJhaWxpbmdTcGFjZSA9IGVuZFBvcy50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihXZWJD
b3JlOjpWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVlKS5pc051bGwoKSAmJiAhaXNFbmRPZlBhcmFn
cmFwaChlbmRWaXNpYmxlUG9zKTsKLSAgICBpZiAoYWRkVHJhaWxpbmdTcGFjZSkKLSAgICAgICAg
aWYgKFVDaGFyIHRoaXNDaGFyID0gZW5kVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKQotICAg
ICAgICAgICAgYWRkVHJhaWxpbmdTcGFjZSA9ICFXZWJDb3JlOjppc0NoYXJhY3RlclNtYXJ0UmVw
bGFjZUV4ZW1wdCh0aGlzQ2hhciwgZmFsc2UpOwotICAgIAogICAgIC8vIGluc3BlY3Qgc291cmNl
CiAgICAgYm9vbCBoYXNXaGl0ZXNwYWNlQXRTdGFydCA9IGZhbHNlOwogICAgIGJvb2wgaGFzV2hp
dGVzcGFjZUF0RW5kID0gZmFsc2U7CkBAIC0yMDE5LDE0ICsyMDE1LDE1IEBAIC0gKHZvaWQpX3Nt
YXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2luZ1Jhbmdl
OihET01SYW5nZSAqCiAgICAgICAgICAgICBoYXNXaGl0ZXNwYWNlQXRFbmQgPSBZRVM7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBpc3N1ZSB0aGUgdmVyZGljdAogICAgIGlmIChi
ZWZvcmVTdHJpbmcgJiYgYWRkTGVhZGluZ1NwYWNlICYmICFoYXNXaGl0ZXNwYWNlQXRTdGFydCkK
ICAgICAgICAgKmJlZm9yZVN0cmluZyA9IEAiICI7CiAgICAgaWYgKGFmdGVyU3RyaW5nICYmIGFk
ZFRyYWlsaW5nU3BhY2UgJiYgIWhhc1doaXRlc3BhY2VBdEVuZCkKICAgICAgICAgKmFmdGVyU3Ry
aW5nID0gQCIgIjsKIH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKIAogLSAoTlNNdXRhYmxlRGljdGlvbmFyeSAqKV9jYWNoZWFiaWxp
dHlEaWN0aW9uYXJ5CiB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggYTk3N2FmOGI3OTMzMjNkNjg3YjdhNTdkMDMxMWI1MDYwZmI4YzEzNi4uOTRj
OWUwOGMwZTYxZDBlYzYwYmQwNTUxMjU2NzYyMDIyMTg2NjdlMCAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA4
LTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgZG9j
dW1lbnRPcmRlciBmdW5jdGlvbiwgc3RhcnQgcmVmYWN0b3JpbmcgdG8gdXNlIGl0IGluc3RlYWQg
b2YgUmFuZ2U6OmNvbXBhcmUgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU1NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBEb2N1bWVudE9yZGVyLmNwcC4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHA6IEFkZGVkLgorICAg
ICAgICBSZWxhdGl2ZWx5IHRob3JvdWdoIHRlc3Qgb2YgdGhyZWUgZGlmZmVyZW50IGRvY3VtZW50
T3JkZXIgZnVuY3Rpb25zLgorICAgICAgICBDb3VsZCBzdGlsbCB1c2UgZXZlbiBtb3JlIHRlc3Qg
Y2FzZXMgaW52b2x2aW5nIGRpZmZlcmVudCB0eXBlcyBvZiBzaGFkb3cgdHJlZXMuCisKIDIwMjAt
MDgtMTcgIFNhYWdhciBKaGEgIDxzYWFnYXJAc2FhZ2FyamhhLmNvbT4KIAogICAgICAgICBTdG9w
IHdlYmtpdHB5IGZyb20gd2FybmluZyBhYm91dCBub3QgaGF2aW5nIGEgNjQtYml0IGdpdCBvbiBB
cHBsZSBzaWxpY29uCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDA4MTJiZmFkNjc4YWQ1MjYx
NzU0NmNkZjJhMmQzOWFlNGRjNTNhMGQuLjk5YmIzOGQ1ZmVmZDU4ZjEyNzYwMGFhMTRjOTMxYmFm
MjY1NGNhOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04MDUsNiArODA1LDcgQEAKIAkJ
OTM3QTZDOEEyNDM1N0MxNzAwQzNBNkIwIC8qIEtpbGxXZWJQcm9jZXNzV2l0aE9wZW5Db25uZWN0
aW9uLTEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzdBNkM4ODI0MzU3QkYzMDBDM0E2QjAgLyogS2lsbFdlYlByb2Nlc3NXaXRoT3Bl
bkNvbm5lY3Rpb24tMS5odG1sICovOyB9OwogCQk5MzdBNkM4QjI0MzU3QzE3MDBDM0E2QjAgLyog
S2lsbFdlYlByb2Nlc3NXaXRoT3BlbkNvbm5lY3Rpb24tMi5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzN0E2Qzg5MjQzNTdCRjMwMEMz
QTZCMCAvKiBLaWxsV2ViUHJvY2Vzc1dpdGhPcGVuQ29ubmVjdGlvbi0yLmh0bWwgKi87IH07CiAJ
CTkzN0I1NjlFMjNDRDIzREIwMDJBRTY0MCAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNx
bGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCQ0JDODEyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUu
c3FsaXRlMyAqLzsgfTsKKwkJOTM5MTVBMTcyNERCNjZDNzAwMTlGRjQzIC8qIERvY3VtZW50T3Jk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5
MTVBMTYyNERCNjZDNzAwMTlGRjQzIC8qIERvY3VtZW50T3JkZXIuY3BwICovOyB9OwogCQk5Mzk5
QkEwNDIzNzExMTQwMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEwMTIzNzExMEFFMDA4
MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0gKi87IH07CiAJCTkzOTlCQTA1MjM3MTEx
NEYwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAyMjM3MTEwQkYwMDgz
OTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1sICovOyB9OwogCQk5Mzk5QkEwNjIzNzEx
MTRGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEwMzIzNzExMEJG
MDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCAqLzsgfTsKQEAgLTIxMTQs
NyArMjExNSw2IEBACiAJCTU3NEY1NUQwMjA0RDQ3MUMwMDI5NDhDNiAvKiBTZWN1cml0eS5mcmFt
ZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFNlY3VyaXR5LmZyYW1ld29yazsgcGF0aCA9IFN5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvU2VjdXJpdHkuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RL
Uk9PVDsgfTsKIAkJNTc1MUIyODkyNDlENUI5OTAwNjY0QzJBIC8qIHdlYi1hdXRoZW50aWNhdGlv
bi1tYWtlLWNyZWRlbnRpYWwtaGlkLXBpbi1nZXQtcGluLXRva2VuLWZha2UtcGluLWludmFsaWQt
ZXJyb3ItcmV0cnkuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJ3ZWItYXV0aGVudGljYXRpb24tbWFrZS1jcmVk
ZW50aWFsLWhpZC1waW4tZ2V0LXBpbi10b2tlbi1mYWtlLXBpbi1pbnZhbGlkLWVycm9yLXJldHJ5
Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzUzN0VFNzI0QkVBMDE5MDA0
OERCQTUgLyogd2ViLWF1dGhlbnRpY2F0aW9uLWdldC1hc3NlcnRpb24tbmZjLXBpbi1kaXNjb25u
ZWN0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSAid2ViLWF1dGhlbnRpY2F0aW9uLWdldC1hc3NlcnRpb24tbmZj
LXBpbi1kaXNjb25uZWN0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1NzU4
NTk3RDIzQTI1MjdBMDBDNzQ1NzIgLyogQ3RhcFBpblRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Rh
cFBpblRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc1ODU5N0UyM0EyNTI3
QTAwQzc0NTcyIC8qIEN0YXBQaW5UZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN0YXBQaW5U
ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc1ODU5ODMyM0MzQzM2MjAw
Qzc0NTcyIC8qIHdlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNyZWRlbnRpYWwtaGlkLXBpbi1nZXQt
cmV0cmllcy1lcnJvci5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIndlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNy
ZWRlbnRpYWwtaGlkLXBpbi1nZXQtcmV0cmllcy1lcnJvci5odG1sIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTc1OTlFMjAxRjA3MTkxNzAwQTNGQjhDIC8qIEluZGV4ZWREQlN0cnVj
dHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEluZGV4ZWREQlN0cnVjdHVyZWRDbG9uZUJhY2t3YXJkQ29tcGF0
aWJpbGl0eS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNzksNiArMjM3OSw3
IEBACiAJCTkzNkY3MjdGMUNEN0Q5RDAwMDY4QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlv
Lm1wNCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZp
bGU7IHBhdGggPSAibGFyZ2UtdmlkZW8td2l0aC1hdWRpby5tcDQiOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzdBNkM4ODI0MzU3QkYzMDBDM0E2QjAgLyogS2lsbFdlYlByb2Nlc3NX
aXRoT3BlbkNvbm5lY3Rpb24tMS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIktp
bGxXZWJQcm9jZXNzV2l0aE9wZW5Db25uZWN0aW9uLTEuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzN0E2Qzg5MjQzNTdCRjMwMEMzQTZCMCAvKiBLaWxsV2ViUHJvY2Vzc1dp
dGhPcGVuQ29ubmVjdGlvbi0yLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiS2ls
bFdlYlByb2Nlc3NXaXRoT3BlbkNvbm5lY3Rpb24tMi5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTM5MTVBMTYyNERCNjZDNzAwMTlGRjQzIC8qIERvY3VtZW50T3JkZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRPcmRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTlCQTAxMjM3MTEwQUUwMDgzOTJCRiAv
KiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEluZGV4ZWREQkluUGFnZUNhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5Mzk5QkEwMjIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IEluZGV4ZWREQkluUGFnZUNhY2hlLmh0
bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTlCQTAzMjM3MTEwQkYwMDgzOTJC
RiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTM0MzUsMTIgKzM0MzYsMTIgQEAKIAkJCQk0NENGMzFGQjI0OTkzRjY2MDA5Q0I2
Q0IgLyogQ29udGV4dE1lbnVBY3Rpb24uY3BwICovLAogCQkJCUNENTQ1MUU5MTlFNDFGOUQwMDE2
OTM2RiAvKiBDU1NQYXJzZXIuY3BwICovLAogCQkJCTU3NTg1OTdFMjNBMjUyN0EwMEM3NDU3MiAv
KiBDdGFwUGluVGVzdC5jcHAgKi8sCi0JCQkJNTc1ODU5N0QyM0EyNTI3QTAwQzc0NTcyIC8qIEN0
YXBQaW5UZXN0LmggKi8sCiAJCQkJNTcyQjQwMzMyMTc2OUE4ODAwMEFENDNFIC8qIEN0YXBSZXF1
ZXN0VGVzdC5jcHAgKi8sCiAJCQkJNTcyQjQwNDMyMTc4MUI0MjAwMEFENDNFIC8qIEN0YXBSZXNw
b25zZVRlc3QuY3BwICovLAogCQkJCTI2MEJBNTc4MUIxRDJFN0IwMDRGQTA3QyAvKiBERkFDb21i
aW5lci5jcHAgKi8sCiAJCQkJMjYwQkE1N0ExQjFEMkVFMjAwNEZBMDdDIC8qIERGQUhlbHBlcnMu
aCAqLywKIAkJCQkyNkY2RTFFRjFBREM3NDlCMDBERTY5NkIgLyogREZBTWluaW1pemVyLmNwcCAq
LywKKwkJCQk5MzkxNUExNjI0REI2NkM3MDAxOUZGNDMgLyogRG9jdW1lbnRPcmRlci5jcHAgKi8s
CiAJCQkJMzE1MTE4MEYxREIxQURENTAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0cy5jcHAg
Ki8sCiAJCQkJNTc5NjUxRTYyMTZCRkQ1MzAwNkVCRkU1IC8qIEZpZG9IaWRNZXNzYWdlVGVzdC5j
cHAgKi8sCiAJCQkJNTcyQjQwMzUyMTc2QTAyOTAwMEFENDNFIC8qIEZpZG9UZXN0RGF0YS5oICov
LApAQCAtNDg2NSw5ICs0ODY2LDkgQEAKIAkJCQk3QzgzREVEMjFEMEE1OTBDMDBGRUJDRjMgLyog
SGFzaE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVENDFEMEE1OTBDMDBGRUJDRjMg
LyogSGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzhCRkY3MTIzQzAxMDdBMDBDMDA5
QjMgLyogSGV4TnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMzOTc2RDgzMjREQzQ3OUIw
MDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVF
MDFEMEE1OTBDMDBGRUJDRjMgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1M0ZDREU2QjIyOUVGRkI5MDA1OThFQ0YgLyogSXNvSGVhcC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NFQjYyQUIyMjM2MDlERTAwNjlDQkIwIC8qIEl0
ZXJhdG9yUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0EwNTA5NDExRkI5RjA2NDAwQjMz
RkI4IC8qIEpTT05WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzFDMUQ4RTFERjhFRjcy
MDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUwNTksNiArNTA2
MCw3IEBACiAJCQkJNzNCRDczMTgyM0E4NDY1MDAwMjBGNDUwIC8qIERpc3BsYXlOYW1lLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE4RUU1MUIyMEE3OEQwMDAwRTAyNEYzIC8qIERvQWZ0ZXJOZXh0
UHJlc2VudGF0aW9uVXBkYXRlQWZ0ZXJDcmFzaC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEN0ZE
MTkzMjI0MTkwODcwMDc4ODdGMSAvKiBEb2N1bWVudEVkaXRpbmdDb250ZXh0Lm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJOTM5MTVBMTcyNERCNjZDNzAwMTlGRjQzIC8qIERvY3VtZW50T3JkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRUIxQTQxMUFFNjAwNDQ3QzRDIC8qIERvY3VtZW50
U3RhcnRVc2VyU2NyaXB0QWxlcnRDcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VC
QjFBNDExQTdFMDA0NDdDNEMgLyogRE9NSFRNTFRhYmxlQ2VsbENlbGxBYm92ZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTJENTFBMEM3MUM4QkYwMEMwMDc2NUM0NSAvKiBET01IVE1MVmlkZW9FbGVt
ZW50V3JhcHBlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3ZTY3ZDRjZDBj
YWQ1YjY2YjliOTY3ZmM2OTU0OTUwMDJiNzQzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKQEAgLTAsMCArMSw0
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0JvdW5kYXJ5UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MQm9keUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxE
aXZFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSHRtbEVsZW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bv
c2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaD4K
KworI2RlZmluZSBFWFBFQ1RfQk9USChhLCBiLCBmb3J3YXJkLCByZXZlcnNlZCkgZG8geyBFWFBF
Q1RfU1RSRVEoc3RyaW5nKGRvY3VtZW50T3JkZXIoYSwgYikpLCBmb3J3YXJkKTsgRVhQRUNUX1NU
UkVRKHN0cmluZyhkb2N1bWVudE9yZGVyKGIsIGEpKSwgcmV2ZXJzZWQpOyB9IHdoaWxlICgwKQor
I2RlZmluZSBFWFBFQ1RfRVFVSVZBTEVOVChhLCBiKSBFWFBFQ1RfQk9USChhLCBiLCAiZXF1aXZh
bGVudCIsICJlcXVpdmFsZW50IikKKyNkZWZpbmUgRVhQRUNUX0xFU1MoYSwgYikgRVhQRUNUX0JP
VEgoYSwgYiwgImxlc3MiLCAiZ3JlYXRlciIpCisjZGVmaW5lIEVYUEVDVF9VTk9SREVSRUQoYSwg
YikgRVhQRUNUX0JPVEgoYSwgYiwgInVub3JkZXJlZCIsICJ1bm9yZGVyZWQiKQorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMg
UmVmPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudCgpCit7CisgICAgSFRNTE5hbWVzOjppbml0KCk7
CisgICAgYXV0byBkb2N1bWVudCA9IERvY3VtZW50OjpjcmVhdGUoYWJvdXRCbGFua1VSTCgpKTsK
KyAgICBhdXRvIGRvY3VtZW50RWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKKyAgICBkb2N1bWVudC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50KTsKKyAgICBh
dXRvIGJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZG9jdW1l
bnRFbGVtZW50LT5hcHBlbmRDaGlsZChib2R5KTsKKyAgICByZXR1cm4gZG9jdW1lbnQ7Cit9CisK
K3N0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50KE5vZGUmIG5vZGUsIHVuc2ln
bmVkIG9mZnNldCkKK3sKKyAgICByZXR1cm4geyBub2RlLCBvZmZzZXQgfTsKK30KKworY29uc3Rl
eHByIGNvbnN0IGNoYXIqIHN0cmluZyhQYXJ0aWFsT3JkZXJpbmcgb3JkZXJpbmcpCit7CisgICAg
aWYgKGlzX2x0KG9yZGVyaW5nKSkKKyAgICAgICAgcmV0dXJuICJsZXNzIjsKKyAgICBpZiAoaXNf
Z3Qob3JkZXJpbmcpKQorICAgICAgICByZXR1cm4gImdyZWF0ZXIiOworICAgIGlmIChpc19lcShv
cmRlcmluZykpCisgICAgICAgIHJldHVybiAiZXF1aXZhbGVudCI7CisgICAgcmV0dXJuICJ1bm9y
ZGVyZWQiOworfQorCitzdGF0aWMgUGFydGlhbE9yZGVyaW5nIG9wZXJhdG9yLShQYXJ0aWFsT3Jk
ZXJpbmcgb3JkZXJpbmcpCit7CisgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKKyAgICAgICAgcmV0
dXJuIFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlcjsKKyAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQor
ICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjpsZXNzOworICAgIHJldHVybiBvcmRlcmlu
ZzsKK30KKworVEVTVChEb2N1bWVudE9yZGVyLCBOb2RlKQoreworICAgIEhUTUxOYW1lczo6aW5p
dCgpOworCisgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYg
Ym9keSA9ICpkb2N1bWVudC0+Ym9keSgpOworCisgICAgRVhQRUNUX0VRVUlWQUxFTlQoZG9jdW1l
bnQsIGRvY3VtZW50KTsKKworICAgIEVYUEVDVF9FUVVJVkFMRU5UKGJvZHksIGJvZHkpOworICAg
IEVYUEVDVF9MRVNTKGRvY3VtZW50LCBib2R5KTsKKyAgICBFWFBFQ1RfTEVTUyhkb2N1bWVudCwg
Ym9keSk7CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBFWFBFQ1RfRVFVSVZBTEVOVChhLCBhKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKGJvZHks
IGEpOworICAgIEVYUEVDVF9VTk9SREVSRUQoYSwgYm9keSk7CisKKyAgICBib2R5LmFwcGVuZENo
aWxkKGEpOworICAgIEVYUEVDVF9MRVNTKGJvZHksIGEpOworICAgIEVYUEVDVF9MRVNTKGJvZHks
IGEpOworICAgIEVYUEVDVF9FUVVJVkFMRU5UKGEsIGEpOworCisgICAgYXV0byBiID0gSFRNTERp
dkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKyAg
ICBFWFBFQ1RfTEVTUyhib2R5LCBiKTsKKyAgICBFWFBFQ1RfTEVTUyhib2R5LCBiKTsKKyAgICBF
WFBFQ1RfTEVTUyhhLCBiKTsKKyAgICBFWFBFQ1RfTEVTUyhhLCBiKTsKKworICAgIGF1dG8gYyA9
IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGItPmFwcGVuZENoaWxkKGMp
OworICAgIEVYUEVDVF9MRVNTKGJvZHksIGMpOworICAgIEVYUEVDVF9MRVNTKGJvZHksIGMpOwor
ICAgIEVYUEVDVF9MRVNTKGEsIGMpOworICAgIEVYUEVDVF9MRVNTKGIsIGMpOworICAgIEVYUEVD
VF9MRVNTKGEsIGMpOworICAgIEVYUEVDVF9MRVNTKGIsIGMpOworCisgICAgYXV0byBkID0gSFRN
TERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYS0+YXBwZW5kQ2hpbGQoZCk7Cisg
ICAgRVhQRUNUX0xFU1MoYm9keSwgZCk7CisgICAgRVhQRUNUX0xFU1MoYm9keSwgZCk7CisgICAg
RVhQRUNUX0xFU1MoYSwgZCk7CisgICAgRVhQRUNUX0xFU1MoZCwgYik7CisgICAgRVhQRUNUX0xF
U1MoZCwgYyk7CisgICAgRVhQRUNUX0xFU1MoYSwgZCk7CisgICAgRVhQRUNUX0xFU1MoZCwgYik7
CisgICAgRVhQRUNUX0xFU1MoZCwgYyk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKGJv
ZHksIGYpOworICAgIEVYUEVDVF9VTk9SREVSRUQoZiwgYm9keSk7CisKKyAgICBhdXRvIGcgPSBI
VE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGMtPmFwcGVuZENoaWxk
KGcpOworICAgIEVYUEVDVF9MRVNTKGJvZHksIGcpOworCisgICAgYXV0byYgaCA9ICpnLT5pbm5l
clRleHRFbGVtZW50KCk7CisgICAgRVhQRUNUX0xFU1MoYm9keSwgaCk7Cit9CisKK1RFU1QoRG9j
dW1lbnRPcmRlciwgQm91bmRhcnlQb2ludE9mZnNldFplcm8pCit7CisgICAgYXV0byBkb2N1bWVu
dCA9IGNyZWF0ZURvY3VtZW50KCk7CisgICAgYXV0byYgYm9keSA9ICpkb2N1bWVudC0+Ym9keSgp
OworCisgICAgRVhQRUNUX0VRVUlWQUxFTlQobWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDAp
LCBtYWtlQm91bmRhcnlQb2ludChkb2N1bWVudCwgMCkpOworCisgICAgRVhQRUNUX0xFU1MobWFr
ZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSk7
CisKKyAgICBhdXRvIGEgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBF
WFBFQ1RfRVFVSVZBTEVOVChtYWtlQm91bmRhcnlQb2ludChhLCAwKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoYSwgMCkpOworICAgIEVYUEVDVF9VTk9SREVSRUQobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwg
MCksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDApKTsKKworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7
CisgICAgRVhQRUNUX0VRVUlWQUxFTlQobWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCksIG1ha2VCb3Vu
ZGFyeVBvaW50KGEsIDApKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5
LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCkpOworCisgICAgYXV0byBiID0gSFRNTERpdkVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChiKTsKKyAgICBF
WFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQo
YiwgMCkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGEsIDApLCBtYWtlQm91
bmRhcnlQb2ludChiLCAwKSk7CisKKyAgICBhdXRvIGMgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtl
Qm91bmRhcnlQb2ludChib2R5LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYywgMCkpOworICAgIEVY
UEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGEsIDApLCBtYWtlQm91bmRhcnlQb2ludChjLCAw
KSk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYiwgMCksIG1ha2VCb3VuZGFy
eVBvaW50KGMsIDApKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQpOworICAgIGEtPmFwcGVuZENoaWxkKGQpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3Vu
ZGFyeVBvaW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChkLCAwKSk7CisgICAgRVhQRUNU
X0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGQsIDApKTsK
KyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChkLCAwKSwgbWFrZUJvdW5kYXJ5UG9p
bnQoYiwgMCkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGQsIDApLCBtYWtl
Qm91bmRhcnlQb2ludChjLCAwKSk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKG1ha2VC
b3VuZGFyeVBvaW50KGJvZHksIDApLCBtYWtlQm91bmRhcnlQb2ludChmLCAwKSk7CisKKyAgICBh
dXRvIGcgPSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGF1dG8g
aCA9IGctPmlubmVyVGV4dEVsZW1lbnQoKTsKKyAgICBBU1NFUlRfVFJVRShoKTsKKyAgICBjLT5h
cHBlbmRDaGlsZChnKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAw
KSwgbWFrZUJvdW5kYXJ5UG9pbnQoZywgMCkpOworfQorCitURVNUKERvY3VtZW50T3JkZXIsIEJv
dW5kYXJ5UG9pbnRPZmZzZXRzKQoreworICAgIGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVu
dCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9jdW1lbnQtPmJvZHkoKTsKKworICAgIEVYUEVDVF9M
RVNTKG1ha2VCb3VuZGFyeVBvaW50KGRvY3VtZW50LCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoZG9j
dW1lbnQsIDEpKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAwKSwg
bWFrZUJvdW5kYXJ5UG9pbnQoZG9jdW1lbnQsIDEpKTsKKworICAgIGF1dG8gYSA9IEhUTUxEaXZF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7CisgICAg
RVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYSwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGJv
ZHksIDEpKTsKKworICAgIGF1dG8gYiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5
UG9pbnQoYm9keSwgMSksIG1ha2VCb3VuZGFyeVBvaW50KGIsIDApKTsKKyAgICBFWFBFQ1RfTEVT
UyhtYWtlQm91bmRhcnlQb2ludChiLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMikpOwor
CisgICAgYXV0byBjID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYi0+
YXBwZW5kQ2hpbGQoYyk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwg
MSksIG1ha2VCb3VuZGFyeVBvaW50KGMsIDApKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRh
cnlQb2ludChjLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYm9keSwgMikpOworICAgIEVYUEVDVF9M
RVNTKG1ha2VCb3VuZGFyeVBvaW50KGEsIDEpLCBtYWtlQm91bmRhcnlQb2ludChjLCAwKSk7Cisg
ICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYywgMCksIG1ha2VCb3VuZGFyeVBvaW50
KGIsIDEpKTsKKworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIGEtPmFwcGVuZENoaWxkKGQpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBv
aW50KGQsIDApLCBtYWtlQm91bmRhcnlQb2ludChib2R5LCAxKSk7CisgICAgRVhQRUNUX0xFU1Mo
bWFrZUJvdW5kYXJ5UG9pbnQoZCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGEsIDEpKTsKKyAgICBF
WFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChkLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYiwg
MSkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGQsIDApLCBtYWtlQm91bmRh
cnlQb2ludChjLCAxKSk7CisKKyAgICBhdXRvIGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
KyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBFWFBFQ1RfVU5PUkRFUkVEKG1ha2VCb3VuZGFy
eVBvaW50KGJvZHksIDEpLCBtYWtlQm91bmRhcnlQb2ludChmLCAwKSk7CisKKyAgICBhdXRvIGcg
PSBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGMtPmFwcGVuZENo
aWxkKGcpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGJvZHksIDEpLCBtYWtl
Qm91bmRhcnlQb2ludChnLCAwKSk7CisgICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQo
YywgMCksIG1ha2VCb3VuZGFyeVBvaW50KGMsIDEpKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91
bmRhcnlQb2ludChjLCAxKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYywgMikpOworICAgIEVYUEVDVF9M
RVNTKG1ha2VCb3VuZGFyeVBvaW50KGMsIDApLCBtYWtlQm91bmRhcnlQb2ludChjLCAyKSk7Cisg
ICAgRVhQRUNUX0xFU1MobWFrZUJvdW5kYXJ5UG9pbnQoYywgMCksIG1ha2VCb3VuZGFyeVBvaW50
KGcsIDApKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChnLCAwKSwgbWFrZUJv
dW5kYXJ5UG9pbnQoYywgMSkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFyeVBvaW50KGcs
IDApLCBtYWtlQm91bmRhcnlQb2ludChjLCAyKSk7CisKKyAgICBhdXRvJiBoID0gKmctPmlubmVy
VGV4dEVsZW1lbnQoKTsKKyAgICBFWFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChib2R5LCAx
KSwgbWFrZUJvdW5kYXJ5UG9pbnQoaCwgMCkpOworICAgIEVYUEVDVF9MRVNTKG1ha2VCb3VuZGFy
eVBvaW50KGMsIDApLCBtYWtlQm91bmRhcnlQb2ludChoLCAwKSk7CisgICAgRVhQRUNUX0xFU1Mo
bWFrZUJvdW5kYXJ5UG9pbnQoaCwgMCksIG1ha2VCb3VuZGFyeVBvaW50KGMsIDEpKTsKKyAgICBF
WFBFQ1RfTEVTUyhtYWtlQm91bmRhcnlQb2ludChoLCAwKSwgbWFrZUJvdW5kYXJ5UG9pbnQoYywg
MikpOworfQorCitzdGF0aWMgVmVjdG9yPFBvc2l0aW9uPiBhbGxQb3NpdGlvblR5cGVzKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBWZWN0b3I8UG9zaXRpb24+IHBvc2l0aW9u
czsKKyAgICBib29sIGNhbkNvbnRhaW5SYW5nZUVuZHBvaW50ID0gIW5vZGUgfHwgbm9kZS0+Y2Fu
Q29udGFpblJhbmdlRW5kUG9pbnQoKTsKKyAgICBpZiAoY2FuQ29udGFpblJhbmdlRW5kcG9pbnQp
CisgICAgICAgIHBvc2l0aW9ucy5hcHBlbmQobWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKG5v
ZGUsIG9mZnNldCkpOworICAgIGlmICghbm9kZSAmJiAhb2Zmc2V0KSB7CisgICAgICAgIHBvc2l0
aW9ucy5hcHBlbmQoeyBudWxscHRyLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciB9
KTsKKyAgICAgICAgcG9zaXRpb25zLmFwcGVuZCh7IG51bGxwdHIsIFBvc2l0aW9uOjpQb3NpdGlv
bklzQWZ0ZXJBbmNob3IgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNhbkNvbnRhaW5S
YW5nZUVuZHBvaW50ICYmICFvZmZzZXQpCisgICAgICAgICAgICBwb3NpdGlvbnMuYXBwZW5kKHsg
bm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbiB9KTsKKyAgICAgICAgaWYg
KGNhbkNvbnRhaW5SYW5nZUVuZHBvaW50ICYmIG9mZnNldCA9PSAobm9kZSA/IG5vZGUtPmxlbmd0
aCgpIDogMCkpCisgICAgICAgICAgICBwb3NpdGlvbnMuYXBwZW5kKHsgbm9kZSwgUG9zaXRpb246
OlBvc2l0aW9uSXNBZnRlckNoaWxkcmVuIH0pOworICAgICAgICBpZiAobm9kZSkgeworICAgICAg
ICAgICAgaWYgKG9mZnNldCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNoaWxkQmVmb3Jl
ID0gbm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQob2Zmc2V0IC0gMSkpCisgICAgICAgICAgICAgICAg
ICAgIHBvc2l0aW9ucy5hcHBlbmQoeyBjaGlsZEJlZm9yZSwgUG9zaXRpb246OlBvc2l0aW9uSXNB
ZnRlckFuY2hvciB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRvIGNoaWxk
QWZ0ZXIgPSBub2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQpKQorICAgICAgICAgICAgICAg
IHBvc2l0aW9ucy5hcHBlbmQoeyBjaGlsZEFmdGVyLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9y
ZUFuY2hvciB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcG9zaXRpb25zOworfQor
Citjb25zdGV4cHIgY29uc3QgY2hhciogdHlwZVN0cmluZ1N1ZmZpeChjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24pCit7CisgICAgc3dpdGNoIChwb3NpdGlvbi5hbmNob3JUeXBlKCkpIHsKKyAgICBj
YXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I6CisgICAgICAgIHJldHVybiAi
IjsKKyAgICBjYXNlIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW46CisgICAgICAg
IHJldHVybiAiW2JlZm9yZS1jaGlsZHJlbl0iOworICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9u
SXNBZnRlckNoaWxkcmVuOgorICAgICAgICByZXR1cm4gIlthZnRlci1jaGlsZHJlbl0iOworICAg
IGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I6CisgICAgICAgIHJldHVybiAi
W2JlZm9yZV0iOworICAgIGNhc2UgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcjoKKyAg
ICAgICAgcmV0dXJuICJbYWZ0ZXJdIjsKKyAgICB9CisgICAgcmV0dXJuICJbaW52YWxpZF0iOwor
fQorCitzdGF0aWMgU3RyaW5nIGpvaW4oY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvciwgQVND
SUlMaXRlcmFsIHNlcGFyYXRvcikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
Ym9vbCBuZWVkU2VwYXJhdG9yID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzdHJpbmcgOiB2ZWN0
b3IpIHsKKyAgICAgICAgaWYgKG5lZWRTZXBhcmF0b3IpCisgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZChzZXBhcmF0b3IpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOworICAgICAg
ICBuZWVkU2VwYXJhdG9yID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKK30KKworc3RhdGljIENTdHJpbmcgYWxsUG9zaXRpb25UeXBlRmFpbHVyZXMoY29uc3Qg
UG9zaXRpb24mIGEsIE5vZGUqIG5vZGVCLCB1bnNpZ25lZCBvZmZzZXRCLCBQYXJ0aWFsT3JkZXJp
bmcgZXhwZWN0ZWRSZXN1bHQpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZmFpbHVyZXM7CisgICAg
Zm9yIChhdXRvJiBiIDogYWxsUG9zaXRpb25UeXBlcyhub2RlQiwgb2Zmc2V0QikpIHsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBzdHJpbmcoZG9jdW1lbnRPcmRlcihhLCBiKSk7CisgICAgICAgIGlm
IChzdHJjbXAocmVzdWx0LCBzdHJpbmcoZXhwZWN0ZWRSZXN1bHQpKSkKKyAgICAgICAgICAgIGZh
aWx1cmVzLmFwcGVuZChtYWtlU3RyaW5nKCJvcmRlcihiIiwgdHlwZVN0cmluZ1N1ZmZpeChiKSwg
Iik9IiwgcmVzdWx0LCAiPGV4cGVjdGVkOiIsIHN0cmluZyhleHBlY3RlZFJlc3VsdCksICc+Jykp
OworICAgICAgICByZXN1bHQgPSBzdHJpbmcoZG9jdW1lbnRPcmRlcihiLCBhKSk7CisgICAgICAg
IGlmIChzdHJjbXAocmVzdWx0LCBzdHJpbmcoLWV4cGVjdGVkUmVzdWx0KSkpCisgICAgICAgICAg
ICBmYWlsdXJlcy5hcHBlbmQobWFrZVN0cmluZygib3JkZXIoYiIsIHR5cGVTdHJpbmdTdWZmaXgo
YiksICIpPSIsIHJlc3VsdCwgIjxleHBlY3RlZDoiLCBzdHJpbmcoLWV4cGVjdGVkUmVzdWx0KSwg
Jz4nKSk7CisgICAgfQorICAgIHJldHVybiBqb2luKGZhaWx1cmVzLCAiLCAiX3MpLnV0ZjgoKTsK
K30KKworc3RhdGljIENTdHJpbmcgYWxsUG9zaXRpb25UeXBlRmFpbHVyZXMoTm9kZSogbm9kZUEs
IHVuc2lnbmVkIG9mZnNldEEsIE5vZGUqIG5vZGVCLCB1bnNpZ25lZCBvZmZzZXRCLCBQYXJ0aWFs
T3JkZXJpbmcgZXhwZWN0ZWRSZXN1bHQpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZmFpbHVyZXM7
CisgICAgZm9yIChhdXRvJiBhIDogYWxsUG9zaXRpb25UeXBlcyhub2RlQSwgb2Zmc2V0QSkpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBiIDogYWxsUG9zaXRpb25UeXBlcyhub2RlQiwgb2Zmc2V0Qikp
IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc3RyaW5nKGRvY3VtZW50T3JkZXIoYSwgYikp
OworICAgICAgICAgICAgaWYgKHN0cmNtcChyZXN1bHQsIHN0cmluZyhleHBlY3RlZFJlc3VsdCkp
KQorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChtYWtlU3RyaW5nKCJvcmRlcihhIiwg
dHlwZVN0cmluZ1N1ZmZpeChhKSwgIixiIiwgdHlwZVN0cmluZ1N1ZmZpeChiKSwgIik9IiwgcmVz
dWx0LCAiPGV4cGVjdGVkOiIsIHN0cmluZyhleHBlY3RlZFJlc3VsdCksICc+JykpOworICAgICAg
ICAgICAgcmVzdWx0ID0gc3RyaW5nKGRvY3VtZW50T3JkZXIoYiwgYSkpOworICAgICAgICAgICAg
aWYgKHN0cmNtcChyZXN1bHQsIHN0cmluZygtZXhwZWN0ZWRSZXN1bHQpKSkKKyAgICAgICAgICAg
ICAgICBmYWlsdXJlcy5hcHBlbmQobWFrZVN0cmluZygib3JkZXIoYiIsIHR5cGVTdHJpbmdTdWZm
aXgoYiksICIsYSIsIHR5cGVTdHJpbmdTdWZmaXgoYSksICIpPSIsIHJlc3VsdCwgIjxleHBlY3Rl
ZDoiLCBzdHJpbmcoLWV4cGVjdGVkUmVzdWx0KSwgJz4nKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIGpvaW4oZmFpbHVyZXMsICIgfCAiX3MpLnV0ZjgoKTsKK30KKworc3RhdGljIENT
dHJpbmcgYWxsUG9zaXRpb25UeXBlRmFpbHVyZXMoTm9kZSYgbm9kZUEsIHVuc2lnbmVkIG9mZnNl
dEEsIE5vZGUmIG5vZGVCLCB1bnNpZ25lZCBvZmZzZXRCLCBQYXJ0aWFsT3JkZXJpbmcgZXhwZWN0
ZWRSZXN1bHQpCit7CisgICAgcmV0dXJuIGFsbFBvc2l0aW9uVHlwZUZhaWx1cmVzKCZub2RlQSwg
b2Zmc2V0QSwgJm5vZGVCLCBvZmZzZXRCLCBleHBlY3RlZFJlc3VsdCk7Cit9CisKK3N0YXRpYyBD
U3RyaW5nIGFsbFBvc2l0aW9uVHlwZUZhaWx1cmVzKE5vZGUqIG5vZGVBLCB1bnNpZ25lZCBvZmZz
ZXRBLCBOb2RlJiBub2RlQiwgdW5zaWduZWQgb2Zmc2V0QiwgUGFydGlhbE9yZGVyaW5nIGV4cGVj
dGVkUmVzdWx0KQoreworICAgIHJldHVybiBhbGxQb3NpdGlvblR5cGVGYWlsdXJlcyhub2RlQSwg
b2Zmc2V0QSwgJm5vZGVCLCBvZmZzZXRCLCBleHBlY3RlZFJlc3VsdCk7Cit9CisKK3N0YXRpYyBD
U3RyaW5nIGFsbFBvc2l0aW9uVHlwZUZhaWx1cmVzKGNvbnN0IFBvc2l0aW9uJiBhLCBOb2RlJiBu
b2RlQiwgdW5zaWduZWQgb2Zmc2V0QiwgUGFydGlhbE9yZGVyaW5nIGV4cGVjdGVkUmVzdWx0KQor
eworICAgIHJldHVybiBhbGxQb3NpdGlvblR5cGVGYWlsdXJlcyhhLCAmbm9kZUIsIG9mZnNldEIs
IGV4cGVjdGVkUmVzdWx0KTsKK30KKworI2RlZmluZSBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhu
b2RlQSwgb2Zmc2V0QSwgbm9kZUIsIG9mZnNldEIsIGV4cGVjdGVkUmVzdWx0KSBcCisgICAgRVhQ
RUNUX1NUUkVRKGFsbFBvc2l0aW9uVHlwZUZhaWx1cmVzKG5vZGVBLCBvZmZzZXRBLCBub2RlQiwg
b2Zmc2V0QiwgUGFydGlhbE9yZGVyaW5nOjpleHBlY3RlZFJlc3VsdCkuZGF0YSgpLCAiIikKKyNk
ZWZpbmUgVEVTVF9BTExfUE9TSVRJT05fVFlQRVNfQihwb3NpdGlvbkEsIG5vZGVCLCBvZmZzZXRC
LCBleHBlY3RlZFJlc3VsdCkgXAorICAgIEVYUEVDVF9TVFJFUShhbGxQb3NpdGlvblR5cGVGYWls
dXJlcyhwb3NpdGlvbkEsIG5vZGVCLCBvZmZzZXRCLCBQYXJ0aWFsT3JkZXJpbmc6OmV4cGVjdGVk
UmVzdWx0KS5kYXRhKCksICIiKQorCitzdGF0aWMgUG9zaXRpb24gbWFrZVBvc2l0aW9uQmVmb3Jl
KE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklz
QmVmb3JlQW5jaG9yIH07Cit9CisKK3N0YXRpYyBQb3NpdGlvbiBtYWtlUG9zaXRpb25BZnRlcihO
b2RlJiBub2RlKQoreworICAgIHJldHVybiB7ICZub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0Fm
dGVyQW5jaG9yIH07Cit9CisKK1RFU1QoRG9jdW1lbnRPcmRlciwgUG9zaXRpb25zKQoreworICAg
IGF1dG8gZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOworICAgIGF1dG8mIGJvZHkgPSAqZG9j
dW1lbnQtPmJvZHkoKTsKKworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKG51bGxwdHIsIDAs
IG51bGxwdHIsIDAsIGVxdWl2YWxlbnQpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKG51
bGxwdHIsIDEsIG51bGxwdHIsIDAsIGVxdWl2YWxlbnQpOworICAgIFRFU1RfQUxMX1BPU0lUSU9O
X1RZUEVTKG51bGxwdHIsIDEsIG51bGxwdHIsIDEsIGVxdWl2YWxlbnQpOworCisgICAgVEVTVF9B
TExfUE9TSVRJT05fVFlQRVMobnVsbHB0ciwgMCwgZG9jdW1lbnQsIDAsIHVub3JkZXJlZCk7Cisg
ICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMobnVsbHB0ciwgMCwgZG9jdW1lbnQsIDEsIHVub3Jk
ZXJlZCk7CisKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhkb2N1bWVudCwgMCwgZG9jdW1l
bnQsIDAsIGVxdWl2YWxlbnQpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGRvY3VtZW50
LCAwLCBkb2N1bWVudCwgMSwgbGVzcyk7CisKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhk
b2N1bWVudCwgMCwgYm9keSwgMCwgbGVzcyk7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMo
Ym9keSwgMCwgZG9jdW1lbnQsIDEsIGxlc3MpOworCisgICAgYXV0byBhID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgYm9keS5hcHBlbmRDaGlsZChhKTsKKyAgICBURVNU
X0FMTF9QT1NJVElPTl9UWVBFUyhib2R5LCAwLCBhLCAwLCBsZXNzKTsKKyAgICBURVNUX0FMTF9Q
T1NJVElPTl9UWVBFUyhhLCAwLCBib2R5LCAxLCBsZXNzKTsKKworICAgIGF1dG8gYiA9IEhUTUxE
aXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGJvZHkuYXBwZW5kQ2hpbGQoYik7Cisg
ICAgVEVTVF9BTExfUE9TSVRJT05fVFlQRVMoYm9keSwgMCwgYiwgMCwgbGVzcyk7CisgICAgVEVT
VF9BTExfUE9TSVRJT05fVFlQRVMoYm9keSwgMSwgYiwgMCwgbGVzcyk7CisgICAgVEVTVF9BTExf
UE9TSVRJT05fVFlQRVMoYiwgMCwgYm9keSwgMiwgbGVzcyk7CisKKyAgICBhdXRvIGMgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBiLT5hcHBlbmRDaGlsZChjKTsKKyAg
ICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhib2R5LCAwLCBjLCAwLCBsZXNzKTsKKyAgICBURVNU
X0FMTF9QT1NJVElPTl9UWVBFUyhib2R5LCAxLCBjLCAwLCBsZXNzKTsKKyAgICBURVNUX0FMTF9Q
T1NJVElPTl9UWVBFUyhjLCAwLCBib2R5LCAyLCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElP
Tl9UWVBFUyhhLCAwLCBjLCAwLCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhh
LCAxLCBjLCAwLCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhiLCAwLCBjLCAw
LCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhjLCAwLCBiLCAxLCBsZXNzKTsK
KworICAgIGF1dG8gZCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIGEt
PmFwcGVuZENoaWxkKGQpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGJvZHksIDAsIGQs
IDAsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGQsIDAsIGJvZHksIDEsIGxl
c3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGEsIDAsIGQsIDAsIGxlc3MpOworICAg
IFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGQsIDAsIGEsIDEsIGxlc3MpOworICAgIFRFU1RfQUxM
X1BPU0lUSU9OX1RZUEVTKGQsIDAsIGIsIDAsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9O
X1RZUEVTKGQsIDAsIGIsIDEsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGQs
IDAsIGMsIDAsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGQsIDAsIGMsIDEs
IGxlc3MpOworCisgICAgYXV0byBlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
CisgICAgRVhQRUNUX1VOT1JERVJFRChtYWtlUG9zaXRpb25CZWZvcmUoZG9jdW1lbnQpLCBtYWtl
UG9zaXRpb25CZWZvcmUoZSkpOworICAgIEVYUEVDVF9VTk9SREVSRUQobWFrZVBvc2l0aW9uQmVm
b3JlKGRvY3VtZW50KSwgbWFrZVBvc2l0aW9uQWZ0ZXIoZSkpOworICAgIEVYUEVDVF9VTk9SREVS
RUQobWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBtYWtlUG9zaXRpb25CZWZvcmUoZSkpOwor
ICAgIEVYUEVDVF9VTk9SREVSRUQobWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBtYWtlUG9z
aXRpb25BZnRlcihlKSk7CisKKyAgICBhdXRvIGYgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKKyAgICBlLT5hcHBlbmRDaGlsZChmKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9U
WVBFUyhib2R5LCAxLCBmLCAwLCB1bm9yZGVyZWQpOworCisgICAgYXV0byBnID0gSFRNTFRleHRB
cmVhRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICBjLT5hcHBlbmRDaGlsZChnKTsKKyAg
ICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhib2R5LCAxLCBnLCAwLCBsZXNzKTsKKyAgICBURVNU
X0FMTF9QT1NJVElPTl9UWVBFUyhjLCAwLCBjLCAxLCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJ
VElPTl9UWVBFUyhjLCAxLCBjLCAyLCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBF
UyhjLCAwLCBjLCAyLCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhjLCAwLCBn
LCAwLCBsZXNzKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhnLCAwLCBjLCAxLCBsZXNz
KTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFUyhnLCAwLCBjLCAyLCBsZXNzKTsKKworICAg
IGF1dG8mIGggPSAqZy0+aW5uZXJUZXh0RWxlbWVudCgpOworICAgIFRFU1RfQUxMX1BPU0lUSU9O
X1RZUEVTKGJvZHksIDEsIGgsIDAsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVT
KGMsIDAsIGgsIDAsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGgsIDAsIGMs
IDEsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTKGgsIDAsIGMsIDIsIGxlc3Mp
OworCisgICAgRVhQRUNUX0VRVUlWQUxFTlQobWFrZVBvc2l0aW9uQmVmb3JlKGRvY3VtZW50KSwg
bWFrZVBvc2l0aW9uQmVmb3JlKGRvY3VtZW50KSk7CisgICAgRVhQRUNUX0VRVUlWQUxFTlQobWFr
ZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBtYWtlUG9zaXRpb25BZnRlcihkb2N1bWVudCkpOwor
ICAgIEVYUEVDVF9MRVNTKG1ha2VQb3NpdGlvbkJlZm9yZShkb2N1bWVudCksIG1ha2VQb3NpdGlv
bkFmdGVyKGRvY3VtZW50KSk7CisKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFU19CKG1ha2VQ
b3NpdGlvbkJlZm9yZShkb2N1bWVudCksIGRvY3VtZW50LCAwLCBsZXNzKTsKKyAgICBURVNUX0FM
TF9QT1NJVElPTl9UWVBFU19CKG1ha2VQb3NpdGlvbkJlZm9yZShkb2N1bWVudCksIGJvZHksIDAs
IGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9uQmVmb3Jl
KGRvY3VtZW50KSwgZG9jdW1lbnQsIDEsIGxlc3MpOworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZ
UEVTX0IobWFrZVBvc2l0aW9uQmVmb3JlKGRvY3VtZW50KSwgYm9keSwgMSwgbGVzcyk7CisgICAg
VEVTVF9BTExfUE9TSVRJT05fVFlQRVNfQihtYWtlUG9zaXRpb25CZWZvcmUoZG9jdW1lbnQpLCBo
LCAwLCBsZXNzKTsKKworICAgIFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9u
QWZ0ZXIoZG9jdW1lbnQpLCBkb2N1bWVudCwgMCwgZ3JlYXRlcik7CisgICAgVEVTVF9BTExfUE9T
SVRJT05fVFlQRVNfQihtYWtlUG9zaXRpb25BZnRlcihkb2N1bWVudCksIGRvY3VtZW50LCAxLCBn
cmVhdGVyKTsKKyAgICBURVNUX0FMTF9QT1NJVElPTl9UWVBFU19CKG1ha2VQb3NpdGlvbkFmdGVy
KGRvY3VtZW50KSwgYm9keSwgMCwgZ3JlYXRlcik7CisgICAgVEVTVF9BTExfUE9TSVRJT05fVFlQ
RVNfQihtYWtlUG9zaXRpb25BZnRlcihkb2N1bWVudCksIGJvZHksIDEsIGdyZWF0ZXIpOworICAg
IFRFU1RfQUxMX1BPU0lUSU9OX1RZUEVTX0IobWFrZVBvc2l0aW9uQWZ0ZXIoZG9jdW1lbnQpLCBo
LCAwLCBncmVhdGVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="422138"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>