<?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>217895</bug_id>
          
          <creation_ts>2020-10-18 15:42:19 -0700</creation_ts>
          <short_desc>REGRESSION(r266295): Range allows start and end containers to belong to different trees</short_desc>
          <delta_ts>2020-10-21 09:40:20 -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=218007</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>215755</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1699146</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 15:42:19 -0700</bug_when>
    <thetext>After https://trac.webkit.org/changeset/266295, we allow start &amp; end of a range to point to different trees.
This is wrong. We need to implement step 4.1 of https://dom.spec.whatwg.org/#concept-range-bp-set</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699147</commentid>
    <comment_count>1</comment_count>
      <attachid>411720</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 15:42:28 -0700</bug_when>
    <thetext>Created attachment 411720
test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699149</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-18 15:52:43 -0700</bug_when>
    <thetext>I will fix this. I am really surprised that there is no coverage of this in WPT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699150</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 15:56:25 -0700</bug_when>
    <thetext>It looks like Range::comparePoint has also regressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699151</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 16:02:45 -0700</bug_when>
    <thetext>Range::compareNode and Range::compareBoundaryPoints have the same issue too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699153</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 16:13:09 -0700</bug_when>
    <thetext>Also Range::intersectsNode &amp; Range::isPointInRange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699154</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 16:14:03 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; I will fix this. I am really surprised that there is no coverage of this in
&gt; WPT.

I&apos;m starting to think that WPT is missing a whole bunch of test cases for Shadow DOM with regards to Range. Clearly, none of these functions have adequate WPT tests with regards to Shadow DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699155</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 16:18:19 -0700</bug_when>
    <thetext>Looks like DOMSelection::addRange and DOMSelection::containsNode have similar bugs as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699158</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-18 16:21:32 -0700</bug_when>
    <thetext>One problem is that there is a lot of editing code that needs the current behavior. We can fix documentOrder to work properly, and all of this will start working, and all the editing code will break, proving, I suppose, that we need multiple sets of documentOrder functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699159</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-18 16:22:47 -0700</bug_when>
    <thetext>Needs the current behavior of checking order of nodes, not the current behavior of Range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699160</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-18 16:23:20 -0700</bug_when>
    <thetext>So WPT didn’t have tests for this, and WebKit didn’t either.

Can you see how I misunderstood our intended behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699161</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 16:24:48 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; One problem is that there is a lot of editing code that needs the current
&gt; behavior. We can fix documentOrder to work properly, and all of this will
&gt; start working, and all the editing code will break, proving, I suppose, that
&gt; we need multiple sets of documentOrder functions.

I think we need that. Maybe what we need is composedTreeOrder and treeOrder and we just need to replace existing usage of documentOrder with either one of the two.

I commented in https://bugs.webkit.org/show_bug.cgi?id=215755 as I was going through your patch there but I think &quot;commonInclusiveAncestorAndChildren&quot; is a very confusing function because it doesn&apos;t match any of the DOM concepts in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699163</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-18 16:26:30 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; So WPT didn’t have tests for this, and WebKit didn’t either.
&gt; 
&gt; Can you see how I misunderstood our intended behavior?

Yeah, there is no doubt that we need more tests. The annoying thing is that we even not every part of HTML / DOM spec work correctly with the Shadow DOM, and we&apos;ve been slowly finding more cases and fixing them as we go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699170</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-18 16:38:34 -0700</bug_when>
    <thetext>Yes, but let&apos;s not slippery slide into talking about everything.

All of these functions have no tests whatsoever about this topic, apparently!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699362</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-19 12:17:14 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #11)
&gt; I think we need that. Maybe what we need is composedTreeOrder and treeOrder
&gt; and we just need to replace existing usage of documentOrder with either one
&gt; of the two.

Yes, and they will share code; either templates or function arguments so they can be the same code.

&gt; I commented in https://bugs.webkit.org/show_bug.cgi?id=215755 as I was going
&gt; through your patch there but I think &quot;commonInclusiveAncestorAndChildren&quot; is
&gt; a very confusing function because it doesn&apos;t match any of the DOM concepts
&gt; in the spec.

Sure, same thing, we can have multiple functions for the different trees.

I’m just worried about having *so* many different ones, and so many different functions. For example, Position has &lt;,&gt;,== operators, and I think it’s ambiguous which of the trees they would be based on.

Other functions which we might need multiple versions of:

isPointInRange
contains
intersects
unionRange
intersection
intersectingNodes
intersectingNodesWithDeprecatedZeroOffsetStartQuirk

It bothers me that we might need 2 of each, and I am concerned about what to name things. Also, aside from the &quot;which tree&quot; issue, now that I read the DOM specification text about Range a bit more carefully, I think the names and semantics of these might need a bit of work. There are contained nodes, partially contained nodes, and the special case of CharacterData endpoint nodes which are partially intersecting (but not &quot;partially contained&quot;) and I want to figure out how to cleanly include them all. Not sure that &quot;intersecting&quot; has a precise definition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699418</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-19 13:55:26 -0700</bug_when>
    <thetext>Started working on this by making a test that covers all of these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699943</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 15:05:55 -0700</bug_when>
    <thetext>I’m fixing this by adding new functions name treeOrder. Not yet sure how many other new functions I will need to fix Range.

The existing documentOrder functions can later be renamed composedTreeOrder and maybe eventually deleted if no one needs that.

The fate of the many other functions like isPointInRange is unclear: not sure how many different variants of those I will need to make to fix this bug or to resolve other issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700042</commentid>
    <comment_count>17</comment_count>
      <attachid>411949</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 19:07:44 -0700</bug_when>
    <thetext>Created attachment 411949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700044</commentid>
    <comment_count>18</comment_count>
      <attachid>411951</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 19:17:12 -0700</bug_when>
    <thetext>Created attachment 411951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700050</commentid>
    <comment_count>19</comment_count>
      <attachid>411953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 19:59:24 -0700</bug_when>
    <thetext>Created attachment 411953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700052</commentid>
    <comment_count>20</comment_count>
      <attachid>411953</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-20 20:20:40 -0700</bug_when>
    <thetext>Comment on attachment 411953
Patch

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

Should I file a new bug for DOMSelection?

&gt; Source/WebCore/ChangeLog:26
&gt; +        also be objects of another type. Maybe an enumeration named TreeType instead?

Maybe enum class would be more appropriate.

&gt; Source/WebCore/dom/Node.h:759
&gt; +struct ShadowIncludingTree { };

So it never makes sense to use this type thing for ordering nodes.
It&apos;s only ever used when we&apos;re walking up the ancestor nodes so maybe TreeIncludingShadowAncestors might be appropriate.
We probably don&apos;t want to support it in treeOrder though.

&gt; Source/WebCore/dom/SimpleRange.cpp:215
&gt; +template&lt;typename TreeType&gt; bool isPointInRange(const SimpleRange&amp; range, const BoundaryPoint&amp; point)

This is somewhat tangential but this seems backwards.
I&apos;d have expected point to come before range given this is asking: is *point* in *range*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700061</commentid>
    <comment_count>21</comment_count>
      <attachid>411953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 21:03:46 -0700</bug_when>
    <thetext>Comment on attachment 411953
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:26
&gt;&gt; +        also be objects of another type. Maybe an enumeration named TreeType instead?
&gt; 
&gt; Maybe enum class would be more appropriate.

It would be irritating to have it be long like treeOrder&lt;TreeType::Composed&gt;. What do you think?

&gt;&gt; Source/WebCore/dom/Node.h:759
&gt;&gt; +struct ShadowIncludingTree { };
&gt; 
&gt; So it never makes sense to use this type thing for ordering nodes.
&gt; It&apos;s only ever used when we&apos;re walking up the ancestor nodes so maybe TreeIncludingShadowAncestors might be appropriate.
&gt; We probably don&apos;t want to support it in treeOrder though.

I took this name right out of the DOM specification. I understand we’d never want to use it for treeOrder, but I don’t think we need to enforce that.

&gt;&gt; Source/WebCore/dom/SimpleRange.cpp:215
&gt;&gt; +template&lt;typename TreeType&gt; bool isPointInRange(const SimpleRange&amp; range, const BoundaryPoint&amp; point)
&gt; 
&gt; This is somewhat tangential but this seems backwards.
&gt; I&apos;d have expected point to come before range given this is asking: is *point* in *range*.

I think I will rename this to contains in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700062</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-20 21:05:11 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #20)
&gt; Should I file a new bug for DOMSelection?

Probably. Which method do you think is wrong? I think they are already all correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700066</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-20 21:40:51 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #21)
&gt; Comment on attachment 411953 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411953&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:26
&gt; &gt;&gt; +        also be objects of another type. Maybe an enumeration named TreeType instead?
&gt; &gt; 
&gt; &gt; Maybe enum class would be more appropriate.
&gt; 
&gt; It would be irritating to have it be long like
&gt; treeOrder&lt;TreeType::Composed&gt;. What do you think?

Oh I see what you&apos;re saying. Maybe what you have is better then. We can always change it later if others feel strongly.

&gt; &gt;&gt; Source/WebCore/dom/Node.h:759
&gt; &gt;&gt; +struct ShadowIncludingTree { };
&gt; &gt; 
&gt; &gt; So it never makes sense to use this type thing for ordering nodes.
&gt; &gt; It&apos;s only ever used when we&apos;re walking up the ancestor nodes so maybe TreeIncludingShadowAncestors might be appropriate.
&gt; &gt; We probably don&apos;t want to support it in treeOrder though.
&gt; 
&gt; I took this name right out of the DOM specification. I understand we’d never
&gt; want to use it for treeOrder, but I don’t think we need to enforce that.

Oh I see. You&apos;re referring to:
https://dom.spec.whatwg.org/#concept-shadow-including-tree-order

I guess we can use that then.

&gt; &gt;&gt; Source/WebCore/dom/SimpleRange.cpp:215
&gt; &gt;&gt; +template&lt;typename TreeType&gt; bool isPointInRange(const SimpleRange&amp; range, const BoundaryPoint&amp; point)
&gt; &gt; 
&gt; &gt; This is somewhat tangential but this seems backwards.
&gt; &gt; I&apos;d have expected point to come before range given this is asking: is *point* in *range*.
&gt; 
&gt; I think I will rename this to contains in a future patch.

Ok.

(In reply to Darin Adler from comment #22)
&gt; (In reply to Ryosuke Niwa from comment #20)
&gt; &gt; Should I file a new bug for DOMSelection?
&gt; 
&gt; Probably. Which method do you think is wrong? I think they are already all
&gt; correct.

Filed https://webkit.org/b/218007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700067</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-20 21:42:30 -0700</bug_when>
    <thetext>By the way, I mentioned in the slack but I don&apos;t think the current implementation of documentOrder is correct with respect to slots. You can&apos;t use &quot;offset&quot; to compare position in the case a node is assigned to a slot because slotting could re-order nodes. e.g. &lt;slot name=&quot;a&quot;&gt;&lt;/slot&gt;&lt;slot slot=&quot;b&quot;&gt; in the shadow then &lt;span slot=&quot;b&quot;&gt;&lt;/span&gt;&lt;span slot=&quot;a&quot;&gt;&lt;/span&gt; would put span[slot=a] before span[slot=b]. So I suspect what really want is simply shadow-including tree order in some code, and not composed/flat tree. But you mentioned that the composed tree was needed somewhere? Where was that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700228</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 09:33:00 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #24)
&gt; But you mentioned that the composed tree was needed somewhere? Where was
&gt; that?

It was in some editing use cases that were covered by regression tests. We can switch the call sites that use ComposedTree off of it one by one and that should &quot;smoke it out&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700230</commentid>
    <comment_count>26</comment_count>
      <attachid>411953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 09:35:20 -0700</bug_when>
    <thetext>Comment on attachment 411953
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:26
&gt;&gt;&gt;&gt; +        also be objects of another type. Maybe an enumeration named TreeType instead?
&gt;&gt;&gt; 
&gt;&gt;&gt; Maybe enum class would be more appropriate.
&gt;&gt; 
&gt;&gt; It would be irritating to have it be long like treeOrder&lt;TreeType::Composed&gt;. What do you think?
&gt; 
&gt; Oh I see what you&apos;re saying. Maybe what you have is better then. We can always change it later if others feel strongly.

I can change from classes to an enumeration without changing how it’s used. I’d change from &quot;typename TreeType&quot; to &quot;TreeType treeType&quot; and then uses from &quot;TreeType&quot; to &quot;treeType&quot;. Going further to an enum class would require that I change the call sites of the functions, the way I showed above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700236</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 09:39:45 -0700</bug_when>
    <thetext>Committed r268800: &lt;https://trac.webkit.org/changeset/268800&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700237</commentid>
    <comment_count>28</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-21 09:40:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/70532742&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>411720</attachid>
            <date>2020-10-18 15:42:28 -0700</date>
            <delta_ts>2020-10-18 15:42:28 -0700</delta_ts>
            <desc>test</desc>
            <filename>shadow-range.html</filename>
            <type>text/html</type>
            <size>447</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8Ym9keT4KPHNjcmlwdD4KCmNvbnN0IHNoYWRvd0hvc3Qg
PSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
KTsKY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xv
c2VkJ30pOwpzaGFkb3dSb290LmlubmVySFRNTCA9ICdoZWxsbyc7Cgpjb25zdCByYW5nZSA9IGRv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7CnJhbmdlLnNldFN0YXJ0KGRvY3VtZW50LmJvZHksIDApOwpy
YW5nZS5zZXRFbmQoc2hhZG93Um9vdCwgMSk7Cgpkb2N1bWVudC53cml0ZShyYW5nZS5zdGFydENv
bnRhaW5lci5nZXRSb290Tm9kZSgpID09IHJhbmdlLmVuZENvbnRhaW5lci5nZXRSb290Tm9kZSgp
ID8gJ1BBU1MnIDogJ0ZBSUwnKTsKCjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411949</attachid>
            <date>2020-10-20 19:07:44 -0700</date>
            <delta_ts>2020-10-20 19:29:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217895-20201020190743.patch</filename>
            <type>text/plain</type>
            <size>25196</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FiY2FmMTc5NjJkZGEy
MTRkZTNkZWEzMWE3ODYzMDhjMTMzNWQ1My4uMzg3YWRmYjAzZTI3NjQ2NGNmNDZmNTlhZGE4M2Ez
MjlkYTIzYjQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTEwLTIwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUp
OiBSYW5nZSBhbGxvd3Mgc3RhcnQgYW5kIGVuZCBjb250YWluZXJzIHRvIGJlbG9uZyB0byBkaWZm
ZXJlbnQgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL1JhbmdlL3Jhbmdlcy1hY3Jvc3MtdHJlZXMuaHRtbAorCisgICAg
ICAgICogZG9tL0JvdW5kYXJ5UG9pbnQuaDogQWRkZWQgdHJlZU9yZGVyPFRyZWVUeXBlPi4KKwor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudDxUcmVlPik6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyZW50PENvbXBvc2VkVHJlZT4pOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmRlcHRoKTogQ2hhbmdlZCBpbnRvIGEgdGVtcGxhdGUgdGhhdCB0
YWtlcyBUcmVlVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
QW5kQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yKTogQ2hhbmdlZCB0byBleHBsaWNpdGx5IHVzZSBDb21wb3NlZFRyZWUgdG8gcHJlc2Vy
dmUKKyAgICAgICAgdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBsaWtlbHkgd2lsbCByZXR1cm4g
bGF0ZXIgdG8gbWFrZSB0aGlzIGEgdGVtcGxhdGUgYW5kIGhhdmUgaXQKKyAgICAgICAgdXMgdGhl
IG5vcm1hbCB0cmVlIGJ5IGRlZmF1bHQuCisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBD
aGFuZ2VkIGludG8gYSB0ZW1wbGF0ZSB0aGF0IHRha2VzIFRyZWVUeXBlLgorICAgICAgICAoV2Vi
Q29yZTo6ZG9jdW1lbnRPcmRlcik6IENhbGwgdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4gdG8gcHJl
c2VydmUgdGhlIGN1cnJlbnQgYmVoYXZpb3IuCisgICAgICAgIExpa2VseSB3aWxsIGRlbGV0ZSB0
aGlzIGxhdGVyIGFmdGVyIGNoYW5naW5nIGNhbGxlcnMgdG8gdXNlIHRyZWVPcmRlci4KKworICAg
ICAgICAqIGRvbS9Ob2RlLmg6IEFkZGVkIFRyZWUsIFNoYWRvd0luY2x1ZGluZ1RyZWUsIGFuZCBD
b21wb3NlZFRyZWUuIEFkZGVkIHBhcmVudCBhbmQKKyAgICAgICAgdHJlZU9yZGVyIGZ1bmN0aW9u
IHRlbXBsYXRlcy4gVHJlZVR5cGUgY3VycmVudGx5IGlzIGEgc2V0IG9mIGNsYXNzZXMgYnV0IHRo
ZXkgY291bGQKKyAgICAgICAgYWxzbyBiZSBvYmplY3RzIG9mIGFub3RoZXIgdHlwZS4gTWF5YmUg
YW4gZW51bWVyYXRpb24gbmFtZWQgVHJlZVR5cGUgaW5zdGVhZD8KKworICAgICAgICAqIGRvbS9S
YW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOiBVc2UgdHJlZU9y
ZGVyIGluc3RlYWQgb2YgZG9jdW1lbnRPcmRlciB0byB1c2UgdGhlIG5vcm1hbAorICAgICAgICB0
cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6c2V0RW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFu
Z2UpOiBVc2UgaXNQb2ludEluUmFuZ2U8VHJlZT4gaW5zdGVhZCBvZiBpc1BvaW50SW5SYW5nZQor
ICAgICAgICB0byB1c2UgdGhlIG5vcm1hbCB0cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRy
ZWUuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIHRy
ZWVPcmRlciBpbnN0ZWFkIG9mIGRvY3VtZW50T3JkZXIgdG8gdXNlCisgICAgICAgIHRoZSBub3Jt
YWwgdHJlZSBpbnN0ZWFkIG9mIHRoZSBjb21wb3NlZCB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6aW50ZXJzZWN0c05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0czxUcmVlPiBpbnN0
ZWFkIG9mIGlzUG9pbnRJblJhbmdlCisgICAgICAgIHRvIHVzZSB0aGUgbm9ybWFsIHRyZWUgaW5z
dGVhZCBvZiB0aGUgY29tcG9zZWQgdHJlZS4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBDaGFuZ2VkIGludG8gYSB0ZW1wbGF0
ZSB0aGF0IHRha2VzIFRyZWVUeXBlLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6
IENhbGwgdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4gdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgYmVo
YXZpb3IuCisgICAgICAgIExpa2VseSB3aWxsIGRlbGV0ZSB0aGlzIGxhdGVyIGFmdGVyIGNoYW5n
aW5nIGNhbGxlcnMgdG8gdXNlIHRyZWVPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmlzUG9pbnRJ
blJhbmdlKTogQ2hhbmdlZCBpbnRvIGEgdGVtcGxhdGUgdGhhdCB0YWtlcyBUcmVlVHlwZS4KKyAg
ICAgICAgRm9yIG5vdyB0aGUgZGVmYXVsdCB0cmVlIHR5cGUgaXMgc3RpbGwgQ29tcG9zZWRUcmVl
LCBidXQgd2lsbCBjaGFuZ2UgdGhhdCBsYXRlci4KKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2Vj
dHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zPFRyZWU+KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb250YWluczxDb21wb3NlZFRyZWU+KTogQWRkZWQuCisKKyAgICAg
ICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogQWRkZWQgaXNQb2ludEluUmFuZ2UsIGludGVyc2VjdHMs
IGFuZCB0cmVlT3JkZXIgZnVuY3Rpb24gdGVtcGxhdGVzLgorCiAyMDIwLTEwLTE5ICBQYXRyaWNr
IEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSRUdS
RVNTSU9OKHIyNjUyMzEpOiBPdmVybGF5OiBub2RlIGluZm8gc29tZXRpbWVzIGRyYXdzIG9uIG9u
ZSBsaW5lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaAppbmRleCBiZGYxZTg4MDA1ZTg1YzRj
NjY0NDYxYmU2NTlmOTY1MmM2Nzk1MjQ4Li41M2Y1NGE4MDFhZjZlNDZjZjFkZTMxNzBhYTYzMzk5
MTMyZDk1ZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKQEAgLTQwLDYgKzQwLDgg
QEAgc3RydWN0IEJvdW5kYXJ5UG9pbnQgewogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgQm91bmRh
cnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIGJvb2wgb3BlcmF0b3IhPShjb25zdCBC
b3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRh
cnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxP
cmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFy
eVBvaW50Jik7CiAKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VC
b3VuZGFyeVBvaW50QmVmb3JlTm9kZShOb2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZmVmMDQ3
MDdhNWRjNDBlNTE2MWNmYjg3YjlkYzczNjY4NmNjYjEwZi4uMWY3OGUwMWZlMTZjYzYyZjRmOGQ3
Y2IyMzVmYjFkMDEzNTc5NzczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjU4NywxMSArMjU4Nywy
MSBAQCB2b2lkKiBOb2RlOjpvcGFxdWVSb290U2xvdygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihub2RlKSk7CiB9CiAKLXN0YXRp
YyBzaXplX3QgZGVwdGhJbkNvbXBvc2VkVHJlZShjb25zdCBOb2RlJiBub2RlKQordGVtcGxhdGU8
PiBDb250YWluZXJOb2RlKiBwYXJlbnQ8VHJlZT4oY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBy
ZXR1cm4gbm9kZS5wYXJlbnROb2RlKCk7Cit9CisKK3RlbXBsYXRlPD4gQ29udGFpbmVyTm9kZSog
cGFyZW50PENvbXBvc2VkVHJlZT4oY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4gbm9k
ZS5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlw
ZT4gc2l6ZV90IGRlcHRoKGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgc2l6ZV90IGRlcHRoID0g
MDsKICAgICBhdXRvIGFuY2VzdG9yID0gJm5vZGU7Ci0gICAgd2hpbGUgKChhbmNlc3RvciA9IGFu
Y2VzdG9yLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpKSkKKyAgICB3aGlsZSAoKGFuY2VzdG9yID0g
cGFyZW50PFRyZWVUeXBlPigqYW5jZXN0b3IpKSkKICAgICAgICAgKytkZXB0aDsKICAgICByZXR1
cm4gZGVwdGg7CiB9CkBAIC0yNjAyLDggKzI2MTIsNyBAQCBzdHJ1Y3QgQW5jZXN0b3JBbmRDaGls
ZHJlbiB7CiAgICAgY29uc3QgTm9kZSogZGlzdGluY3RBbmNlc3RvckI7CiB9OwogCi0vLyBGSVhN
RTogVGhpcyBmdW5jdGlvbidzIG5hbWUgaXMgbm90IGV4cGxpY2l0IGFib3V0IHRoZSBmYWN0IHRo
YXQgaXQncyB0aGUgY29tbW9uIGluY2x1c2l2ZSBhbmNlc3RvciBpbiB0aGUgY29tcG9zZWQgdHJl
ZS4KLXN0YXRpYyBBbmNlc3RvckFuZENoaWxkcmVuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5k
Q2hpbGRyZW4oY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikKK3RlbXBsYXRlPHR5cGVuYW1l
IFRyZWVUeXBlPiBBbmNlc3RvckFuZENoaWxkcmVuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5k
Q2hpbGRyZW4oY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikKIHsKICAgICAvLyBUaGlzIGNo
ZWNrIGlzbid0IG5lZWRlZCBmb3IgY29ycmVjdG5lc3MsIGJ1dCBpdCBpcyBjaGVhcCBhbmQgbGlr
ZWx5IHRvIGJlCiAgICAgLy8gY29tbW9uIGVub3VnaCB0byBiZSB3b3J0aCBvcHRpbWl6aW5nIHNv
IHdlIGRvbid0IGhhdmUgdG8gd2FsayB0byB0aGUgcm9vdC4KQEAgLTI2MTIsMzEgKzI2MjEsMzEg
QEAgc3RhdGljIEFuY2VzdG9yQW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRD
aGlsZHJlbihjb25zdCBOb2RlJiBhLCBjb24KICAgICAvLyBGSVhNRTogQ291bGQgb3B0aW1pemUg
Y2FzZXMgd2hlcmUgbm9kZXMgYXJlIGJvdGggaW4gdGhlIHNhbWUgc2hhZG93IHRyZWUuCiAgICAg
Ly8gRklYTUU6IENvdWxkIG9wdGltaXplIGNhc2VzIHdoZXJlIG5vZGVzIGFyZSBpbiBkaWZmZXJl
bnQgZG9jdW1lbnRzIHRvIHF1aWNrbHkgcmV0dXJuIGZhbHNlLgogICAgIC8vIEZJWE1FOiBDb3Vs
ZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSBvbmUgbm9kZSBpcyBjb25uZWN0ZWQgYW5kIHRoZSBvdGhl
ciBpcyBub3QgdG8gcXVpY2tseSByZXR1cm4gZmFsc2UuCi0gICAgYXV0byBbZGVwdGhBLCBkZXB0
aEJdID0gc3RkOjptYWtlX3R1cGxlKGRlcHRoSW5Db21wb3NlZFRyZWUoYSksIGRlcHRoSW5Db21w
b3NlZFRyZWUoYikpOworICAgIGF1dG8gW2RlcHRoQSwgZGVwdGhCXSA9IHN0ZDo6bWFrZV90dXBs
ZShkZXB0aDxUcmVlVHlwZT4oYSksIGRlcHRoPFRyZWVUeXBlPihiKSk7CiAgICAgYXV0byBbeCwg
eSwgZGlmZmVyZW5jZV0gPSBkZXB0aEEgPj0gZGVwdGhCCiAgICAgICAgID8gc3RkOjptYWtlX3R1
cGxlKCZhLCAmYiwgZGVwdGhBIC0gZGVwdGhCKQogICAgICAgICA6IHN0ZDo6bWFrZV90dXBsZSgm
YiwgJmEsIGRlcHRoQiAtIGRlcHRoQSk7CiAgICAgZGVjbHR5cGUoeCkgZGlzdGluY3RBbmNlc3Rv
ckEgPSBudWxscHRyOwogICAgIGZvciAoZGVjbHR5cGUoZGlmZmVyZW5jZSkgaSA9IDA7IGkgPCBk
aWZmZXJlbmNlOyArK2kpIHsKICAgICAgICAgZGlzdGluY3RBbmNlc3RvckEgPSB4OwotICAgICAg
ICB4ID0geC0+cGFyZW50SW5Db21wb3NlZFRyZWUoKTsKKyAgICAgICAgeCA9IHBhcmVudDxUcmVl
VHlwZT4oKngpOwogICAgIH0KICAgICBkZWNsdHlwZSh5KSBkaXN0aW5jdEFuY2VzdG9yQiA9IG51
bGxwdHI7CiAgICAgd2hpbGUgKHggIT0geSkgewogICAgICAgICBkaXN0aW5jdEFuY2VzdG9yQSA9
IHg7CiAgICAgICAgIGRpc3RpbmN0QW5jZXN0b3JCID0geTsKLSAgICAgICAgeCA9IHgtPnBhcmVu
dEluQ29tcG9zZWRUcmVlKCk7Ci0gICAgICAgIHkgPSB5LT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgp
OworICAgICAgICB4ID0gcGFyZW50PFRyZWVUeXBlPigqeCk7CisgICAgICAgIHkgPSBwYXJlbnQ8
VHJlZVR5cGU+KCp5KTsKICAgICB9CiAgICAgaWYgKGRlcHRoQSA8IGRlcHRoQikKICAgICAgICAg
c3RkOjpzd2FwKGRpc3RpbmN0QW5jZXN0b3JBLCBkaXN0aW5jdEFuY2VzdG9yQik7CiAgICAgcmV0
dXJuIHsgeCwgZGlzdGluY3RBbmNlc3RvckEsIGRpc3RpbmN0QW5jZXN0b3JCIH07CiB9CiAKLS8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uJ3MgbmFtZSBpcyBub3QgZXhwbGljaXQgYWJvdXQgdGhlIGZh
Y3QgdGhhdCBpdCdzIHRoZSBjb21tb24gaW5jbHVzaXZlIGFuY2VzdG9yIGluIHRoZSBjb21wb3Nl
ZCB0cmVlLgorLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIHdvcmsgd2l0aGluIHRoZSBub3JtYWwg
dHJlZSBpbnN0ZWFkIG9mIHRoZSBjb21wb3NlZCB0cmVlLiBPciByZW5hbWUgYW5kL29yIHNwbGl0
IGludG8gbXVsdGlwbGUgZnVuY3Rpb25zLgogUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yKE5vZGUmIGEsIE5vZGUmIGIpCiB7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZSo+
KGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4oYSwgYikuY29tbW9uQW5jZXN0b3Ip
OworICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihjb21tb25JbmNsdXNpdmVBbmNlc3RvckFu
ZENoaWxkcmVuPENvbXBvc2VkVHJlZT4oYSwgYikuY29tbW9uQW5jZXN0b3IpOwogfQogCiBzdGF0
aWMgYm9vbCBpc1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxpbmdBLCBjb25zdCBO
b2RlJiBzaWJsaW5nQikKQEAgLTI2NTEsMTEgKzI2NjAsMTEgQEAgc3RhdGljIGJvb2wgaXNTaWJs
aW5nU3Vic2VxdWVudChjb25zdCBOb2RlJiBzaWJsaW5nQSwgY29uc3QgTm9kZSYgc2libGluZ0Ip
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihj
b25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+
IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikK
IHsKICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVx
dWl2YWxlbnQ7Ci0gICAgYXV0byByZXN1bHQgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENo
aWxkcmVuKGEsIGIpOworICAgIGF1dG8gcmVzdWx0ID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JB
bmRDaGlsZHJlbjxUcmVlVHlwZT4oYSwgYik7CiAgICAgaWYgKCFyZXN1bHQuY29tbW9uQW5jZXN0
b3IpCiAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OnVub3JkZXJlZDsKICAgICBpZiAo
IXJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQSkKQEAgLTI2NzUsNiArMjY4NCwxMyBAQCBQYXJ0aWFs
T3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQogICAg
IHJldHVybiBpc1NpYmxpbmdTdWJzZXF1ZW50KCpyZXN1bHQuZGlzdGluY3RBbmNlc3RvckEsICpy
ZXN1bHQuZGlzdGluY3RBbmNlc3RvckIpID8gUGFydGlhbE9yZGVyaW5nOjpsZXNzIDogUGFydGlh
bE9yZGVyaW5nOjpncmVhdGVyOwogfQogCit0ZW1wbGF0ZSBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9y
ZGVyPFRyZWU+KGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CisKK1BhcnRpYWxPcmRlcmluZyBk
b2N1bWVudE9yZGVyKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIpCit7CisgICAgcmV0dXJu
IHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KGEsIGIpOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBOb2RlJiBub2RlKQogewogICAgIHRzIDw8ICJub2Rl
ICIgPDwgJm5vZGUgPDwgIiAiIDw8IG5vZGUuZGVidWdEZXNjcmlwdGlvbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
aW5kZXggZWMyNGJlYjM3MzcyMDVlZDE3MTAxY2UxMDM0NDE5YzBiZTExZWQ0Zi4uMzlkMTJmODkx
MzI1NTMxMWFiYWZiNTg1MDJjNjI5YTdiZGE0ZDIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC03NTIsNiAr
NzUyLDEyIEBAIGNvbnN0ZXhwciBib29sIGlzX25lcShQYXJ0aWFsT3JkZXJpbmcpOwogY29uc3Rl
eHByIGJvb2wgaXNfbHRlcShQYXJ0aWFsT3JkZXJpbmcpOwogY29uc3RleHByIGJvb2wgaXNfZ3Rl
cShQYXJ0aWFsT3JkZXJpbmcpOwogCitzdHJ1Y3QgVHJlZSB7IH07CitzdHJ1Y3QgU2hhZG93SW5j
bHVkaW5nVHJlZSB7IH07CitzdHJ1Y3QgQ29tcG9zZWRUcmVlIHsgfTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFRyZWVUeXBlID0gVHJlZT4gQ29udGFpbmVyTm9kZSogcGFyZW50KGNvbnN0IE5vZGUmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlID0gVHJlZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVP
cmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOworCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFs
T3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCiAjaWYg
QVNTRVJUX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDRhOWY0M2ZiZjFmNTUzMTUxZjAx
OTE4ZDgwYzA3NjQyYjA2NTk3NTIuLmIyZmU2MzAyMmQzOWYxZjhhYjRkZTU1NzU2MzFjMWNjNmQ0
YzdlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFJhbmdlOjpzZXRTdGFydChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9m
ZnNldCkKICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAg
ICBtX3N0YXJ0LnNldChXVEZNb3ZlKGNvbnRhaW5lciksIG9mZnNldCwgY2hpbGROb2RlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKLSAgICBpZiAoIWlzX2x0ZXEoZG9jdW1lbnRPcmRlcihtYWtlQm91
bmRhcnlQb2ludChtX3N0YXJ0KSwgbWFrZUJvdW5kYXJ5UG9pbnQobV9lbmQpKSkpCisgICAgaWYg
KCFpc19sdGVxKHRyZWVPcmRlcihtYWtlQm91bmRhcnlQb2ludChtX3N0YXJ0KSwgbWFrZUJvdW5k
YXJ5UG9pbnQobV9lbmQpKSkpCiAgICAgICAgIG1fZW5kID0gbV9zdGFydDsKICAgICB1cGRhdGVB
c3NvY2lhdGVkU2VsZWN0aW9uKCk7CiAgICAgdXBkYXRlRG9jdW1lbnQoKTsKQEAgLTEzMCw3ICsx
MzAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIGNvbnRh
aW5lciwgdW5zaWduZWQgb2Zmc2V0KQogICAgICAgICByZXR1cm4gY2hpbGROb2RlLnJlbGVhc2VF
eGNlcHRpb24oKTsKIAogICAgIG1fZW5kLnNldChXVEZNb3ZlKGNvbnRhaW5lciksIG9mZnNldCwg
Y2hpbGROb2RlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLSAgICBpZiAoIWlzX2x0ZXEoZG9jdW1l
bnRPcmRlcihtYWtlQm91bmRhcnlQb2ludChtX3N0YXJ0KSwgbWFrZUJvdW5kYXJ5UG9pbnQobV9l
bmQpKSkpCisgICAgaWYgKCFpc19sdGVxKHRyZWVPcmRlcihtYWtlQm91bmRhcnlQb2ludChtX3N0
YXJ0KSwgbWFrZUJvdW5kYXJ5UG9pbnQobV9lbmQpKSkpCiAgICAgICAgIG1fc3RhcnQgPSBtX2Vu
ZDsKICAgICB1cGRhdGVBc3NvY2lhdGVkU2VsZWN0aW9uKCk7CiAgICAgdXBkYXRlRG9jdW1lbnQo
KTsKQEAgLTE1NSw3ICsxNTUsNyBAQCBFeGNlcHRpb25Pcjxib29sPiBSYW5nZTo6aXNQb2ludElu
UmFuZ2UoTm9kZSYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7
CiAgICAgfQotICAgIHJldHVybiBXZWJDb3JlOjppc1BvaW50SW5SYW5nZShtYWtlU2ltcGxlUmFu
Z2UoKnRoaXMpLCB7IGNvbnRhaW5lciwgb2Zmc2V0IH0pOworICAgIHJldHVybiBXZWJDb3JlOjpp
c1BvaW50SW5SYW5nZTxUcmVlPihtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpLCB7IGNvbnRhaW5lciwg
b2Zmc2V0IH0pOwogfQogCiBFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChO
b2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKQEAgLTE2Nyw3ICsxNjcsNyBA
QCBFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiBjb250YWluZXIs
IHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBX
cm9uZ0RvY3VtZW50RXJyb3IgfTsKICAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0LnJlbGVhc2VF
eGNlcHRpb24oKTsKICAgICB9Ci0gICAgYXV0byBvcmRlcmluZyA9IGRvY3VtZW50T3JkZXIoeyBj
b250YWluZXIsIG9mZnNldCB9LCBtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpKTsKKyAgICBhdXRvIG9y
ZGVyaW5nID0gdHJlZU9yZGVyKHsgY29udGFpbmVyLCBvZmZzZXQgfSwgbWFrZVNpbXBsZVJhbmdl
KCp0aGlzKSk7CiAgICAgaWYgKGlzX2x0KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIGlmIChpc19lcShvcmRlcmluZykpCkBAIC0xOTgsOCArMTk4LDggQEAgRXhjZXB0aW9uT3I8
UmFuZ2U6OkNvbXBhcmVSZXN1bHRzPiBSYW5nZTo6Y29tcGFyZU5vZGUoTm9kZSYgbm9kZSkgY29u
c3QKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKICAgICB9CiAK
LSAgICBhdXRvIHN0YXJ0T3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKG5vZGVSYW5nZS0+c3RhcnQs
IG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpKTsKLSAgICBhdXRvIGVuZE9yZGVyaW5nID0gZG9j
dW1lbnRPcmRlcihub2RlUmFuZ2UtPmVuZCwgbWFrZUJvdW5kYXJ5UG9pbnQobV9lbmQpKTsKKyAg
ICBhdXRvIHN0YXJ0T3JkZXJpbmcgPSB0cmVlT3JkZXIobm9kZVJhbmdlLT5zdGFydCwgbWFrZUJv
dW5kYXJ5UG9pbnQobV9zdGFydCkpOworICAgIGF1dG8gZW5kT3JkZXJpbmcgPSB0cmVlT3JkZXIo
bm9kZVJhbmdlLT5lbmQsIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSk7CiAgICAgaWYgKGlzX2d0
ZXEoc3RhcnRPcmRlcmluZykgJiYgaXNfbHRlcShlbmRPcmRlcmluZykpCiAgICAgICAgIHJldHVy
biBOT0RFX0lOU0lERTsKICAgICBpZiAoaXNfbHRlcShzdGFydE9yZGVyaW5nKSAmJiBpc19ndGVx
KGVuZE9yZGVyaW5nKSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBFeGNlcHRpb25PcjxzaG9ydD4gUmFu
Z2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyh1bnNpZ25lZCBzaG9ydCBob3csIGNvbnN0IFJhbmdl
JgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRF
cnJvciB9OwogICAgIH0KLSAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcihtYWtlQm91
bmRhcnlQb2ludCgqdGhpc1BvaW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoKm90aGVyUG9pbnQpKTsK
KyAgICBhdXRvIG9yZGVyaW5nID0gdHJlZU9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KCp0aGlzUG9p
bnQpLCBtYWtlQm91bmRhcnlQb2ludCgqb3RoZXJQb2ludCkpOwogICAgIGlmIChpc19sdChvcmRl
cmluZykpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQpAQCAt
MjU1LDcgKzI1NSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpkZWxldGVDb250ZW50cygp
CiAKIGJvb2wgUmFuZ2U6OmludGVyc2VjdHNOb2RlKE5vZGUmIG5vZGUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGludGVyc2VjdHMobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSwgbm9kZSk7CisgICAgcmV0
dXJuIGludGVyc2VjdHM8VHJlZT4obWFrZVNpbXBsZVJhbmdlKCp0aGlzKSwgbm9kZSk7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgTm9kZSogaGlnaGVzdEFuY2VzdG9yVW5kZXJDb21tb25Sb290KE5vZGUq
IG5vZGUsIE5vZGUqIGNvbW1vblJvb3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRl
eCA2NWJjYzg5MzFjY2RkMGU2ODg1Yzc5ZDNiYTA5MDJhNjg3OGVhZTM1Li44ODIzNTFjZDI0YWNm
N2JlNWE1NWMzOGFiNzEwNzFjNWYxZjVkOWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5j
cHAKQEAgLTk1LDI3ICs5NSwzMSBAQCBzdGF0aWMgUGFydGlhbE9yZGVyaW5nIG9yZGVyKHVuc2ln
bmVkIGEsIHVuc2lnbmVkIGIpCiAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVu
dDsKIH0KIAotLy8gRklYTUU6IENyZWF0ZSBCb3VuZGFyeVBvaW50LmNwcCBhbmQgbW92ZSB0aGlz
IHRoZXJlLgotUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2lu
dCYgYSwgY29uc3QgQm91bmRhcnlQb2ludCYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBl
PiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0
IEJvdW5kYXJ5UG9pbnQmIGIpCiB7CiAgICAgaWYgKGEuY29udGFpbmVyLnB0cigpID09IGIuY29u
dGFpbmVyLnB0cigpKQogICAgICAgICByZXR1cm4gb3JkZXIoYS5vZmZzZXQsIGIub2Zmc2V0KTsK
IAogICAgIGZvciAoYXV0byBhbmNlc3RvciA9IGIuY29udGFpbmVyLnB0cigpOyBhbmNlc3Rvcjsg
KSB7Ci0gICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9z
ZWRUcmVlKCk7CisgICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gcGFyZW50PFRyZWVUeXBlPigq
YW5jZXN0b3IpOwogICAgICAgICBpZiAobmV4dEFuY2VzdG9yID09IGEuY29udGFpbmVyLnB0cigp
KQogICAgICAgICAgICAgcmV0dXJuIGlzT2Zmc2V0QmVmb3JlQ2hpbGQoKm5leHRBbmNlc3Rvciwg
YS5vZmZzZXQsICphbmNlc3RvcikgPyBQYXJ0aWFsT3JkZXJpbmc6Omxlc3MgOiBQYXJ0aWFsT3Jk
ZXJpbmc6OmdyZWF0ZXI7CiAgICAgICAgIGFuY2VzdG9yID0gbmV4dEFuY2VzdG9yOwogICAgIH0K
IAogICAgIGZvciAoYXV0byBhbmNlc3RvciA9IGEuY29udGFpbmVyLnB0cigpOyBhbmNlc3Rvcjsg
KSB7Ci0gICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9z
ZWRUcmVlKCk7CisgICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gcGFyZW50PFRyZWVUeXBlPigq
YW5jZXN0b3IpOwogICAgICAgICBpZiAobmV4dEFuY2VzdG9yID09IGIuY29udGFpbmVyLnB0cigp
KQogICAgICAgICAgICAgcmV0dXJuIGlzT2Zmc2V0QmVmb3JlQ2hpbGQoKm5leHRBbmNlc3Rvciwg
Yi5vZmZzZXQsICphbmNlc3RvcikgPyBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXIgOiBQYXJ0aWFs
T3JkZXJpbmc6Omxlc3M7CiAgICAgICAgIGFuY2VzdG9yID0gbmV4dEFuY2VzdG9yOwogICAgIH0K
IAotICAgIHJldHVybiBkb2N1bWVudE9yZGVyKGEuY29udGFpbmVyLCBiLmNvbnRhaW5lcik7Cisg
ICAgcmV0dXJuIHRyZWVPcmRlcjxUcmVlVHlwZT4oYS5jb250YWluZXIsIGIuY29udGFpbmVyKTsK
K30KKworUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYg
YSwgY29uc3QgQm91bmRhcnlQb2ludCYgYikKK3sKKyAgICByZXR1cm4gdHJlZU9yZGVyPENvbXBv
c2VkVHJlZT4oYSwgYik7CiB9CiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlKE5vZGUmIG5vZGUpCkBAIC0yMDgsNDIgKzIxMiw3NCBAQCBSZWZQdHI8Tm9kZT4g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIHJl
dHVybiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdl
LmVuZC5jb250YWluZXIpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBp
c1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9p
bnQmIHBvaW50KQoreworICAgIHJldHVybiBpc19sdGVxKHRyZWVPcmRlcjxUcmVlVHlwZT4ocmFu
Z2Uuc3RhcnQsIHBvaW50KSkgJiYgaXNfbHRlcSh0cmVlT3JkZXI8VHJlZVR5cGU+KHBvaW50LCBy
YW5nZS5lbmQpKTsKK30KKwordGVtcGxhdGUgYm9vbCBpc1BvaW50SW5SYW5nZTxUcmVlPihjb25z
dCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVHJlZVR5cGU+IGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgcmV0dXJuIHBv
aW50ICYmIGlzUG9pbnRJblJhbmdlPFRyZWVUeXBlPihyYW5nZSwgKnBvaW50KTsKK30KKwogYm9v
bCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5
UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIocmFuZ2Uu
c3RhcnQsIHBvaW50KSkgJiYgaXNfbHRlcShkb2N1bWVudE9yZGVyKHBvaW50LCByYW5nZS5lbmQp
KTsKKyAgICByZXR1cm4gaXNQb2ludEluUmFuZ2U8Q29tcG9zZWRUcmVlPihyYW5nZSwgcG9pbnQp
OwogfQogCiBib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29u
c3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mIHBvaW50KQogewotICAgIHJldHVybiBwb2ludCAm
JiBpc1BvaW50SW5SYW5nZShyYW5nZSwgKnBvaW50KTsKKyAgICByZXR1cm4gaXNQb2ludEluUmFu
Z2U8Q29tcG9zZWRUcmVlPihyYW5nZSwgcG9pbnQpOwogfQogCi1QYXJ0aWFsT3JkZXJpbmcgZG9j
dW1lbnRPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQm
IHBvaW50KQordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IFBhcnRpYWxPcmRlcmluZyB0cmVl
T3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2lu
dCkKIHsKLSAgICBpZiAoYXV0byBvcmRlciA9IGRvY3VtZW50T3JkZXIocmFuZ2Uuc3RhcnQsIHBv
aW50KTsgIWlzX2x0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9IHRyZWVPcmRlcjxUcmVl
VHlwZT4ocmFuZ2Uuc3RhcnQsIHBvaW50KTsgIWlzX2x0KG9yZGVyKSkKICAgICAgICAgcmV0dXJu
IG9yZGVyOwotICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihyYW5nZS5lbmQsIHBv
aW50KTsgIWlzX2d0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9IHRyZWVPcmRlcjxUcmVl
VHlwZT4ocmFuZ2UuZW5kLCBwb2ludCk7ICFpc19ndChvcmRlcikpCiAgICAgICAgIHJldHVybiBv
cmRlcjsKICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjplcXVpdmFsZW50OwogfQogCi1QYXJ0
aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IFBhcnRp
YWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQsIGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoYXV0byBvcmRlciA9IGRvY3VtZW50T3JkZXIo
cG9pbnQsIHJhbmdlLnN0YXJ0KTsgIWlzX2d0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9
IHRyZWVPcmRlcjxUcmVlVHlwZT4ocG9pbnQsIHJhbmdlLnN0YXJ0KTsgIWlzX2x0KG9yZGVyKSkK
ICAgICAgICAgcmV0dXJuIG9yZGVyOwotICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRl
cihwb2ludCwgcmFuZ2UuZW5kKTsgIWlzX2x0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9
IHRyZWVPcmRlcjxUcmVlVHlwZT4ocG9pbnQsIHJhbmdlLmVuZCk7ICFpc19ndChvcmRlcikpCiAg
ICAgICAgIHJldHVybiBvcmRlcjsKICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjplcXVpdmFs
ZW50OwogfQogCit0ZW1wbGF0ZSBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyPFRyZWU+KGNvbnN0
IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwordGVtcGxhdGUgUGFydGlhbE9y
ZGVyaW5nIHRyZWVPcmRlcjxUcmVlPihjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgU2ltcGxl
UmFuZ2UmKTsKKworUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gdHJl
ZU9yZGVyPENvbXBvc2VkVHJlZT4ocmFuZ2UsIHBvaW50KTsKK30KKworUGFydGlhbE9yZGVyaW5n
IGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4ocG9pbnQs
IHJhbmdlKTsKK30KKwogYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5n
ZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpCiB7CiAgICAgcmV0dXJuIGlzX2x0ZXEo
ZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLnN0YXJ0LCBpbm5lclJhbmdlLnN0YXJ0KSkgJiYgaXNf
Z3RlcShkb2N1bWVudE9yZGVyKG91dGVyUmFuZ2UuZW5kLCBpbm5lclJhbmdlLmVuZCkpOwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBs
ZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3sKKyAgICByZXR1cm4gaXNfbHRlcSh0
cmVlT3JkZXI8VHJlZVR5cGU+KGEuc3RhcnQsIGIuZW5kKSkgJiYgaXNfbHRlcSh0cmVlT3JkZXI8
VHJlZVR5cGU+KGIuc3RhcnQsIGEuZW5kKSk7Cit9CisKK3RlbXBsYXRlIGJvb2wgaW50ZXJzZWN0
czxUcmVlPihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKIGJvb2wg
aW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIpCiB7
Ci0gICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihhLnN0YXJ0LCBiLmVuZCkpICYmIGlz
X2x0ZXEoZG9jdW1lbnRPcmRlcihiLnN0YXJ0LCBhLmVuZCkpOworICAgIHJldHVybiBpbnRlcnNl
Y3RzPENvbXBvc2VkVHJlZT4oYSwgYik7CiB9CiAKIHN0YXRpYyBib29sIGNvbXBhcmVCeURvY3Vt
ZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgYSwgY29uc3QgQm91bmRhcnlQb2ludCYgYikK
QEAgLTI3MiwxNCArMzA4LDM1IEBAIGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBjb25zdCBOb2RlJiBub2RlKQogICAgIHJldHVybiBub2RlUmFuZ2UgJiYgY29udGFpbnMo
cmFuZ2UsICpub2RlUmFuZ2UpOwogfQogCi1ib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+
IGJvb2wgY29udGFpbnMoY29uc3QgTm9kZSYgb3V0ZXIsIGNvbnN0IE5vZGUmIGlubmVyKTsKKwor
dGVtcGxhdGU8PiBib29sIGNvbnRhaW5zPFRyZWU+KGNvbnN0IE5vZGUmIG91dGVyLCBjb25zdCBO
b2RlJiBpbm5lcikKK3sKKyAgICByZXR1cm4gb3V0ZXIuY29udGFpbnMoaW5uZXIpOworfQorCit0
ZW1wbGF0ZTw+IGJvb2wgY29udGFpbnM8Q29tcG9zZWRUcmVlPihjb25zdCBOb2RlJiBvdXRlciwg
Y29uc3QgTm9kZSYgaW5uZXIpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hhdCB0aGUgY29k
ZSBkaWQgYmVmb3JlLCBidXQgaXQgaXMgbm90IGNvcnJlY3QhCisgICAgcmV0dXJuIG91dGVyLmNv
bnRhaW5zKGlubmVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaW50
ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAg
ICAgLy8gRklYTUU6IENvbnNpZGVyIGEgbW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtIHRoYXQgYXZv
aWRzIGFsd2F5cyBjb21wdXRpbmcgdGhlIG5vZGUgaW5kZXguCiAgICAgLy8gRklYTUU6IERvZXMg
dGhpcyBjb25zdF9jYXN0IHBvaW50IHRvIGEgZGVzaWduIHByb2JsZW0/CiAgICAgYXV0byBub2Rl
UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGNvbnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpKTsK
ICAgICBpZiAoIW5vZGVSYW5nZSkKLSAgICAgICAgcmV0dXJuIG5vZGUuY29udGFpbnMocmFuZ2Uu
c3RhcnQuY29udGFpbmVyLnB0cigpKTsKLSAgICByZXR1cm4gaXNfbHQoZG9jdW1lbnRPcmRlcihu
b2RlUmFuZ2UtPnN0YXJ0LCByYW5nZS5lbmQpKSAmJiBpc19sdChkb2N1bWVudE9yZGVyKHJhbmdl
LnN0YXJ0LCBub2RlUmFuZ2UtPmVuZCkpOworICAgICAgICByZXR1cm4gY29udGFpbnM8VHJlZVR5
cGU+KG5vZGUsIHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIGlzX2x0KHRyZWVP
cmRlcjxUcmVlVHlwZT4obm9kZVJhbmdlLT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQodHJl
ZU9yZGVyPFRyZWVUeXBlPihyYW5nZS5zdGFydCwgbm9kZVJhbmdlLT5lbmQpKTsKKworfQorCit0
ZW1wbGF0ZSBib29sIGludGVyc2VjdHM8VHJlZT4oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBO
b2RlJik7CisKK2Jvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0
IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIGludGVyc2VjdHM8Q29tcG9zZWRUcmVlPihyYW5n
ZSwgbm9kZSk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA2MGIzMDJmZWIw
Y2ExZWU5ZTE1NmM5YmMzYTIwMGFlNGZkZjMwMWRkLi40OTBjMGJlMzFjMWFhY2IzZjZiZjVjM2Yy
MTE3MWU2MmZiNGVjODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNjUsMTggKzY1
LDI0IEBAIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihjb25zdCBTaW1wbGVSYW5nZSYpOwogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFu
Z2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4g
Ym9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9p
bnQmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGlzUG9pbnRJblJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBC
b3VuZGFyeVBvaW50Jik7CiBib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwg
Y29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCBj
b250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2Um
IGlubmVyUmFuZ2UpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaW50ZXJzZWN0
cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JFX0VYUE9S
VCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYp
OwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gaW50ZXJzZWN0aW9uKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYpOwogCiBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5
cGU+IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5v
ZGUmKTsKIAogLy8gUmV0dXJucyBlcXVpdmFsZW50IGlmIHBvaW50IGlzIGluIHJhbmdlLgordGVt
cGxhdGU8dHlwZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVy
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJv
dW5kYXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgUGFydGlh
bE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFy
eVBvaW50Jik7CiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihj
b25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg3ZmRh
NTI3OGYzMGIzMzc4YzdjNmM3YmQ3ZWVlMzQwYmE4Yzc1MmYuLjg2ZjVlODE2Mjc3NGZkZGNjNWY0
OGMwMjI5MWQ2NDU0ZDRlMmRkMWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0xMC0yMCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjY2
Mjk1KTogUmFuZ2UgYWxsb3dzIHN0YXJ0IGFuZCBlbmQgY29udGFpbmVycyB0byBiZWxvbmcgdG8g
ZGlmZmVyZW50IHRyZWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTc4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL3Jhbmdlcy1hY3Jvc3MtdHJlZXMuaHRtbDogQWRkZWQu
CisKIDIwMjAtMTAtMTkgIEhlY3RvciBMb3BleiAgPGhlY3Rvcl9pX2xvcGV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBbIFdpbkNhaXJvIF0gYW5pbWF0aW9ucy9uZWVkcy1sYXlvdXQuaHRtbCBpcyBh
IGNvbnN0YW50IEltYWdlT25seUZhaWx1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL1JhbmdlL3Jhbmdlcy1hY3Jvc3MtdHJlZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1JhbmdlL3Jhbmdlcy1hY3Jvc3MtdHJlZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTZhYWVmOTk1MDNk
ZWMyZGI0MGY2YzA1YmZiNWRiY2Y4OTVmZmIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2VzLWFjcm9zcy10cmVlcy5odG1sCkBAIC0wLDAgKzEsNTgg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cisg
ICAgPHNjcmlwdD4KKyAgICAgICAgY29uc3Qgc2hhZG93SG9zdCA9IGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICBjb25zdCBz
aGFkb3dSb290ID0gc2hhZG93SG9zdC5hdHRhY2hTaGFkb3coe21vZGU6ICdjbG9zZWQnfSk7Cisg
ICAgICAgIHNoYWRvd1Jvb3QudGV4dENvbnRlbnQgPSAnaGVsbG8nOworICAgICAgICBjb25zdCBz
aGFkb3dOb2RlID0gc2hhZG93Um9vdC5maXJzdENoaWxkOworCisgICAgICAgIGZ1bmN0aW9uIGJv
ZHlSYW5nZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGUoZG9jdW1lbnQuYm9k
eSk7CisgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBjb2xsYXBzZWRSYW5nZU5vZGUocmFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiByYW5nZS5jb2xsYXBzZWQgPyByYW5nZS5zdGFydENvbnRhaW5lciA6ICJub3QgY29sbGFw
c2VkIjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RSYW5nZU11dGF0aW9uKHRl
c3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJhbmdlID0gYm9keVJhbmdlKCk7CisgICAgICAg
ICAgICBzaG91bGRCZSgicmFuZ2UuIiArIHRlc3QgKyAiOyBjb2xsYXBzZWRSYW5nZU5vZGUocmFu
Z2UpIiwgInNoYWRvd1Jvb3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlc3RSYW5nZU11dGF0
aW9uKCJzZXRTdGFydChzaGFkb3dSb290LCAwKSIpOworICAgICAgICB0ZXN0UmFuZ2VNdXRhdGlv
bigic2V0RW5kKHNoYWRvd1Jvb3QsIDApIik7CisgICAgICAgIHRlc3RSYW5nZU11dGF0aW9uKCJz
ZXRTdGFydEJlZm9yZShzaGFkb3dOb2RlKSIpOworICAgICAgICB0ZXN0UmFuZ2VNdXRhdGlvbigi
c2V0U3RhcnRBZnRlcihzaGFkb3dOb2RlKSIpOworICAgICAgICB0ZXN0UmFuZ2VNdXRhdGlvbigi
c2V0RW5kQmVmb3JlKHNoYWRvd05vZGUpIik7CisgICAgICAgIHRlc3RSYW5nZU11dGF0aW9uKCJz
ZXRFbmRBZnRlcihzaGFkb3dOb2RlKSIpOworCisgICAgICAgIHNob3VsZEJlRmFsc2UoImJvZHlS
YW5nZSgpLmlzUG9pbnRJblJhbmdlKHNoYWRvd05vZGUsIDApIik7CisgICAgICAgIHNob3VsZFRo
cm93RXJyb3JOYW1lKCJib2R5UmFuZ2UoKS5jb21wYXJlUG9pbnQoc2hhZG93Tm9kZSwgMCkiLCAi
V3JvbmdEb2N1bWVudEVycm9yIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImJvZHlSYW5nZSgp
LmludGVyc2VjdHNOb2RlKHNoYWRvd05vZGUpIik7CisgICAgICAgIHNob3VsZFRocm93RXJyb3JO
YW1lKCJib2R5UmFuZ2UoKS5jb21wYXJlTm9kZShzaGFkb3dOb2RlKSIsICJXcm9uZ0RvY3VtZW50
RXJyb3IiKTsKKworICAgICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIE5vZGUgbWV0aG9kcywgbm90
IFJhbmdlLCBzbyB3ZSBtaWdodCB3YW50IHRvIG1vdmUgdGhlbSBpbnRvIGEgc2VwYXJhdGUgdGVz
dC4KKworICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbihzaGFkb3dOb2RlKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIiwg
Ik5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIik7CisgICAgICAgIHNob3VsZEJl
VHJ1ZSgiKGRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oc2hhZG93Tm9kZSkg
JiAoTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcgfCBOb2RlLkRPQ1VNRU5UX1BPU0lU
SU9OX0ZPTExPV0lORykpICE9IDAiKTsKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmJvZHku
Y29tcGFyZURvY3VtZW50UG9zaXRpb24oc2hhZG93Tm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lU
SU9OX0NPTlRBSU5TIiwgIjAiKTsKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuY29t
cGFyZURvY3VtZW50UG9zaXRpb24oc2hhZG93Tm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9O
X0NPTlRBSU5FRF9CWSIsICIwIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKHNoYWRvd05vZGUpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElP
Tl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQyIsICJOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExF
TUVOVEFUSU9OX1NQRUNJRklDIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKHNoYWRvd05vZGUpICYgfihOb2RlLkRPQ1VNRU5UX1BPU0lU
SU9OX0RJU0NPTk5FQ1RFRCB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HIHwgTm9k
ZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcgfCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NP
TlRBSU5TIHwgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkgfCBOb2RlLkRPQ1VN
RU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDKSIsICIwIik7CisKKyAgICAgICAg
c2hvdWxkQmVGYWxzZSgiZG9jdW1lbnQuYm9keS5jb250YWlucyhzaGFkb3dOb2RlKSIpOworCisg
ICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2hhZG93SG9zdCk7CisgICAgICAgIAor
ICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIDwvc2NyaXB0PgorPC9odG1s
Pgo=
</data>
<flag name="commit-queue"
          id="428286"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411951</attachid>
            <date>2020-10-20 19:17:12 -0700</date>
            <delta_ts>2020-10-20 20:00:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217895-20201020191711.patch</filename>
            <type>text/plain</type>
            <size>27266</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTE5NDNiNjVkMjgxOWU1
MzY4OTAwYTAyOWI4NTg4MmUyYWM0YzY0Mi4uOTdhNGM0NjlhMWRjNDViYmEzZmI3YWFkYWQ1YTc5
YzQwMDM2YTUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTEwLTIwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUp
OiBSYW5nZSBhbGxvd3Mgc3RhcnQgYW5kIGVuZCBjb250YWluZXJzIHRvIGJlbG9uZyB0byBkaWZm
ZXJlbnQgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL1JhbmdlL3Jhbmdlcy1hY3Jvc3MtdHJlZXMuaHRtbAorCisgICAg
ICAgICogZG9tL0JvdW5kYXJ5UG9pbnQuaDogQWRkZWQgdHJlZU9yZGVyPFRyZWVUeXBlPi4KKwor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudDxUcmVlPik6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyZW50PENvbXBvc2VkVHJlZT4pOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmRlcHRoKTogQ2hhbmdlZCBpbnRvIGEgdGVtcGxhdGUgdGhhdCB0
YWtlcyBUcmVlVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
QW5kQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yKTogQ2hhbmdlZCB0byBleHBsaWNpdGx5IHVzZSBDb21wb3NlZFRyZWUgdG8gcHJlc2Vy
dmUKKyAgICAgICAgdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBsaWtlbHkgd2lsbCByZXR1cm4g
bGF0ZXIgdG8gbWFrZSB0aGlzIGEgdGVtcGxhdGUgYW5kIGhhdmUgaXQKKyAgICAgICAgdXMgdGhl
IG5vcm1hbCB0cmVlIGJ5IGRlZmF1bHQuCisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBD
aGFuZ2VkIGludG8gYSB0ZW1wbGF0ZSB0aGF0IHRha2VzIFRyZWVUeXBlLgorICAgICAgICAoV2Vi
Q29yZTo6ZG9jdW1lbnRPcmRlcik6IENhbGwgdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4gdG8gcHJl
c2VydmUgdGhlIGN1cnJlbnQgYmVoYXZpb3IuCisgICAgICAgIExpa2VseSB3aWxsIGRlbGV0ZSB0
aGlzIGxhdGVyIGFmdGVyIGNoYW5naW5nIGNhbGxlcnMgdG8gdXNlIHRyZWVPcmRlci4KKworICAg
ICAgICAqIGRvbS9Ob2RlLmg6IEFkZGVkIFRyZWUsIFNoYWRvd0luY2x1ZGluZ1RyZWUsIGFuZCBD
b21wb3NlZFRyZWUuIEFkZGVkIHBhcmVudCBhbmQKKyAgICAgICAgdHJlZU9yZGVyIGZ1bmN0aW9u
IHRlbXBsYXRlcy4gVHJlZVR5cGUgY3VycmVudGx5IGlzIGEgc2V0IG9mIGNsYXNzZXMgYnV0IHRo
ZXkgY291bGQKKyAgICAgICAgYWxzbyBiZSBvYmplY3RzIG9mIGFub3RoZXIgdHlwZS4gTWF5YmUg
YW4gZW51bWVyYXRpb24gbmFtZWQgVHJlZVR5cGUgaW5zdGVhZD8KKworICAgICAgICAqIGRvbS9S
YW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOiBVc2UgdHJlZU9y
ZGVyIGluc3RlYWQgb2YgZG9jdW1lbnRPcmRlciB0byB1c2UgdGhlIG5vcm1hbAorICAgICAgICB0
cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6c2V0RW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFu
Z2UpOiBVc2UgaXNQb2ludEluUmFuZ2U8VHJlZT4gaW5zdGVhZCBvZiBpc1BvaW50SW5SYW5nZQor
ICAgICAgICB0byB1c2UgdGhlIG5vcm1hbCB0cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRy
ZWUuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIHRy
ZWVPcmRlciBpbnN0ZWFkIG9mIGRvY3VtZW50T3JkZXIgdG8gdXNlCisgICAgICAgIHRoZSBub3Jt
YWwgdHJlZSBpbnN0ZWFkIG9mIHRoZSBjb21wb3NlZCB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6aW50ZXJzZWN0c05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0czxUcmVlPiBpbnN0
ZWFkIG9mIGlzUG9pbnRJblJhbmdlCisgICAgICAgIHRvIHVzZSB0aGUgbm9ybWFsIHRyZWUgaW5z
dGVhZCBvZiB0aGUgY29tcG9zZWQgdHJlZS4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBDaGFuZ2VkIGludG8gYSB0ZW1wbGF0
ZSB0aGF0IHRha2VzIFRyZWVUeXBlLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6
IENhbGwgdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4gdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgYmVo
YXZpb3IuCisgICAgICAgIExpa2VseSB3aWxsIGRlbGV0ZSB0aGlzIGxhdGVyIGFmdGVyIGNoYW5n
aW5nIGNhbGxlcnMgdG8gdXNlIHRyZWVPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmlzUG9pbnRJ
blJhbmdlKTogQ2hhbmdlZCBpbnRvIGEgdGVtcGxhdGUgdGhhdCB0YWtlcyBUcmVlVHlwZS4KKyAg
ICAgICAgRm9yIG5vdyB0aGUgZGVmYXVsdCB0cmVlIHR5cGUgaXMgc3RpbGwgQ29tcG9zZWRUcmVl
LCBidXQgd2lsbCBjaGFuZ2UgdGhhdCBsYXRlci4KKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2Vj
dHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zPFRyZWU+KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb250YWluczxDb21wb3NlZFRyZWU+KTogQWRkZWQuCisKKyAgICAg
ICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogQWRkZWQgaXNQb2ludEluUmFuZ2UsIGludGVyc2VjdHMs
IGFuZCB0cmVlT3JkZXIgZnVuY3Rpb24gdGVtcGxhdGVzLgorCiAyMDIwLTEwLTIwICBTaWh1aSBM
aXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdHVicyBmb3IgU3BlZWNo
UmVjb2duaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCmluZGV4IGJkZjFlODgwMDVl
ODVjNGM2NjQ0NjFiZTY1OWY5NjUyYzY3OTUyNDguLjUzZjU0YTgwMWFmNmU0NmNmMWRlMzE3MGFh
NjMzOTkxMzJkOTVmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBv
aW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaApAQCAtNDAsNiAr
NDAsOCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
b3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFRyZWVUeXBlID0gVHJlZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBC
b3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogV0VCQ09SRV9FWFBPUlQgUGFy
dGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmKTsKIAogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4g
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlKE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAz
ZjFlNWMwZmY3ODNlMGM4MDJmYTYwYTUwMDc3NDE2NjgyMDM3NDAxLi5iMmU0NzYxZWM0OGU5MGMw
Njc5NGY4ZDI5N2U1YjBkMjU3M2NjYTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNjIyLDExICsy
NjIyLDIxIEBAIHZvaWQqIE5vZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKICAgICByZXR1cm4g
Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKIH0KIAot
c3RhdGljIHNpemVfdCBkZXB0aEluQ29tcG9zZWRUcmVlKGNvbnN0IE5vZGUmIG5vZGUpCit0ZW1w
bGF0ZTw+IENvbnRhaW5lck5vZGUqIHBhcmVudDxUcmVlPihjb25zdCBOb2RlJiBub2RlKQorewor
ICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUoKTsKK30KKwordGVtcGxhdGU8PiBDb250YWluZXJO
b2RlKiBwYXJlbnQ8Q29tcG9zZWRUcmVlPihjb25zdCBOb2RlJiBub2RlKQoreworICAgIHJldHVy
biBub2RlLnBhcmVudEluQ29tcG9zZWRUcmVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRy
ZWVUeXBlPiBzaXplX3QgZGVwdGgoY29uc3QgTm9kZSYgbm9kZSkKIHsKICAgICBzaXplX3QgZGVw
dGggPSAwOwogICAgIGF1dG8gYW5jZXN0b3IgPSAmbm9kZTsKLSAgICB3aGlsZSAoKGFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9zZWRUcmVlKCkpKQorICAgIHdoaWxlICgoYW5jZXN0
b3IgPSBwYXJlbnQ8VHJlZVR5cGU+KCphbmNlc3RvcikpKQogICAgICAgICArK2RlcHRoOwogICAg
IHJldHVybiBkZXB0aDsKIH0KQEAgLTI2MzcsOCArMjY0Nyw3IEBAIHN0cnVjdCBBbmNlc3RvckFu
ZENoaWxkcmVuIHsKICAgICBjb25zdCBOb2RlKiBkaXN0aW5jdEFuY2VzdG9yQjsKIH07CiAKLS8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uJ3MgbmFtZSBpcyBub3QgZXhwbGljaXQgYWJvdXQgdGhlIGZh
Y3QgdGhhdCBpdCdzIHRoZSBjb21tb24gaW5jbHVzaXZlIGFuY2VzdG9yIGluIHRoZSBjb21wb3Nl
ZCB0cmVlLgotc3RhdGljIEFuY2VzdG9yQW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3JBbmRDaGlsZHJlbihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQordGVtcGxhdGU8dHlw
ZW5hbWUgVHJlZVR5cGU+IEFuY2VzdG9yQW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3JBbmRDaGlsZHJlbihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQogewogICAgIC8vIFRo
aXMgY2hlY2sgaXNuJ3QgbmVlZGVkIGZvciBjb3JyZWN0bmVzcywgYnV0IGl0IGlzIGNoZWFwIGFu
ZCBsaWtlbHkgdG8gYmUKICAgICAvLyBjb21tb24gZW5vdWdoIHRvIGJlIHdvcnRoIG9wdGltaXpp
bmcgc28gd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIHRvIHRoZSByb290LgpAQCAtMjY0NywzMSArMjY1
NiwzMSBAQCBzdGF0aWMgQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
ckFuZENoaWxkcmVuKGNvbnN0IE5vZGUmIGEsIGNvbgogICAgIC8vIEZJWE1FOiBDb3VsZCBvcHRp
bWl6ZSBjYXNlcyB3aGVyZSBub2RlcyBhcmUgYm90aCBpbiB0aGUgc2FtZSBzaGFkb3cgdHJlZS4K
ICAgICAvLyBGSVhNRTogQ291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgbm9kZXMgYXJlIGluIGRp
ZmZlcmVudCBkb2N1bWVudHMgdG8gcXVpY2tseSByZXR1cm4gZmFsc2UuCiAgICAgLy8gRklYTUU6
IENvdWxkIG9wdGltaXplIGNhc2VzIHdoZXJlIG9uZSBub2RlIGlzIGNvbm5lY3RlZCBhbmQgdGhl
IG90aGVyIGlzIG5vdCB0byBxdWlja2x5IHJldHVybiBmYWxzZS4KLSAgICBhdXRvIFtkZXB0aEEs
IGRlcHRoQl0gPSBzdGQ6Om1ha2VfdHVwbGUoZGVwdGhJbkNvbXBvc2VkVHJlZShhKSwgZGVwdGhJ
bkNvbXBvc2VkVHJlZShiKSk7CisgICAgYXV0byBbZGVwdGhBLCBkZXB0aEJdID0gc3RkOjptYWtl
X3R1cGxlKGRlcHRoPFRyZWVUeXBlPihhKSwgZGVwdGg8VHJlZVR5cGU+KGIpKTsKICAgICBhdXRv
IFt4LCB5LCBkaWZmZXJlbmNlXSA9IGRlcHRoQSA+PSBkZXB0aEIKICAgICAgICAgPyBzdGQ6Om1h
a2VfdHVwbGUoJmEsICZiLCBkZXB0aEEgLSBkZXB0aEIpCiAgICAgICAgIDogc3RkOjptYWtlX3R1
cGxlKCZiLCAmYSwgZGVwdGhCIC0gZGVwdGhBKTsKICAgICBkZWNsdHlwZSh4KSBkaXN0aW5jdEFu
Y2VzdG9yQSA9IG51bGxwdHI7CiAgICAgZm9yIChkZWNsdHlwZShkaWZmZXJlbmNlKSBpID0gMDsg
aSA8IGRpZmZlcmVuY2U7ICsraSkgewogICAgICAgICBkaXN0aW5jdEFuY2VzdG9yQSA9IHg7Ci0g
ICAgICAgIHggPSB4LT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpOworICAgICAgICB4ID0gcGFyZW50
PFRyZWVUeXBlPigqeCk7CiAgICAgfQogICAgIGRlY2x0eXBlKHkpIGRpc3RpbmN0QW5jZXN0b3JC
ID0gbnVsbHB0cjsKICAgICB3aGlsZSAoeCAhPSB5KSB7CiAgICAgICAgIGRpc3RpbmN0QW5jZXN0
b3JBID0geDsKICAgICAgICAgZGlzdGluY3RBbmNlc3RvckIgPSB5OwotICAgICAgICB4ID0geC0+
cGFyZW50SW5Db21wb3NlZFRyZWUoKTsKLSAgICAgICAgeSA9IHktPnBhcmVudEluQ29tcG9zZWRU
cmVlKCk7CisgICAgICAgIHggPSBwYXJlbnQ8VHJlZVR5cGU+KCp4KTsKKyAgICAgICAgeSA9IHBh
cmVudDxUcmVlVHlwZT4oKnkpOwogICAgIH0KICAgICBpZiAoZGVwdGhBIDwgZGVwdGhCKQogICAg
ICAgICBzdGQ6OnN3YXAoZGlzdGluY3RBbmNlc3RvckEsIGRpc3RpbmN0QW5jZXN0b3JCKTsKICAg
ICByZXR1cm4geyB4LCBkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNlc3RvckIgfTsKIH0K
IAotLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24ncyBuYW1lIGlzIG5vdCBleHBsaWNpdCBhYm91dCB0
aGUgZmFjdCB0aGF0IGl0J3MgdGhlIGNvbW1vbiBpbmNsdXNpdmUgYW5jZXN0b3IgaW4gdGhlIGNv
bXBvc2VkIHRyZWUuCisvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gd29yayB3aXRoaW4gdGhlIG5v
cm1hbCB0cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRyZWUuIE9yIHJlbmFtZSBhbmQvb3Ig
c3BsaXQgaW50byBtdWx0aXBsZSBmdW5jdGlvbnMuCiBSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYgYikKIHsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxO
b2RlKj4oY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbihhLCBiKS5jb21tb25BbmNl
c3Rvcik7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZSo+KGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yQW5kQ2hpbGRyZW48Q29tcG9zZWRUcmVlPihhLCBiKS5jb21tb25BbmNlc3Rvcik7CiB9CiAK
IHN0YXRpYyBib29sIGlzU2libGluZ1N1YnNlcXVlbnQoY29uc3QgTm9kZSYgc2libGluZ0EsIGNv
bnN0IE5vZGUmIHNpYmxpbmdCKQpAQCAtMjY4NiwxMSArMjY5NSwxMSBAQCBzdGF0aWMgYm9vbCBp
c1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxpbmdBLCBjb25zdCBOb2RlJiBzaWJs
aW5nQikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9y
ZGVyKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVl
VHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2Rl
JiBiKQogewogICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmlu
Zzo6ZXF1aXZhbGVudDsKLSAgICBhdXRvIHJlc3VsdCA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
QW5kQ2hpbGRyZW4oYSwgYik7CisgICAgYXV0byByZXN1bHQgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvckFuZENoaWxkcmVuPFRyZWVUeXBlPihhLCBiKTsKICAgICBpZiAoIXJlc3VsdC5jb21tb25B
bmNlc3RvcikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6dW5vcmRlcmVkOwogICAg
IGlmICghcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JBKQpAQCAtMjcxMCw2ICsyNzE5LDEzIEBAIFBh
cnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIp
CiAgICAgcmV0dXJuIGlzU2libGluZ1N1YnNlcXVlbnQoKnJlc3VsdC5kaXN0aW5jdEFuY2VzdG9y
QSwgKnJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQikgPyBQYXJ0aWFsT3JkZXJpbmc6Omxlc3MgOiBQ
YXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXI7CiB9CiAKK3RlbXBsYXRlIFBhcnRpYWxPcmRlcmluZyB0
cmVlT3JkZXI8VHJlZT4oY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKKworUGFydGlhbE9yZGVy
aW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikKK3sKKyAgICBy
ZXR1cm4gdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4oYSwgYik7Cit9CisKIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgdHMgPDwg
Im5vZGUgIiA8PCAmbm9kZSA8PCAiICIgPDwgbm9kZS5kZWJ1Z0Rlc2NyaXB0aW9uKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAppbmRleCAxOThlYWYzMDIwYjg4ZTJiMWQxMTg4OWUwMTZiN2NmZjQ1MDkyY2RlLi44NTQ1
MWJhY2E2ZjY3YzhjODkxNTdlZWM1ZmJiOTA4NzE2N2UzZjJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTc1
NSw2ICs3NTUsMTIgQEAgY29uc3RleHByIGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyk7CiBj
b25zdGV4cHIgYm9vbCBpc19sdGVxKFBhcnRpYWxPcmRlcmluZyk7CiBjb25zdGV4cHIgYm9vbCBp
c19ndGVxKFBhcnRpYWxPcmRlcmluZyk7CiAKK3N0cnVjdCBUcmVlIHsgfTsKK3N0cnVjdCBTaGFk
b3dJbmNsdWRpbmdUcmVlIHsgfTsKK3N0cnVjdCBDb21wb3NlZFRyZWUgeyB9OwordGVtcGxhdGU8
dHlwZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBDb250YWluZXJOb2RlKiBwYXJlbnQoY29uc3QgTm9k
ZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcg
dHJlZU9yZGVyKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CisKIFdFQkNPUkVfRVhQT1JUIFBh
cnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CiAK
ICNpZiBBU1NFUlRfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggNGE5ZjQzZmJmMWY1NTMx
NTFmMDE5MThkODBjMDc2NDJiMDY1OTc1Mi4uYjJmZTYzMDIyZDM5ZjFmOGFiNGRlNTU3NTYzMWMx
Y2M2ZDRjN2UwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWdu
ZWQgb2Zmc2V0KQogICAgICAgICByZXR1cm4gY2hpbGROb2RlLnJlbGVhc2VFeGNlcHRpb24oKTsK
IAogICAgIG1fc3RhcnQuc2V0KFdURk1vdmUoY29udGFpbmVyKSwgb2Zmc2V0LCBjaGlsZE5vZGUu
cmVsZWFzZVJldHVyblZhbHVlKCkpOwotICAgIGlmICghaXNfbHRlcShkb2N1bWVudE9yZGVyKG1h
a2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpKSkKKyAg
ICBpZiAoIWlzX2x0ZXEodHJlZU9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpLCBtYWtl
Qm91bmRhcnlQb2ludChtX2VuZCkpKSkKICAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OwogICAgIHVw
ZGF0ZUFzc29jaWF0ZWRTZWxlY3Rpb24oKTsKICAgICB1cGRhdGVEb2N1bWVudCgpOwpAQCAtMTMw
LDcgKzEzMCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYg
Y29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgICAgIHJldHVybiBjaGlsZE5vZGUucmVs
ZWFzZUV4Y2VwdGlvbigpOwogCiAgICAgbV9lbmQuc2V0KFdURk1vdmUoY29udGFpbmVyKSwgb2Zm
c2V0LCBjaGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotICAgIGlmICghaXNfbHRlcShk
b2N1bWVudE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2lu
dChtX2VuZCkpKSkKKyAgICBpZiAoIWlzX2x0ZXEodHJlZU9yZGVyKG1ha2VCb3VuZGFyeVBvaW50
KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkpKSkKICAgICAgICAgbV9zdGFydCA9
IG1fZW5kOwogICAgIHVwZGF0ZUFzc29jaWF0ZWRTZWxlY3Rpb24oKTsKICAgICB1cGRhdGVEb2N1
bWVudCgpOwpAQCAtMTU1LDcgKzE1NSw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppc1Bv
aW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKTsKICAgICB9Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmlzUG9pbnRJblJhbmdlKG1ha2VTaW1w
bGVSYW5nZSgqdGhpcyksIHsgY29udGFpbmVyLCBvZmZzZXQgfSk7CisgICAgcmV0dXJuIFdlYkNv
cmU6OmlzUG9pbnRJblJhbmdlPFRyZWU+KG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIHsgY29udGFp
bmVyLCBvZmZzZXQgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZVBv
aW50KE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdApAQCAtMTY3LDcgKzE2
Nyw3IEBAIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUmIGNvbnRh
aW5lciwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogICAgICAgICByZXR1cm4gY2hlY2tSZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KLSAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRl
cih7IGNvbnRhaW5lciwgb2Zmc2V0IH0sIG1ha2VTaW1wbGVSYW5nZSgqdGhpcykpOworICAgIGF1
dG8gb3JkZXJpbmcgPSB0cmVlT3JkZXIoeyBjb250YWluZXIsIG9mZnNldCB9LCBtYWtlU2ltcGxl
UmFuZ2UoKnRoaXMpKTsKICAgICBpZiAoaXNfbHQob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4g
LTE7CiAgICAgaWYgKGlzX2VxKG9yZGVyaW5nKSkKQEAgLTE5OCw4ICsxOTgsOCBAQCBFeGNlcHRp
b25PcjxSYW5nZTo6Q29tcGFyZVJlc3VsdHM+IFJhbmdlOjpjb21wYXJlTm9kZShOb2RlJiBub2Rl
KSBjb25zdAogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciB9OwogICAg
IH0KIAotICAgIGF1dG8gc3RhcnRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5z
dGFydCwgbWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCkpOwotICAgIGF1dG8gZW5kT3JkZXJpbmcg
PSBkb2N1bWVudE9yZGVyKG5vZGVSYW5nZS0+ZW5kLCBtYWtlQm91bmRhcnlQb2ludChtX2VuZCkp
OworICAgIGF1dG8gc3RhcnRPcmRlcmluZyA9IHRyZWVPcmRlcihub2RlUmFuZ2UtPnN0YXJ0LCBt
YWtlQm91bmRhcnlQb2ludChtX3N0YXJ0KSk7CisgICAgYXV0byBlbmRPcmRlcmluZyA9IHRyZWVP
cmRlcihub2RlUmFuZ2UtPmVuZCwgbWFrZUJvdW5kYXJ5UG9pbnQobV9lbmQpKTsKICAgICBpZiAo
aXNfZ3RlcShzdGFydE9yZGVyaW5nKSAmJiBpc19sdGVxKGVuZE9yZGVyaW5nKSkKICAgICAgICAg
cmV0dXJuIE5PREVfSU5TSURFOwogICAgIGlmIChpc19sdGVxKHN0YXJ0T3JkZXJpbmcpICYmIGlz
X2d0ZXEoZW5kT3JkZXJpbmcpKQpAQCAtMjM1LDcgKzIzNSw3IEBAIEV4Y2VwdGlvbk9yPHNob3J0
PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHVuc2lnbmVkIHNob3J0IGhvdywgY29uc3Qg
UmFuZ2UmCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBv
cnRlZEVycm9yIH07CiAgICAgfQotICAgIGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKG1h
a2VCb3VuZGFyeVBvaW50KCp0aGlzUG9pbnQpLCBtYWtlQm91bmRhcnlQb2ludCgqb3RoZXJQb2lu
dCkpOworICAgIGF1dG8gb3JkZXJpbmcgPSB0cmVlT3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQoKnRo
aXNQb2ludCksIG1ha2VCb3VuZGFyeVBvaW50KCpvdGhlclBvaW50KSk7CiAgICAgaWYgKGlzX2x0
KG9yZGVyaW5nKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChpc19lcShvcmRlcmluZykp
CkBAIC0yNTUsNyArMjU1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OmRlbGV0ZUNvbnRl
bnRzKCkKIAogYm9vbCBSYW5nZTo6aW50ZXJzZWN0c05vZGUoTm9kZSYgbm9kZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gaW50ZXJzZWN0cyhtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpLCBub2RlKTsKKyAg
ICByZXR1cm4gaW50ZXJzZWN0czxUcmVlPihtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpLCBub2RlKTsK
IH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBoaWdoZXN0QW5jZXN0b3JVbmRlckNvbW1vblJvb3Qo
Tm9kZSogbm9kZSwgTm9kZSogY29tbW9uUm9vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3Bw
CmluZGV4IDY1YmNjODkzMWNjZGQwZTY4ODVjNzlkM2JhMDkwMmE2ODc4ZWFlMzUuLjQ4YjdlMTZl
N2U2ZGEyMDNjZDFiZjgwYzU2ZDFhMTFhZjIyMTk5NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmNwcApAQCAtOTUsMjcgKzk1LDMxIEBAIHN0YXRpYyBQYXJ0aWFsT3JkZXJpbmcgb3JkZXIo
dW5zaWduZWQgYSwgdW5zaWduZWQgYikKICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjplcXVp
dmFsZW50OwogfQogCi0vLyBGSVhNRTogQ3JlYXRlIEJvdW5kYXJ5UG9pbnQuY3BwIGFuZCBtb3Zl
IHRoaXMgdGhlcmUuCi1QYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFy
eVBvaW50JiBhLCBjb25zdCBCb3VuZGFyeVBvaW50JiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVHJl
ZVR5cGU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgYSwg
Y29uc3QgQm91bmRhcnlQb2ludCYgYikKIHsKICAgICBpZiAoYS5jb250YWluZXIucHRyKCkgPT0g
Yi5jb250YWluZXIucHRyKCkpCiAgICAgICAgIHJldHVybiBvcmRlcihhLm9mZnNldCwgYi5vZmZz
ZXQpOwogCiAgICAgZm9yIChhdXRvIGFuY2VzdG9yID0gYi5jb250YWluZXIucHRyKCk7IGFuY2Vz
dG9yOyApIHsKLSAgICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50SW5D
b21wb3NlZFRyZWUoKTsKKyAgICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBwYXJlbnQ8VHJlZVR5
cGU+KCphbmNlc3Rvcik7CiAgICAgICAgIGlmIChuZXh0QW5jZXN0b3IgPT0gYS5jb250YWluZXIu
cHRyKCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPZmZzZXRCZWZvcmVDaGlsZCgqbmV4dEFuY2Vz
dG9yLCBhLm9mZnNldCwgKmFuY2VzdG9yKSA/IFBhcnRpYWxPcmRlcmluZzo6bGVzcyA6IFBhcnRp
YWxPcmRlcmluZzo6Z3JlYXRlcjsKICAgICAgICAgYW5jZXN0b3IgPSBuZXh0QW5jZXN0b3I7CiAg
ICAgfQogCiAgICAgZm9yIChhdXRvIGFuY2VzdG9yID0gYS5jb250YWluZXIucHRyKCk7IGFuY2Vz
dG9yOyApIHsKLSAgICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50SW5D
b21wb3NlZFRyZWUoKTsKKyAgICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBwYXJlbnQ8VHJlZVR5
cGU+KCphbmNlc3Rvcik7CiAgICAgICAgIGlmIChuZXh0QW5jZXN0b3IgPT0gYi5jb250YWluZXIu
cHRyKCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPZmZzZXRCZWZvcmVDaGlsZCgqbmV4dEFuY2Vz
dG9yLCBiLm9mZnNldCwgKmFuY2VzdG9yKSA/IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRlciA6IFBh
cnRpYWxPcmRlcmluZzo6bGVzczsKICAgICAgICAgYW5jZXN0b3IgPSBuZXh0QW5jZXN0b3I7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGRvY3VtZW50T3JkZXIoYS5jb250YWluZXIsIGIuY29udGFpbmVy
KTsKKyAgICByZXR1cm4gdHJlZU9yZGVyPFRyZWVUeXBlPihhLmNvbnRhaW5lciwgYi5jb250YWlu
ZXIpOworfQorCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBv
aW50JiBhLCBjb25zdCBCb3VuZGFyeVBvaW50JiBiKQoreworICAgIHJldHVybiB0cmVlT3JkZXI8
Q29tcG9zZWRUcmVlPihhLCBiKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGUoTm9kZSYgbm9kZSkKQEAgLTIwOCw0MiArMjEyLDc0IEBAIFJlZlB0cjxO
b2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAg
ICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwg
cmFuZ2UuZW5kLmNvbnRhaW5lcik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBi
b29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRh
cnlQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIGlzX2x0ZXEodHJlZU9yZGVyPFRyZWVUeXBl
PihyYW5nZS5zdGFydCwgcG9pbnQpKSAmJiBpc19sdGVxKHRyZWVPcmRlcjxUcmVlVHlwZT4ocG9p
bnQsIHJhbmdlLmVuZCkpOworfQorCit0ZW1wbGF0ZSBib29sIGlzUG9pbnRJblJhbmdlPFRyZWU+
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBwb2ludCkKK3sKKyAgICByZXR1
cm4gcG9pbnQgJiYgaXNQb2ludEluUmFuZ2U8VHJlZVR5cGU+KHJhbmdlLCAqcG9pbnQpOworfQor
CiBib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91
bmRhcnlQb2ludCYgcG9pbnQpCiB7Ci0gICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihy
YW5nZS5zdGFydCwgcG9pbnQpKSAmJiBpc19sdGVxKGRvY3VtZW50T3JkZXIocG9pbnQsIHJhbmdl
LmVuZCkpOworICAgIHJldHVybiBpc1BvaW50SW5SYW5nZTxDb21wb3NlZFRyZWU+KHJhbmdlLCBw
b2ludCk7CiB9CiAKIGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCiB7Ci0gICAgcmV0dXJuIHBv
aW50ICYmIGlzUG9pbnRJblJhbmdlKHJhbmdlLCAqcG9pbnQpOworICAgIHJldHVybiBpc1BvaW50
SW5SYW5nZTxDb21wb3NlZFRyZWU+KHJhbmdlLCBwb2ludCk7CiB9CiAKLVBhcnRpYWxPcmRlcmlu
ZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQ
b2ludCYgcG9pbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gUGFydGlhbE9yZGVyaW5n
IHRyZWVPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQm
IHBvaW50KQogewotICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFy
dCwgcG9pbnQpOyAhaXNfbHQob3JkZXIpKQorICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVy
PFRyZWVUeXBlPihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNfbHQob3JkZXIpKQogICAgICAgICBy
ZXR1cm4gb3JkZXI7Ci0gICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVyKHJhbmdlLmVu
ZCwgcG9pbnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVy
PFRyZWVUeXBlPihyYW5nZS5lbmQsIHBvaW50KTsgIWlzX2d0KG9yZGVyKSkKICAgICAgICAgcmV0
dXJuIG9yZGVyOwogICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CiB9CiAK
LVBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50
LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4g
UGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChhdXRvIG9yZGVyID0gZG9jdW1lbnRP
cmRlcihwb2ludCwgcmFuZ2Uuc3RhcnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgIGlmIChhdXRvIG9y
ZGVyID0gdHJlZU9yZGVyPFRyZWVUeXBlPihwb2ludCwgcmFuZ2Uuc3RhcnQpOyAhaXNfZ3Qob3Jk
ZXIpKQogICAgICAgICByZXR1cm4gb3JkZXI7Ci0gICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1bWVu
dE9yZGVyKHBvaW50LCByYW5nZS5lbmQpOyAhaXNfbHQob3JkZXIpKQorICAgIGlmIChhdXRvIG9y
ZGVyID0gdHJlZU9yZGVyPFRyZWVUeXBlPihwb2ludCwgcmFuZ2UuZW5kKTsgIWlzX2x0KG9yZGVy
KSkKICAgICAgICAgcmV0dXJuIG9yZGVyOwogICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVx
dWl2YWxlbnQ7CiB9CiAKK3RlbXBsYXRlIFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXI8VHJlZT4o
Y29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0ZSBQYXJ0
aWFsT3JkZXJpbmcgdHJlZU9yZGVyPFRyZWU+KGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBT
aW1wbGVSYW5nZSYpOworCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQoreworICAgIHJldHVy
biB0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihyYW5nZSwgcG9pbnQpOworfQorCitQYXJ0aWFsT3Jk
ZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiB0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihw
b2ludCwgcmFuZ2UpOworfQorCiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiBvdXRl
clJhbmdlLCBjb25zdCBTaW1wbGVSYW5nZSYgaW5uZXJSYW5nZSkKIHsKICAgICByZXR1cm4gaXNf
bHRlcShkb2N1bWVudE9yZGVyKG91dGVyUmFuZ2Uuc3RhcnQsIGlubmVyUmFuZ2Uuc3RhcnQpKSAm
JiBpc19ndGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5lbmQsIGlubmVyUmFuZ2UuZW5kKSk7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3Qg
U2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQoreworICAgIHJldHVybiBpc19s
dGVxKHRyZWVPcmRlcjxUcmVlVHlwZT4oYS5zdGFydCwgYi5lbmQpKSAmJiBpc19sdGVxKHRyZWVP
cmRlcjxUcmVlVHlwZT4oYi5zdGFydCwgYS5lbmQpKTsKK30KKwordGVtcGxhdGUgYm9vbCBpbnRl
cnNlY3RzPFRyZWU+KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwog
Ym9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYg
YikKIHsKLSAgICByZXR1cm4gaXNfbHRlcShkb2N1bWVudE9yZGVyKGEuc3RhcnQsIGIuZW5kKSkg
JiYgaXNfbHRlcShkb2N1bWVudE9yZGVyKGIuc3RhcnQsIGEuZW5kKSk7CisgICAgcmV0dXJuIGlu
dGVyc2VjdHM8Q29tcG9zZWRUcmVlPihhLCBiKTsKIH0KIAogc3RhdGljIGJvb2wgY29tcGFyZUJ5
RG9jdW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBhLCBjb25zdCBCb3VuZGFyeVBvaW50
JiBiKQpAQCAtMjcyLDE0ICszMDgsMzUgQEAgYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIG5vZGVSYW5nZSAmJiBjb250
YWlucyhyYW5nZSwgKm5vZGVSYW5nZSk7CiB9CiAKLWJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVl
VHlwZT4gYm9vbCBjb250YWlucyhjb25zdCBOb2RlJiBvdXRlciwgY29uc3QgTm9kZSYgaW5uZXIp
OworCit0ZW1wbGF0ZTw+IGJvb2wgY29udGFpbnM8VHJlZT4oY29uc3QgTm9kZSYgb3V0ZXIsIGNv
bnN0IE5vZGUmIGlubmVyKQoreworICAgIHJldHVybiBvdXRlci5jb250YWlucyhpbm5lcik7Cit9
CisKK3RlbXBsYXRlPD4gYm9vbCBjb250YWluczxDb21wb3NlZFRyZWU+KGNvbnN0IE5vZGUmIG91
dGVyLCBjb25zdCBOb2RlJiBpbm5lcikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGF0IHRo
ZSBjb2RlIGRpZCBiZWZvcmUsIGJ1dCBpdCBpcyBub3QgY29ycmVjdCEKKyAgICByZXR1cm4gb3V0
ZXIuY29udGFpbnMoaW5uZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9v
bCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkK
IHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gdGhh
dCBhdm9pZHMgYWx3YXlzIGNvbXB1dGluZyB0aGUgbm9kZSBpbmRleC4KICAgICAvLyBGSVhNRTog
RG9lcyB0aGlzIGNvbnN0X2Nhc3QgcG9pbnQgdG8gYSBkZXNpZ24gcHJvYmxlbT8KICAgICBhdXRv
IG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoY29uc3RfY2FzdDxOb2RlJj4obm9k
ZSkpOwogICAgIGlmICghbm9kZVJhbmdlKQotICAgICAgICByZXR1cm4gbm9kZS5jb250YWlucyhy
YW5nZS5zdGFydC5jb250YWluZXIucHRyKCkpOwotICAgIHJldHVybiBpc19sdChkb2N1bWVudE9y
ZGVyKG5vZGVSYW5nZS0+c3RhcnQsIHJhbmdlLmVuZCkpICYmIGlzX2x0KGRvY3VtZW50T3JkZXIo
cmFuZ2Uuc3RhcnQsIG5vZGVSYW5nZS0+ZW5kKSk7CisgICAgICAgIHJldHVybiBjb250YWluczxU
cmVlVHlwZT4obm9kZSwgcmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsKKyAgICByZXR1cm4gaXNfbHQo
dHJlZU9yZGVyPFRyZWVUeXBlPihub2RlUmFuZ2UtPnN0YXJ0LCByYW5nZS5lbmQpKSAmJiBpc19s
dCh0cmVlT3JkZXI8VHJlZVR5cGU+KHJhbmdlLnN0YXJ0LCBub2RlUmFuZ2UtPmVuZCkpOworCit9
CisKK3RlbXBsYXRlIGJvb2wgaW50ZXJzZWN0czxUcmVlPihjb25zdCBTaW1wbGVSYW5nZSYsIGNv
bnN0IE5vZGUmKTsKKworYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4gaW50ZXJzZWN0czxDb21wb3NlZFRyZWU+
KHJhbmdlLCBub2RlKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDYwYjMw
MmZlYjBjYTFlZTllMTU2YzliYzNhMjAwYWU0ZmRmMzAxZGQuLjQ5MGMwYmUzMWMxYWFjYjNmNmJm
NWMzZjIxMTcxZTYyZmI0ZWM4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC02NSwx
OCArNjUsMjQgQEAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1w
bGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVU
eXBlPiBib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRh
cnlQb2ludCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaXNQb2ludEluUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNv
bnN0IEJvdW5kYXJ5UG9pbnQmKTsKIGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwogCiBXRUJDT1JFX0VYUE9SVCBi
b29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVS
YW5nZSYgaW5uZXJSYW5nZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJh
bmdlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSB1bmlvblJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBpbnRlcnNlY3Rpb24oY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CiAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFp
bnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
cmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYp
OwogV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29u
c3QgTm9kZSYpOwogCiAvLyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2Uu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVl
T3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29u
c3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBQ
YXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmKTsKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9y
ZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ZmViODUzYWRkMzIwNTMxN2Y1ZTAzZmI1NmM2Zjc5ZDY3YjRiYWEwNS4uMzIwYjdjMTkyYWFhN2Mz
MmRiZTRlMTlhODM0NzgxNWE0MmIyMjA3MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTEw
LTIwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9O
KHIyNjYyOTUpOiBSYW5nZSBhbGxvd3Mgc3RhcnQgYW5kIGVuZCBjb250YWluZXJzIHRvIGJlbG9u
ZyB0byBkaWZmZXJlbnQgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZmFzdC9kb20vUmFuZ2UvcmFuZ2VzLWFjcm9zcy10cmVlcy5odG1sOiBB
ZGRlZC4KKwogMjAyMC0xMC0yMCAgSGVjdG9yIExvcGV6ICA8aGVjdG9yX2lfbG9wZXpAYXBwbGUu
Y29tPgogCiAgICAgICAgIFRlc3QgZXhwZWN0YXRpb24gYWRqdXN0bWVudApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2VzLWFjcm9zcy10cmVlcy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZXMtYWNyb3NzLXRyZWVzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hZGJhM2Q4N2JmZDUyNWMwMWYxMzJmMjhkZGJkYTI5NmI2YTcx
ODM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2Vz
LWFjcm9zcy10cmVlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMSBAQAorUEFTUyByYW5nZS5z
ZXRTdGFydChzaGFkb3dSb290LCAwKTsgY29sbGFwc2VkUmFuZ2VOb2RlKHJhbmdlKSBpcyBzaGFk
b3dSb290CitQQVNTIHJhbmdlLnNldEVuZChzaGFkb3dSb290LCAwKTsgY29sbGFwc2VkUmFuZ2VO
b2RlKHJhbmdlKSBpcyBzaGFkb3dSb290CitQQVNTIHJhbmdlLnNldFN0YXJ0QmVmb3JlKHNoYWRv
d05vZGUpOyBjb2xsYXBzZWRSYW5nZU5vZGUocmFuZ2UpIGlzIHNoYWRvd1Jvb3QKK1BBU1MgcmFu
Z2Uuc2V0U3RhcnRBZnRlcihzaGFkb3dOb2RlKTsgY29sbGFwc2VkUmFuZ2VOb2RlKHJhbmdlKSBp
cyBzaGFkb3dSb290CitQQVNTIHJhbmdlLnNldEVuZEJlZm9yZShzaGFkb3dOb2RlKTsgY29sbGFw
c2VkUmFuZ2VOb2RlKHJhbmdlKSBpcyBzaGFkb3dSb290CitQQVNTIHJhbmdlLnNldEVuZEFmdGVy
KHNoYWRvd05vZGUpOyBjb2xsYXBzZWRSYW5nZU5vZGUocmFuZ2UpIGlzIHNoYWRvd1Jvb3QKK1BB
U1MgYm9keVJhbmdlKCkuaXNQb2ludEluUmFuZ2Uoc2hhZG93Tm9kZSwgMCkgaXMgZmFsc2UKK1BB
U1MgYm9keVJhbmdlKCkuY29tcGFyZVBvaW50KHNoYWRvd05vZGUsIDApIHRocmV3IGV4Y2VwdGlv
biBXcm9uZ0RvY3VtZW50RXJyb3I6IFRoZSBvYmplY3QgaXMgaW4gdGhlIHdyb25nIGRvY3VtZW50
Li4KK1BBU1MgYm9keVJhbmdlKCkuaW50ZXJzZWN0c05vZGUoc2hhZG93Tm9kZSkgaXMgZmFsc2UK
K1BBU1MgYm9keVJhbmdlKCkuY29tcGFyZU5vZGUoc2hhZG93Tm9kZSkgdGhyZXcgZXhjZXB0aW9u
IFdyb25nRG9jdW1lbnRFcnJvcjogVGhlIG9iamVjdCBpcyBpbiB0aGUgd3JvbmcgZG9jdW1lbnQu
LgorUEFTUyBkb2N1bWVudC5ib2R5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHNoYWRvd05vZGUp
ICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQgaXMgTm9kZS5ET0NVTUVOVF9Q
T1NJVElPTl9ESVNDT05ORUNURUQKK1BBU1MgKGRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50
UG9zaXRpb24oc2hhZG93Tm9kZSkgJiAoTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcg
fCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykpICE9IDAgaXMgdHJ1ZQorUEFTUyBk
b2N1bWVudC5ib2R5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHNoYWRvd05vZGUpICYgTm9kZS5E
T0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUyBpcyAwCitQQVNTIGRvY3VtZW50LmJvZHkuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oc2hhZG93Tm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NP
TlRBSU5FRF9CWSBpcyAwCitQQVNTIGRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50UG9zaXRp
b24oc2hhZG93Tm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQ
RUNJRklDIGlzIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMK
K1BBU1MgZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihzaGFkb3dOb2RlKSAm
IH4oTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQgfCBOb2RlLkRPQ1VNRU5UX1BP
U0lUSU9OX1BSRUNFRElORyB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HIHwgTm9k
ZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUyB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09O
VEFJTkVEX0JZIHwgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJ
QykgaXMgMAorUEFTUyBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHNoYWRvd05vZGUpIGlzIGZhbHNl
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2VzLWFjcm9zcy10cmVlcy5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2VzLWFjcm9zcy10cmVlcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFhYzY1NDc4NGU5MDlhN2RkNGE5Yzg2MTk1YmY4MzAxMjk2NWI4NWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZXMtYWNyb3Nz
LXRyZWVzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8c2NyaXB0PgorICAgICAgICBjb25zdCBzaGFk
b3dIb3N0ID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKSk7CisgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dIb3N0LmF0dGFjaFNo
YWRvdyh7bW9kZTogJ2Nsb3NlZCd9KTsKKyAgICAgICAgc2hhZG93Um9vdC50ZXh0Q29udGVudCA9
ICdoZWxsbyc7CisgICAgICAgIGNvbnN0IHNoYWRvd05vZGUgPSBzaGFkb3dSb290LmZpcnN0Q2hp
bGQ7CisKKyAgICAgICAgZnVuY3Rpb24gYm9keVJhbmdlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICAgICAgcmFu
Z2Uuc2VsZWN0Tm9kZShkb2N1bWVudC5ib2R5KTsKKyAgICAgICAgICAgIHJldHVybiByYW5nZTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNvbGxhcHNlZFJhbmdlTm9kZShyYW5nZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmNvbGxhcHNlZCA/IHJhbmdlLnN0
YXJ0Q29udGFpbmVyIDogIm5vdCBjb2xsYXBzZWQiOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gdGVzdFJhbmdlTXV0YXRpb24odGVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmFu
Z2UgPSBib2R5UmFuZ2UoKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJyYW5nZS4iICsgdGVzdCAr
ICI7IGNvbGxhcHNlZFJhbmdlTm9kZShyYW5nZSkiLCAic2hhZG93Um9vdCIpOworICAgICAgICB9
CisKKyAgICAgICAgdGVzdFJhbmdlTXV0YXRpb24oInNldFN0YXJ0KHNoYWRvd1Jvb3QsIDApIik7
CisgICAgICAgIHRlc3RSYW5nZU11dGF0aW9uKCJzZXRFbmQoc2hhZG93Um9vdCwgMCkiKTsKKyAg
ICAgICAgdGVzdFJhbmdlTXV0YXRpb24oInNldFN0YXJ0QmVmb3JlKHNoYWRvd05vZGUpIik7Cisg
ICAgICAgIHRlc3RSYW5nZU11dGF0aW9uKCJzZXRTdGFydEFmdGVyKHNoYWRvd05vZGUpIik7Cisg
ICAgICAgIHRlc3RSYW5nZU11dGF0aW9uKCJzZXRFbmRCZWZvcmUoc2hhZG93Tm9kZSkiKTsKKyAg
ICAgICAgdGVzdFJhbmdlTXV0YXRpb24oInNldEVuZEFmdGVyKHNoYWRvd05vZGUpIik7CisKKyAg
ICAgICAgc2hvdWxkQmVGYWxzZSgiYm9keVJhbmdlKCkuaXNQb2ludEluUmFuZ2Uoc2hhZG93Tm9k
ZSwgMCkiKTsKKyAgICAgICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoImJvZHlSYW5nZSgpLmNvbXBh
cmVQb2ludChzaGFkb3dOb2RlLCAwKSIsICJXcm9uZ0RvY3VtZW50RXJyb3IiKTsKKyAgICAgICAg
c2hvdWxkQmVGYWxzZSgiYm9keVJhbmdlKCkuaW50ZXJzZWN0c05vZGUoc2hhZG93Tm9kZSkiKTsK
KyAgICAgICAgc2hvdWxkVGhyb3dFcnJvck5hbWUoImJvZHlSYW5nZSgpLmNvbXBhcmVOb2RlKHNo
YWRvd05vZGUpIiwgIldyb25nRG9jdW1lbnRFcnJvciIpOworCisgICAgICAgIC8vIEZJWE1FOiBU
aGVzZSBhcmUgTm9kZSBtZXRob2RzLCBub3QgUmFuZ2UsIHNvIHdlIG1pZ2h0IHdhbnQgdG8gbW92
ZSB0aGVtIGludG8gYSBzZXBhcmF0ZSB0ZXN0LgorCisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVu
dC5ib2R5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHNoYWRvd05vZGUpICYgTm9kZS5ET0NVTUVO
VF9QT1NJVElPTl9ESVNDT05ORUNURUQiLCAiTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05O
RUNURUQiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCIoZG9jdW1lbnQuYm9keS5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihzaGFkb3dOb2RlKSAmIChOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNF
RElORyB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSkgIT0gMCIpOworICAgICAg
ICBzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihzaGFkb3dO
b2RlKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMiLCAiMCIpOworICAgICAgICBz
aG91bGRCZSgiZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihzaGFkb3dOb2Rl
KSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZIiwgIjAiKTsKKyAgICAgICAg
c2hvdWxkQmUoImRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oc2hhZG93Tm9k
ZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDIiwgIk5v
ZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMiKTsKKyAgICAgICAg
c2hvdWxkQmUoImRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oc2hhZG93Tm9k
ZSkgJiB+KE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIHwgTm9kZS5ET0NVTUVO
VF9QT1NJVElPTl9QUkVDRURJTkcgfCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyB8
IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMgfCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9O
X0NPTlRBSU5FRF9CWSB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BF
Q0lGSUMpIiwgIjAiKTsKKworICAgICAgICBzaG91bGRCZUZhbHNlKCJkb2N1bWVudC5ib2R5LmNv
bnRhaW5zKHNoYWRvd05vZGUpIik7CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls
ZChzaGFkb3dIb3N0KTsKKworICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAg
IDwvc2NyaXB0PgorPC9odG1sPgo=
</data>
<flag name="commit-queue"
          id="428289"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411953</attachid>
            <date>2020-10-20 19:59:24 -0700</date>
            <delta_ts>2020-10-20 20:20:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217895-20201020195923.patch</filename>
            <type>text/plain</type>
            <size>27343</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTE5NDNiNjVkMjgxOWU1
MzY4OTAwYTAyOWI4NTg4MmUyYWM0YzY0Mi4uOTdhNGM0NjlhMWRjNDViYmEzZmI3YWFkYWQ1YTc5
YzQwMDM2YTUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTEwLTIwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUp
OiBSYW5nZSBhbGxvd3Mgc3RhcnQgYW5kIGVuZCBjb250YWluZXJzIHRvIGJlbG9uZyB0byBkaWZm
ZXJlbnQgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNzg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL1JhbmdlL3Jhbmdlcy1hY3Jvc3MtdHJlZXMuaHRtbAorCisgICAg
ICAgICogZG9tL0JvdW5kYXJ5UG9pbnQuaDogQWRkZWQgdHJlZU9yZGVyPFRyZWVUeXBlPi4KKwor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudDxUcmVlPik6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyZW50PENvbXBvc2VkVHJlZT4pOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmRlcHRoKTogQ2hhbmdlZCBpbnRvIGEgdGVtcGxhdGUgdGhhdCB0
YWtlcyBUcmVlVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
QW5kQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yKTogQ2hhbmdlZCB0byBleHBsaWNpdGx5IHVzZSBDb21wb3NlZFRyZWUgdG8gcHJlc2Vy
dmUKKyAgICAgICAgdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBsaWtlbHkgd2lsbCByZXR1cm4g
bGF0ZXIgdG8gbWFrZSB0aGlzIGEgdGVtcGxhdGUgYW5kIGhhdmUgaXQKKyAgICAgICAgdXMgdGhl
IG5vcm1hbCB0cmVlIGJ5IGRlZmF1bHQuCisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBD
aGFuZ2VkIGludG8gYSB0ZW1wbGF0ZSB0aGF0IHRha2VzIFRyZWVUeXBlLgorICAgICAgICAoV2Vi
Q29yZTo6ZG9jdW1lbnRPcmRlcik6IENhbGwgdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4gdG8gcHJl
c2VydmUgdGhlIGN1cnJlbnQgYmVoYXZpb3IuCisgICAgICAgIExpa2VseSB3aWxsIGRlbGV0ZSB0
aGlzIGxhdGVyIGFmdGVyIGNoYW5naW5nIGNhbGxlcnMgdG8gdXNlIHRyZWVPcmRlci4KKworICAg
ICAgICAqIGRvbS9Ob2RlLmg6IEFkZGVkIFRyZWUsIFNoYWRvd0luY2x1ZGluZ1RyZWUsIGFuZCBD
b21wb3NlZFRyZWUuIEFkZGVkIHBhcmVudCBhbmQKKyAgICAgICAgdHJlZU9yZGVyIGZ1bmN0aW9u
IHRlbXBsYXRlcy4gVHJlZVR5cGUgY3VycmVudGx5IGlzIGEgc2V0IG9mIGNsYXNzZXMgYnV0IHRo
ZXkgY291bGQKKyAgICAgICAgYWxzbyBiZSBvYmplY3RzIG9mIGFub3RoZXIgdHlwZS4gTWF5YmUg
YW4gZW51bWVyYXRpb24gbmFtZWQgVHJlZVR5cGUgaW5zdGVhZD8KKworICAgICAgICAqIGRvbS9S
YW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6c2V0U3RhcnQpOiBVc2UgdHJlZU9y
ZGVyIGluc3RlYWQgb2YgZG9jdW1lbnRPcmRlciB0byB1c2UgdGhlIG5vcm1hbAorICAgICAgICB0
cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6c2V0RW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6aXNQb2ludEluUmFu
Z2UpOiBVc2UgaXNQb2ludEluUmFuZ2U8VHJlZT4gaW5zdGVhZCBvZiBpc1BvaW50SW5SYW5nZQor
ICAgICAgICB0byB1c2UgdGhlIG5vcm1hbCB0cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRy
ZWUuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogVXNlIHRy
ZWVPcmRlciBpbnN0ZWFkIG9mIGRvY3VtZW50T3JkZXIgdG8gdXNlCisgICAgICAgIHRoZSBub3Jt
YWwgdHJlZSBpbnN0ZWFkIG9mIHRoZSBjb21wb3NlZCB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmNvbXBhcmVOb2RlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6aW50ZXJzZWN0c05vZGUgY29uc3QpOiBVc2UgaW50ZXJzZWN0czxUcmVlPiBpbnN0
ZWFkIG9mIGlzUG9pbnRJblJhbmdlCisgICAgICAgIHRvIHVzZSB0aGUgbm9ybWFsIHRyZWUgaW5z
dGVhZCBvZiB0aGUgY29tcG9zZWQgdHJlZS4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBDaGFuZ2VkIGludG8gYSB0ZW1wbGF0
ZSB0aGF0IHRha2VzIFRyZWVUeXBlLgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1lbnRPcmRlcik6
IENhbGwgdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4gdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgYmVo
YXZpb3IuCisgICAgICAgIExpa2VseSB3aWxsIGRlbGV0ZSB0aGlzIGxhdGVyIGFmdGVyIGNoYW5n
aW5nIGNhbGxlcnMgdG8gdXNlIHRyZWVPcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OmlzUG9pbnRJ
blJhbmdlKTogQ2hhbmdlZCBpbnRvIGEgdGVtcGxhdGUgdGhhdCB0YWtlcyBUcmVlVHlwZS4KKyAg
ICAgICAgRm9yIG5vdyB0aGUgZGVmYXVsdCB0cmVlIHR5cGUgaXMgc3RpbGwgQ29tcG9zZWRUcmVl
LCBidXQgd2lsbCBjaGFuZ2UgdGhhdCBsYXRlci4KKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2Vj
dHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zPFRyZWU+KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb250YWluczxDb21wb3NlZFRyZWU+KTogQWRkZWQuCisKKyAgICAg
ICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogQWRkZWQgaXNQb2ludEluUmFuZ2UsIGludGVyc2VjdHMs
IGFuZCB0cmVlT3JkZXIgZnVuY3Rpb24gdGVtcGxhdGVzLgorCiAyMDIwLTEwLTIwICBTaWh1aSBM
aXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdHVicyBmb3IgU3BlZWNo
UmVjb2duaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCmluZGV4IGJkZjFlODgwMDVl
ODVjNGM2NjQ0NjFiZTY1OWY5NjUyYzY3OTUyNDguLjUzZjU0YTgwMWFmNmU0NmNmMWRlMzE3MGFh
NjMzOTkxMzJkOTVmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBv
aW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaApAQCAtNDAsNiAr
NDAsOCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
b3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFRyZWVUeXBlID0gVHJlZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBC
b3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogV0VCQ09SRV9FWFBPUlQgUGFy
dGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmKTsKIAogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4g
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlKE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAz
ZjFlNWMwZmY3ODNlMGM4MDJmYTYwYTUwMDc3NDE2NjgyMDM3NDAxLi5lYzg2NjMzYzI2M2FmZjY0
YzI1OTE3ZGI1ZTUwNWZkYjljNzBiODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNjIyLDExICsy
NjIyLDIxIEBAIHZvaWQqIE5vZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKICAgICByZXR1cm4g
Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKIH0KIAot
c3RhdGljIHNpemVfdCBkZXB0aEluQ29tcG9zZWRUcmVlKGNvbnN0IE5vZGUmIG5vZGUpCit0ZW1w
bGF0ZTw+IENvbnRhaW5lck5vZGUqIHBhcmVudDxUcmVlPihjb25zdCBOb2RlJiBub2RlKQorewor
ICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUoKTsKK30KKwordGVtcGxhdGU8PiBDb250YWluZXJO
b2RlKiBwYXJlbnQ8Q29tcG9zZWRUcmVlPihjb25zdCBOb2RlJiBub2RlKQoreworICAgIHJldHVy
biBub2RlLnBhcmVudEluQ29tcG9zZWRUcmVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRy
ZWVUeXBlPiBzaXplX3QgZGVwdGgoY29uc3QgTm9kZSYgbm9kZSkKIHsKICAgICBzaXplX3QgZGVw
dGggPSAwOwogICAgIGF1dG8gYW5jZXN0b3IgPSAmbm9kZTsKLSAgICB3aGlsZSAoKGFuY2VzdG9y
ID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9zZWRUcmVlKCkpKQorICAgIHdoaWxlICgoYW5jZXN0
b3IgPSBwYXJlbnQ8VHJlZVR5cGU+KCphbmNlc3RvcikpKQogICAgICAgICArK2RlcHRoOwogICAg
IHJldHVybiBkZXB0aDsKIH0KQEAgLTI2MzcsOCArMjY0Nyw3IEBAIHN0cnVjdCBBbmNlc3RvckFu
ZENoaWxkcmVuIHsKICAgICBjb25zdCBOb2RlKiBkaXN0aW5jdEFuY2VzdG9yQjsKIH07CiAKLS8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uJ3MgbmFtZSBpcyBub3QgZXhwbGljaXQgYWJvdXQgdGhlIGZh
Y3QgdGhhdCBpdCdzIHRoZSBjb21tb24gaW5jbHVzaXZlIGFuY2VzdG9yIGluIHRoZSBjb21wb3Nl
ZCB0cmVlLgotc3RhdGljIEFuY2VzdG9yQW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3JBbmRDaGlsZHJlbihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQordGVtcGxhdGU8dHlw
ZW5hbWUgVHJlZVR5cGU+IEFuY2VzdG9yQW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3JBbmRDaGlsZHJlbihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQogewogICAgIC8vIFRo
aXMgY2hlY2sgaXNuJ3QgbmVlZGVkIGZvciBjb3JyZWN0bmVzcywgYnV0IGl0IGlzIGNoZWFwIGFu
ZCBsaWtlbHkgdG8gYmUKICAgICAvLyBjb21tb24gZW5vdWdoIHRvIGJlIHdvcnRoIG9wdGltaXpp
bmcgc28gd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIHRvIHRoZSByb290LgpAQCAtMjY0NywzMSArMjY1
NiwzMSBAQCBzdGF0aWMgQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
ckFuZENoaWxkcmVuKGNvbnN0IE5vZGUmIGEsIGNvbgogICAgIC8vIEZJWE1FOiBDb3VsZCBvcHRp
bWl6ZSBjYXNlcyB3aGVyZSBub2RlcyBhcmUgYm90aCBpbiB0aGUgc2FtZSBzaGFkb3cgdHJlZS4K
ICAgICAvLyBGSVhNRTogQ291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgbm9kZXMgYXJlIGluIGRp
ZmZlcmVudCBkb2N1bWVudHMgdG8gcXVpY2tseSByZXR1cm4gZmFsc2UuCiAgICAgLy8gRklYTUU6
IENvdWxkIG9wdGltaXplIGNhc2VzIHdoZXJlIG9uZSBub2RlIGlzIGNvbm5lY3RlZCBhbmQgdGhl
IG90aGVyIGlzIG5vdCB0byBxdWlja2x5IHJldHVybiBmYWxzZS4KLSAgICBhdXRvIFtkZXB0aEEs
IGRlcHRoQl0gPSBzdGQ6Om1ha2VfdHVwbGUoZGVwdGhJbkNvbXBvc2VkVHJlZShhKSwgZGVwdGhJ
bkNvbXBvc2VkVHJlZShiKSk7CisgICAgYXV0byBbZGVwdGhBLCBkZXB0aEJdID0gc3RkOjptYWtl
X3R1cGxlKGRlcHRoPFRyZWVUeXBlPihhKSwgZGVwdGg8VHJlZVR5cGU+KGIpKTsKICAgICBhdXRv
IFt4LCB5LCBkaWZmZXJlbmNlXSA9IGRlcHRoQSA+PSBkZXB0aEIKICAgICAgICAgPyBzdGQ6Om1h
a2VfdHVwbGUoJmEsICZiLCBkZXB0aEEgLSBkZXB0aEIpCiAgICAgICAgIDogc3RkOjptYWtlX3R1
cGxlKCZiLCAmYSwgZGVwdGhCIC0gZGVwdGhBKTsKICAgICBkZWNsdHlwZSh4KSBkaXN0aW5jdEFu
Y2VzdG9yQSA9IG51bGxwdHI7CiAgICAgZm9yIChkZWNsdHlwZShkaWZmZXJlbmNlKSBpID0gMDsg
aSA8IGRpZmZlcmVuY2U7ICsraSkgewogICAgICAgICBkaXN0aW5jdEFuY2VzdG9yQSA9IHg7Ci0g
ICAgICAgIHggPSB4LT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpOworICAgICAgICB4ID0gcGFyZW50
PFRyZWVUeXBlPigqeCk7CiAgICAgfQogICAgIGRlY2x0eXBlKHkpIGRpc3RpbmN0QW5jZXN0b3JC
ID0gbnVsbHB0cjsKICAgICB3aGlsZSAoeCAhPSB5KSB7CiAgICAgICAgIGRpc3RpbmN0QW5jZXN0
b3JBID0geDsKICAgICAgICAgZGlzdGluY3RBbmNlc3RvckIgPSB5OwotICAgICAgICB4ID0geC0+
cGFyZW50SW5Db21wb3NlZFRyZWUoKTsKLSAgICAgICAgeSA9IHktPnBhcmVudEluQ29tcG9zZWRU
cmVlKCk7CisgICAgICAgIHggPSBwYXJlbnQ8VHJlZVR5cGU+KCp4KTsKKyAgICAgICAgeSA9IHBh
cmVudDxUcmVlVHlwZT4oKnkpOwogICAgIH0KICAgICBpZiAoZGVwdGhBIDwgZGVwdGhCKQogICAg
ICAgICBzdGQ6OnN3YXAoZGlzdGluY3RBbmNlc3RvckEsIGRpc3RpbmN0QW5jZXN0b3JCKTsKICAg
ICByZXR1cm4geyB4LCBkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNlc3RvckIgfTsKIH0K
IAotLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24ncyBuYW1lIGlzIG5vdCBleHBsaWNpdCBhYm91dCB0
aGUgZmFjdCB0aGF0IGl0J3MgdGhlIGNvbW1vbiBpbmNsdXNpdmUgYW5jZXN0b3IgaW4gdGhlIGNv
bXBvc2VkIHRyZWUuCisvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gd29yayB3aXRoaW4gdGhlIG5v
cm1hbCB0cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRyZWUuIE9yIHJlbmFtZSBhbmQvb3Ig
c3BsaXQgaW50byBtdWx0aXBsZSBmdW5jdGlvbnMuCiBSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYgYikKIHsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxO
b2RlKj4oY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbihhLCBiKS5jb21tb25BbmNl
c3Rvcik7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZSo+KGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yQW5kQ2hpbGRyZW48Q29tcG9zZWRUcmVlPihhLCBiKS5jb21tb25BbmNlc3Rvcik7CiB9CiAK
IHN0YXRpYyBib29sIGlzU2libGluZ1N1YnNlcXVlbnQoY29uc3QgTm9kZSYgc2libGluZ0EsIGNv
bnN0IE5vZGUmIHNpYmxpbmdCKQpAQCAtMjY4NiwxMSArMjY5NSwxMSBAQCBzdGF0aWMgYm9vbCBp
c1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNpYmxpbmdBLCBjb25zdCBOb2RlJiBzaWJs
aW5nQikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9y
ZGVyKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVl
VHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2Rl
JiBiKQogewogICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmlu
Zzo6ZXF1aXZhbGVudDsKLSAgICBhdXRvIHJlc3VsdCA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
QW5kQ2hpbGRyZW4oYSwgYik7CisgICAgYXV0byByZXN1bHQgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvckFuZENoaWxkcmVuPFRyZWVUeXBlPihhLCBiKTsKICAgICBpZiAoIXJlc3VsdC5jb21tb25B
bmNlc3RvcikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6dW5vcmRlcmVkOwogICAg
IGlmICghcmVzdWx0LmRpc3RpbmN0QW5jZXN0b3JBKQpAQCAtMjcxMCw2ICsyNzE5LDE0IEBAIFBh
cnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIp
CiAgICAgcmV0dXJuIGlzU2libGluZ1N1YnNlcXVlbnQoKnJlc3VsdC5kaXN0aW5jdEFuY2VzdG9y
QSwgKnJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQikgPyBQYXJ0aWFsT3JkZXJpbmc6Omxlc3MgOiBQ
YXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXI7CiB9CiAKK3RlbXBsYXRlIFBhcnRpYWxPcmRlcmluZyB0
cmVlT3JkZXI8VHJlZT4oY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKK3RlbXBsYXRlIFBhcnRp
YWxPcmRlcmluZyB0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihjb25zdCBOb2RlJiwgY29uc3QgTm9k
ZSYpOworCitQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiBhLCBjb25z
dCBOb2RlJiBiKQoreworICAgIHJldHVybiB0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihhLCBiKTsK
K30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTm9kZSYg
bm9kZSkKIHsKICAgICB0cyA8PCAibm9kZSAiIDw8ICZub2RlIDw8ICIgIiA8PCBub2RlLmRlYnVn
RGVzY3JpcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDE5OGVhZjMwMjBiODhlMmIxZDExODg5ZTAx
NmI3Y2ZmNDUwOTJjZGUuLjg1NDUxYmFjYTZmNjdjOGM4OTE1N2VlYzVmYmI5MDg3MTY3ZTNmMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaApAQCAtNzU1LDYgKzc1NSwxMiBAQCBjb25zdGV4cHIgYm9vbCBpc19uZXEo
UGFydGlhbE9yZGVyaW5nKTsKIGNvbnN0ZXhwciBib29sIGlzX2x0ZXEoUGFydGlhbE9yZGVyaW5n
KTsKIGNvbnN0ZXhwciBib29sIGlzX2d0ZXEoUGFydGlhbE9yZGVyaW5nKTsKIAorc3RydWN0IFRy
ZWUgeyB9Oworc3RydWN0IFNoYWRvd0luY2x1ZGluZ1RyZWUgeyB9Oworc3RydWN0IENvbXBvc2Vk
VHJlZSB7IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZSA9IFRyZWU+IENvbnRhaW5lck5v
ZGUqIHBhcmVudChjb25zdCBOb2RlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZSA9IFRy
ZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsK
KwogV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9k
ZSYsIGNvbnN0IE5vZGUmKTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApp
bmRleCA0YTlmNDNmYmYxZjU1MzE1MWYwMTkxOGQ4MGMwNzY0MmIwNjU5NzUyLi5iMmZlNjMwMjJk
MzlmMWY4YWI0ZGU1NTc1NjMxYzFjYzZkNGM3ZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTEx
Niw3ICsxMTYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnQoUmVmPE5vZGU+
JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgICAgIHJldHVybiBjaGlsZE5vZGUu
cmVsZWFzZUV4Y2VwdGlvbigpOwogCiAgICAgbV9zdGFydC5zZXQoV1RGTW92ZShjb250YWluZXIp
LCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci0gICAgaWYgKCFpc19s
dGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFy
eVBvaW50KG1fZW5kKSkpKQorICAgIGlmICghaXNfbHRlcSh0cmVlT3JkZXIobWFrZUJvdW5kYXJ5
UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSkpKQogICAgICAgICBtX2Vu
ZCA9IG1fc3RhcnQ7CiAgICAgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlvbigpOwogICAgIHVwZGF0
ZURvY3VtZW50KCk7CkBAIC0xMzAsNyArMTMwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6
OnNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAg
cmV0dXJuIGNoaWxkTm9kZS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKICAgICBtX2VuZC5zZXQoV1RG
TW92ZShjb250YWluZXIpLCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7
Ci0gICAgaWYgKCFpc19sdGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFy
dCksIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSkpKQorICAgIGlmICghaXNfbHRlcSh0cmVlT3Jk
ZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VCb3VuZGFyeVBvaW50KG1fZW5kKSkp
KQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CiAgICAgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlv
bigpOwogICAgIHVwZGF0ZURvY3VtZW50KCk7CkBAIC0xNTUsNyArMTU1LDcgQEAgRXhjZXB0aW9u
T3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQg
b2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gY2hlY2tS
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KLSAgICByZXR1cm4gV2ViQ29yZTo6aXNQ
b2ludEluUmFuZ2UobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSwgeyBjb250YWluZXIsIG9mZnNldCB9
KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6aXNQb2ludEluUmFuZ2U8VHJlZT4obWFrZVNpbXBsZVJh
bmdlKCp0aGlzKSwgeyBjb250YWluZXIsIG9mZnNldCB9KTsKIH0KIAogRXhjZXB0aW9uT3I8c2hv
cnQ+IFJhbmdlOjpjb21wYXJlUG9pbnQoTm9kZSYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0CkBAIC0xNjcsNyArMTY3LDcgQEAgRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21w
YXJlUG9pbnQoTm9kZSYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiAgICAgICAgIHJl
dHVybiBjaGVja1Jlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQotICAgIGF1dG8gb3Jk
ZXJpbmcgPSBkb2N1bWVudE9yZGVyKHsgY29udGFpbmVyLCBvZmZzZXQgfSwgbWFrZVNpbXBsZVJh
bmdlKCp0aGlzKSk7CisgICAgYXV0byBvcmRlcmluZyA9IHRyZWVPcmRlcih7IGNvbnRhaW5lciwg
b2Zmc2V0IH0sIG1ha2VTaW1wbGVSYW5nZSgqdGhpcykpOwogICAgIGlmIChpc19sdChvcmRlcmlu
ZykpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoaXNfZXEob3JkZXJpbmcpKQpAQCAtMTk4
LDggKzE5OCw4IEBAIEV4Y2VwdGlvbk9yPFJhbmdlOjpDb21wYXJlUmVzdWx0cz4gUmFuZ2U6OmNv
bXBhcmVOb2RlKE5vZGUmIG5vZGUpIGNvbnN0CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBO
b3RGb3VuZEVycm9yIH07CiAgICAgfQogCi0gICAgYXV0byBzdGFydE9yZGVyaW5nID0gZG9jdW1l
bnRPcmRlcihub2RlUmFuZ2UtPnN0YXJ0LCBtYWtlQm91bmRhcnlQb2ludChtX3N0YXJ0KSk7Ci0g
ICAgYXV0byBlbmRPcmRlcmluZyA9IGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5lbmQsIG1ha2VC
b3VuZGFyeVBvaW50KG1fZW5kKSk7CisgICAgYXV0byBzdGFydE9yZGVyaW5nID0gdHJlZU9yZGVy
KG5vZGVSYW5nZS0+c3RhcnQsIG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpKTsKKyAgICBhdXRv
IGVuZE9yZGVyaW5nID0gdHJlZU9yZGVyKG5vZGVSYW5nZS0+ZW5kLCBtYWtlQm91bmRhcnlQb2lu
dChtX2VuZCkpOwogICAgIGlmIChpc19ndGVxKHN0YXJ0T3JkZXJpbmcpICYmIGlzX2x0ZXEoZW5k
T3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gTk9ERV9JTlNJREU7CiAgICAgaWYgKGlzX2x0ZXEo
c3RhcnRPcmRlcmluZykgJiYgaXNfZ3RlcShlbmRPcmRlcmluZykpCkBAIC0yMzUsNyArMjM1LDcg
QEAgRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHModW5zaWdu
ZWQgc2hvcnQgaG93LCBjb25zdCBSYW5nZSYKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKICAgICB9Ci0gICAgYXV0byBvcmRlcmlu
ZyA9IGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQoKnRoaXNQb2ludCksIG1ha2VCb3Vu
ZGFyeVBvaW50KCpvdGhlclBvaW50KSk7CisgICAgYXV0byBvcmRlcmluZyA9IHRyZWVPcmRlciht
YWtlQm91bmRhcnlQb2ludCgqdGhpc1BvaW50KSwgbWFrZUJvdW5kYXJ5UG9pbnQoKm90aGVyUG9p
bnQpKTsKICAgICBpZiAoaXNfbHQob3JkZXJpbmcpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAg
aWYgKGlzX2VxKG9yZGVyaW5nKSkKQEAgLTI1NSw3ICsyNTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBSYW5nZTo6ZGVsZXRlQ29udGVudHMoKQogCiBib29sIFJhbmdlOjppbnRlcnNlY3RzTm9kZShO
b2RlJiBub2RlKSBjb25zdAogewotICAgIHJldHVybiBpbnRlcnNlY3RzKG1ha2VTaW1wbGVSYW5n
ZSgqdGhpcyksIG5vZGUpOworICAgIHJldHVybiBpbnRlcnNlY3RzPFRyZWU+KG1ha2VTaW1wbGVS
YW5nZSgqdGhpcyksIG5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGhpZ2hlc3RBbmNl
c3RvclVuZGVyQ29tbW9uUm9vdChOb2RlKiBub2RlLCBOb2RlKiBjb21tb25Sb290KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggNjViY2M4OTMxY2NkZDBlNjg4NWM3OWQzYmEwOTAy
YTY4NzhlYWUzNS4uNDhiN2UxNmU3ZTZkYTIwM2NkMWJmODBjNTZkMWExMWFmMjIxOTk2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC05NSwyNyArOTUsMzEgQEAgc3RhdGljIFBh
cnRpYWxPcmRlcmluZyBvcmRlcih1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQogICAgIHJldHVybiBQ
YXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CiB9CiAKLS8vIEZJWE1FOiBDcmVhdGUgQm91bmRh
cnlQb2ludC5jcHAgYW5kIG1vdmUgdGhpcyB0aGVyZS4KLVBhcnRpYWxPcmRlcmluZyBkb2N1bWVu
dE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25z
dCBCb3VuZGFyeVBvaW50JiBhLCBjb25zdCBCb3VuZGFyeVBvaW50JiBiKQogewogICAgIGlmIChh
LmNvbnRhaW5lci5wdHIoKSA9PSBiLmNvbnRhaW5lci5wdHIoKSkKICAgICAgICAgcmV0dXJuIG9y
ZGVyKGEub2Zmc2V0LCBiLm9mZnNldCk7CiAKICAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBiLmNv
bnRhaW5lci5wdHIoKTsgYW5jZXN0b3I7ICkgewotICAgICAgICBhdXRvIG5leHRBbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpOworICAgICAgICBhdXRvIG5leHRBbmNl
c3RvciA9IHBhcmVudDxUcmVlVHlwZT4oKmFuY2VzdG9yKTsKICAgICAgICAgaWYgKG5leHRBbmNl
c3RvciA9PSBhLmNvbnRhaW5lci5wdHIoKSkKICAgICAgICAgICAgIHJldHVybiBpc09mZnNldEJl
Zm9yZUNoaWxkKCpuZXh0QW5jZXN0b3IsIGEub2Zmc2V0LCAqYW5jZXN0b3IpID8gUGFydGlhbE9y
ZGVyaW5nOjpsZXNzIDogUGFydGlhbE9yZGVyaW5nOjpncmVhdGVyOwogICAgICAgICBhbmNlc3Rv
ciA9IG5leHRBbmNlc3RvcjsKICAgICB9CiAKICAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBhLmNv
bnRhaW5lci5wdHIoKTsgYW5jZXN0b3I7ICkgewotICAgICAgICBhdXRvIG5leHRBbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpOworICAgICAgICBhdXRvIG5leHRBbmNl
c3RvciA9IHBhcmVudDxUcmVlVHlwZT4oKmFuY2VzdG9yKTsKICAgICAgICAgaWYgKG5leHRBbmNl
c3RvciA9PSBiLmNvbnRhaW5lci5wdHIoKSkKICAgICAgICAgICAgIHJldHVybiBpc09mZnNldEJl
Zm9yZUNoaWxkKCpuZXh0QW5jZXN0b3IsIGIub2Zmc2V0LCAqYW5jZXN0b3IpID8gUGFydGlhbE9y
ZGVyaW5nOjpncmVhdGVyIDogUGFydGlhbE9yZGVyaW5nOjpsZXNzOwogICAgICAgICBhbmNlc3Rv
ciA9IG5leHRBbmNlc3RvcjsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnRPcmRlcihhLmNv
bnRhaW5lciwgYi5jb250YWluZXIpOworICAgIHJldHVybiB0cmVlT3JkZXI8VHJlZVR5cGU+KGEu
Y29udGFpbmVyLCBiLmNvbnRhaW5lcik7Cit9CisKK1BhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9y
ZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGIpCit7Cisg
ICAgcmV0dXJuIHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KGEsIGIpOwogfQogCiBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJiBub2RlKQpAQCAtMjA4LDQy
ICsyMTIsNzQgQEAgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkKICAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFu
Z2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gaXNfbHRl
cSh0cmVlT3JkZXI8VHJlZVR5cGU+KHJhbmdlLnN0YXJ0LCBwb2ludCkpICYmIGlzX2x0ZXEodHJl
ZU9yZGVyPFRyZWVUeXBlPihwb2ludCwgcmFuZ2UuZW5kKSk7Cit9CisKK3RlbXBsYXRlIGJvb2wg
aXNQb2ludEluUmFuZ2U8VHJlZT4oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBv
aW50Jik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGlzUG9pbnRJblJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4m
IHBvaW50KQoreworICAgIHJldHVybiBwb2ludCAmJiBpc1BvaW50SW5SYW5nZTxUcmVlVHlwZT4o
cmFuZ2UsICpwb2ludCk7Cit9CisKIGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKIHsKLSAgICByZXR1cm4gaXNf
bHRlcShkb2N1bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCkpICYmIGlzX2x0ZXEoZG9jdW1l
bnRPcmRlcihwb2ludCwgcmFuZ2UuZW5kKSk7CisgICAgcmV0dXJuIGlzUG9pbnRJblJhbmdlPENv
bXBvc2VkVHJlZT4ocmFuZ2UsIHBvaW50KTsKIH0KIAogYm9vbCBpc1BvaW50SW5SYW5nZShjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBwb2lu
dCkKIHsKLSAgICByZXR1cm4gcG9pbnQgJiYgaXNQb2ludEluUmFuZ2UocmFuZ2UsICpwb2ludCk7
CisgICAgcmV0dXJuIGlzUG9pbnRJblJhbmdlPENvbXBvc2VkVHJlZT4ocmFuZ2UsIHBvaW50KTsK
IH0KIAotUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVU
eXBlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
Y29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKGF1dG8gb3JkZXIgPSBkb2N1
bWVudE9yZGVyKHJhbmdlLnN0YXJ0LCBwb2ludCk7ICFpc19sdChvcmRlcikpCisgICAgaWYgKGF1
dG8gb3JkZXIgPSB0cmVlT3JkZXI8VHJlZVR5cGU+KHJhbmdlLnN0YXJ0LCBwb2ludCk7ICFpc19s
dChvcmRlcikpCiAgICAgICAgIHJldHVybiBvcmRlcjsKLSAgICBpZiAoYXV0byBvcmRlciA9IGRv
Y3VtZW50T3JkZXIocmFuZ2UuZW5kLCBwb2ludCk7ICFpc19ndChvcmRlcikpCisgICAgaWYgKGF1
dG8gb3JkZXIgPSB0cmVlT3JkZXI8VHJlZVR5cGU+KHJhbmdlLmVuZCwgcG9pbnQpOyAhaXNfZ3Qo
b3JkZXIpKQogICAgICAgICByZXR1cm4gb3JkZXI7CiAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmlu
Zzo6ZXF1aXZhbGVudDsKIH0KIAotUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3Qg
Qm91bmRhcnlQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIFRyZWVUeXBlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1
dG8gb3JkZXIgPSBkb2N1bWVudE9yZGVyKHBvaW50LCByYW5nZS5zdGFydCk7ICFpc19ndChvcmRl
cikpCisgICAgaWYgKGF1dG8gb3JkZXIgPSB0cmVlT3JkZXI8VHJlZVR5cGU+KHBvaW50LCByYW5n
ZS5zdGFydCk7ICFpc19ndChvcmRlcikpCiAgICAgICAgIHJldHVybiBvcmRlcjsKLSAgICBpZiAo
YXV0byBvcmRlciA9IGRvY3VtZW50T3JkZXIocG9pbnQsIHJhbmdlLmVuZCk7ICFpc19sdChvcmRl
cikpCisgICAgaWYgKGF1dG8gb3JkZXIgPSB0cmVlT3JkZXI8VHJlZVR5cGU+KHBvaW50LCByYW5n
ZS5lbmQpOyAhaXNfbHQob3JkZXIpKQogICAgICAgICByZXR1cm4gb3JkZXI7CiAgICAgcmV0dXJu
IFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZhbGVudDsKIH0KIAordGVtcGxhdGUgUGFydGlhbE9yZGVy
aW5nIHRyZWVPcmRlcjxUcmVlPihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9p
bnQmKTsKK3RlbXBsYXRlIFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXI8VHJlZT4oY29uc3QgQm91
bmRhcnlQb2ludCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKK1BhcnRpYWxPcmRlcmluZyBkb2N1
bWVudE9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQb2ludCYg
cG9pbnQpCit7CisgICAgcmV0dXJuIHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KHJhbmdlLCBwb2lu
dCk7Cit9CisKK1BhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9p
bnQmIHBvaW50LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIHRyZWVP
cmRlcjxDb21wb3NlZFRyZWU+KHBvaW50LCByYW5nZSk7Cit9CisKIGJvb2wgY29udGFpbnMoY29u
c3QgU2ltcGxlUmFuZ2UmIG91dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdl
KQogewogICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5zdGFydCwg
aW5uZXJSYW5nZS5zdGFydCkpICYmIGlzX2d0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLmVu
ZCwgaW5uZXJSYW5nZS5lbmQpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJv
b2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIp
Cit7CisgICAgcmV0dXJuIGlzX2x0ZXEodHJlZU9yZGVyPFRyZWVUeXBlPihhLnN0YXJ0LCBiLmVu
ZCkpICYmIGlzX2x0ZXEodHJlZU9yZGVyPFRyZWVUeXBlPihiLnN0YXJ0LCBhLmVuZCkpOworfQor
Cit0ZW1wbGF0ZSBib29sIGludGVyc2VjdHM8VHJlZT4oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25z
dCBTaW1wbGVSYW5nZSYpOworCiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIGEs
IGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogewotICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3Jk
ZXIoYS5zdGFydCwgYi5lbmQpKSAmJiBpc19sdGVxKGRvY3VtZW50T3JkZXIoYi5zdGFydCwgYS5l
bmQpKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0czxDb21wb3NlZFRyZWU+KGEsIGIpOwogfQogCiBz
dGF0aWMgYm9vbCBjb21wYXJlQnlEb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEs
IGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGIpCkBAIC0yNzIsMTQgKzMwOCwzNSBAQCBib29sIGNvbnRh
aW5zKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKICAgICByZXR1
cm4gbm9kZVJhbmdlICYmIGNvbnRhaW5zKHJhbmdlLCAqbm9kZVJhbmdlKTsKIH0KIAotYm9vbCBp
bnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGNvbnRhaW5zKGNvbnN0IE5vZGUmIG91dGVy
LCBjb25zdCBOb2RlJiBpbm5lcik7CisKK3RlbXBsYXRlPD4gYm9vbCBjb250YWluczxUcmVlPihj
b25zdCBOb2RlJiBvdXRlciwgY29uc3QgTm9kZSYgaW5uZXIpCit7CisgICAgcmV0dXJuIG91dGVy
LmNvbnRhaW5zKGlubmVyKTsKK30KKwordGVtcGxhdGU8PiBib29sIGNvbnRhaW5zPENvbXBvc2Vk
VHJlZT4oY29uc3QgTm9kZSYgb3V0ZXIsIGNvbnN0IE5vZGUmIGlubmVyKQoreworICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHdoYXQgdGhlIGNvZGUgZGlkIGJlZm9yZSwgYnV0IGl0IGlzIG5vdCBjb3Jy
ZWN0IQorICAgIHJldHVybiBvdXRlci5jb250YWlucyhpbm5lcik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFRyZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBjb25zdCBOb2RlJiBub2RlKQogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciBhIG1vcmUgZWZm
aWNpZW50IGFsZ29yaXRobSB0aGF0IGF2b2lkcyBhbHdheXMgY29tcHV0aW5nIHRoZSBub2RlIGlu
ZGV4LgogICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29uc3RfY2FzdCBwb2ludCB0byBhIGRlc2ln
biBwcm9ibGVtPwogICAgIGF1dG8gbm9kZVJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShj
b25zdF9jYXN0PE5vZGUmPihub2RlKSk7CiAgICAgaWYgKCFub2RlUmFuZ2UpCi0gICAgICAgIHJl
dHVybiBub2RlLmNvbnRhaW5zKHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKSk7Ci0gICAgcmV0
dXJuIGlzX2x0KGRvY3VtZW50T3JkZXIobm9kZVJhbmdlLT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYg
aXNfbHQoZG9jdW1lbnRPcmRlcihyYW5nZS5zdGFydCwgbm9kZVJhbmdlLT5lbmQpKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnRhaW5zPFRyZWVUeXBlPihub2RlLCByYW5nZS5zdGFydC5jb250YWluZXIp
OworICAgIHJldHVybiBpc19sdCh0cmVlT3JkZXI8VHJlZVR5cGU+KG5vZGVSYW5nZS0+c3RhcnQs
IHJhbmdlLmVuZCkpICYmIGlzX2x0KHRyZWVPcmRlcjxUcmVlVHlwZT4ocmFuZ2Uuc3RhcnQsIG5v
ZGVSYW5nZS0+ZW5kKSk7CisKK30KKwordGVtcGxhdGUgYm9vbCBpbnRlcnNlY3RzPFRyZWU+KGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOworCitib29sIGludGVyc2VjdHMoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAgIHJldHVybiBpbnRl
cnNlY3RzPENvbXBvc2VkVHJlZT4ocmFuZ2UsIG5vZGUpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBs
ZVJhbmdlLmgKaW5kZXggNjBiMzAyZmViMGNhMWVlOWUxNTZjOWJjM2EyMDBhZTRmZGYzMDFkZC4u
NDkwYzBiZTMxYzFhYWNiM2Y2YmY1YzNmMjExNzFlNjJmYjRlYzg0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Np
bXBsZVJhbmdlLmgKQEAgLTY1LDE4ICs2NSwyNCBAQCBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9k
ZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAordGVt
cGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxl
UmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlw
ZT4gYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE9wdGlvbmFs
PEJvdW5kYXJ5UG9pbnQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGlzUG9pbnRJblJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogYm9vbCBpc1BvaW50SW5S
YW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+Jik7
CiAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIG91dGVy
UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFRyZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1w
bGVSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJh
bmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIHVu
aW9uUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGludGVyc2VjdGlvbihjb25zdCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKIAogV0VCQ09S
RV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxl
UmFuZ2UmLCBjb25zdCBOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHMoY29u
c3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CiAKIC8vIFJldHVybnMgZXF1aXZhbGVudCBp
ZiBwb2ludCBpcyBpbiByYW5nZS4KK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlID0gVHJlZT4g
UGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5k
YXJ5UG9pbnQmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlID0gVHJlZT4gUGFydGlhbE9y
ZGVyaW5nIHRyZWVPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgU2ltcGxlUmFuZ2Um
KTsKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogV0VCQ09SRV9FWFBPUlQgUGFydGlh
bE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IFNpbXBs
ZVJhbmdlJik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBmZWI4NTNhZGQzMjA1MzE3ZjVlMDNmYjU2YzZmNzlkNjdiNGJh
YTA1Li4zMjBiN2MxOTJhYWE3YzMyZGJlNGUxOWE4MzQ3ODE1YTQyYjIyMDcxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMjAtMTAtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJFR1JFU1NJT04ocjI2NjI5NSk6IFJhbmdlIGFsbG93cyBzdGFydCBhbmQgZW5k
IGNvbnRhaW5lcnMgdG8gYmVsb25nIHRvIGRpZmZlcmVudCB0cmVlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3ODk1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9SYW5nZS9yYW5nZXMt
YWNyb3NzLXRyZWVzLmh0bWw6IEFkZGVkLgorCiAyMDIwLTEwLTIwICBIZWN0b3IgTG9wZXogIDxo
ZWN0b3JfaV9sb3BlekBhcHBsZS5jb20+CiAKICAgICAgICAgVGVzdCBleHBlY3RhdGlvbiBhZGp1
c3RtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZXMtYWNy
b3NzLXRyZWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jhbmdl
cy1hY3Jvc3MtdHJlZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkYmEzZDg3YmZkNTI1YzAx
ZjEzMmYyOGRkYmRhMjk2YjZhNzE4MzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9SYW5nZS9yYW5nZXMtYWNyb3NzLXRyZWVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDIxIEBACitQQVNTIHJhbmdlLnNldFN0YXJ0KHNoYWRvd1Jvb3QsIDApOyBjb2xsYXBzZWRSYW5n
ZU5vZGUocmFuZ2UpIGlzIHNoYWRvd1Jvb3QKK1BBU1MgcmFuZ2Uuc2V0RW5kKHNoYWRvd1Jvb3Qs
IDApOyBjb2xsYXBzZWRSYW5nZU5vZGUocmFuZ2UpIGlzIHNoYWRvd1Jvb3QKK1BBU1MgcmFuZ2Uu
c2V0U3RhcnRCZWZvcmUoc2hhZG93Tm9kZSk7IGNvbGxhcHNlZFJhbmdlTm9kZShyYW5nZSkgaXMg
c2hhZG93Um9vdAorUEFTUyByYW5nZS5zZXRTdGFydEFmdGVyKHNoYWRvd05vZGUpOyBjb2xsYXBz
ZWRSYW5nZU5vZGUocmFuZ2UpIGlzIHNoYWRvd1Jvb3QKK1BBU1MgcmFuZ2Uuc2V0RW5kQmVmb3Jl
KHNoYWRvd05vZGUpOyBjb2xsYXBzZWRSYW5nZU5vZGUocmFuZ2UpIGlzIHNoYWRvd1Jvb3QKK1BB
U1MgcmFuZ2Uuc2V0RW5kQWZ0ZXIoc2hhZG93Tm9kZSk7IGNvbGxhcHNlZFJhbmdlTm9kZShyYW5n
ZSkgaXMgc2hhZG93Um9vdAorUEFTUyBib2R5UmFuZ2UoKS5pc1BvaW50SW5SYW5nZShzaGFkb3dO
b2RlLCAwKSBpcyBmYWxzZQorUEFTUyBib2R5UmFuZ2UoKS5jb21wYXJlUG9pbnQoc2hhZG93Tm9k
ZSwgMCkgdGhyZXcgZXhjZXB0aW9uIFdyb25nRG9jdW1lbnRFcnJvcjogVGhlIG9iamVjdCBpcyBp
biB0aGUgd3JvbmcgZG9jdW1lbnQuLgorUEFTUyBib2R5UmFuZ2UoKS5pbnRlcnNlY3RzTm9kZShz
aGFkb3dOb2RlKSBpcyBmYWxzZQorUEFTUyBib2R5UmFuZ2UoKS5jb21wYXJlTm9kZShzaGFkb3dO
b2RlKSB0aHJldyBleGNlcHRpb24gV3JvbmdEb2N1bWVudEVycm9yOiBUaGUgb2JqZWN0IGlzIGlu
IHRoZSB3cm9uZyBkb2N1bWVudC4uCitQQVNTIGRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50
UG9zaXRpb24oc2hhZG93Tm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RF
RCBpcyBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRAorUEFTUyAoZG9jdW1lbnQu
Ym9keS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihzaGFkb3dOb2RlKSAmIChOb2RlLkRPQ1VNRU5U
X1BPU0lUSU9OX1BSRUNFRElORyB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSkg
IT0gMCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50UG9zaXRpb24o
c2hhZG93Tm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TIGlzIDAKK1BBU1Mg
ZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihzaGFkb3dOb2RlKSAmIE5vZGUu
RE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZIGlzIDAKK1BBU1MgZG9jdW1lbnQuYm9keS5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbihzaGFkb3dOb2RlKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJ
T05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMgaXMgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9JTVBM
RU1FTlRBVElPTl9TUEVDSUZJQworUEFTUyBkb2N1bWVudC5ib2R5LmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uKHNoYWRvd05vZGUpICYgfihOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RF
RCB8IE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HIHwgTm9kZS5ET0NVTUVOVF9QT1NJ
VElPTl9GT0xMT1dJTkcgfCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TIHwgTm9kZS5E
T0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkgfCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0lN
UExFTUVOVEFUSU9OX1NQRUNJRklDKSBpcyAwCitQQVNTIGRvY3VtZW50LmJvZHkuY29udGFpbnMo
c2hhZG93Tm9kZSkgaXMgZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9y
YW5nZXMtYWNyb3NzLXRyZWVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5n
ZXMtYWNyb3NzLXRyZWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFjNjU0Nzg0ZTkwOWE3ZGQ0YTljODYx
OTViZjgzMDEyOTY1Yjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1JhbmdlL3Jhbmdlcy1hY3Jvc3MtdHJlZXMuaHRtbApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxzY3JpcHQ+
CisgICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9
IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pOworICAgICAgICBzaGFk
b3dSb290LnRleHRDb250ZW50ID0gJ2hlbGxvJzsKKyAgICAgICAgY29uc3Qgc2hhZG93Tm9kZSA9
IHNoYWRvd1Jvb3QuZmlyc3RDaGlsZDsKKworICAgICAgICBmdW5jdGlvbiBib2R5UmFuZ2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdl
KCk7CisgICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlKGRvY3VtZW50LmJvZHkpOworICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY29sbGFw
c2VkUmFuZ2VOb2RlKHJhbmdlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmFuZ2Uu
Y29sbGFwc2VkID8gcmFuZ2Uuc3RhcnRDb250YWluZXIgOiAibm90IGNvbGxhcHNlZCI7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0UmFuZ2VNdXRhdGlvbih0ZXN0KQorICAgICAg
ICB7CisgICAgICAgICAgICByYW5nZSA9IGJvZHlSYW5nZSgpOworICAgICAgICAgICAgc2hvdWxk
QmUoInJhbmdlLiIgKyB0ZXN0ICsgIjsgY29sbGFwc2VkUmFuZ2VOb2RlKHJhbmdlKSIsICJzaGFk
b3dSb290Iik7CisgICAgICAgIH0KKworICAgICAgICB0ZXN0UmFuZ2VNdXRhdGlvbigic2V0U3Rh
cnQoc2hhZG93Um9vdCwgMCkiKTsKKyAgICAgICAgdGVzdFJhbmdlTXV0YXRpb24oInNldEVuZChz
aGFkb3dSb290LCAwKSIpOworICAgICAgICB0ZXN0UmFuZ2VNdXRhdGlvbigic2V0U3RhcnRCZWZv
cmUoc2hhZG93Tm9kZSkiKTsKKyAgICAgICAgdGVzdFJhbmdlTXV0YXRpb24oInNldFN0YXJ0QWZ0
ZXIoc2hhZG93Tm9kZSkiKTsKKyAgICAgICAgdGVzdFJhbmdlTXV0YXRpb24oInNldEVuZEJlZm9y
ZShzaGFkb3dOb2RlKSIpOworICAgICAgICB0ZXN0UmFuZ2VNdXRhdGlvbigic2V0RW5kQWZ0ZXIo
c2hhZG93Tm9kZSkiKTsKKworICAgICAgICBzaG91bGRCZUZhbHNlKCJib2R5UmFuZ2UoKS5pc1Bv
aW50SW5SYW5nZShzaGFkb3dOb2RlLCAwKSIpOworICAgICAgICBzaG91bGRUaHJvd0Vycm9yTmFt
ZSgiYm9keVJhbmdlKCkuY29tcGFyZVBvaW50KHNoYWRvd05vZGUsIDApIiwgIldyb25nRG9jdW1l
bnRFcnJvciIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJib2R5UmFuZ2UoKS5pbnRlcnNlY3Rz
Tm9kZShzaGFkb3dOb2RlKSIpOworICAgICAgICBzaG91bGRUaHJvd0Vycm9yTmFtZSgiYm9keVJh
bmdlKCkuY29tcGFyZU5vZGUoc2hhZG93Tm9kZSkiLCAiV3JvbmdEb2N1bWVudEVycm9yIik7CisK
KyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBOb2RlIG1ldGhvZHMsIG5vdCBSYW5nZSwgc28g
d2UgbWlnaHQgd2FudCB0byBtb3ZlIHRoZW0gaW50byBhIHNlcGFyYXRlIHRlc3QuCisKKyAgICAg
ICAgc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oc2hhZG93
Tm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCIsICJOb2RlLkRPQ1VN
RU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCIpOworICAgICAgICBzaG91bGRCZVRydWUoIihkb2N1
bWVudC5ib2R5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHNoYWRvd05vZGUpICYgKE5vZGUuRE9D
VU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HIHwgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJ
TkcpKSAhPSAwIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKHNoYWRvd05vZGUpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlO
UyIsICIwIik7CisgICAgICAgIHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKHNoYWRvd05vZGUpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURf
QlkiLCAiMCIpOworICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbihzaGFkb3dOb2RlKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5U
QVRJT05fU1BFQ0lGSUMiLCAiTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9T
UEVDSUZJQyIpOworICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbihzaGFkb3dOb2RlKSAmIH4oTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05O
RUNURUQgfCBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyB8IE5vZGUuRE9DVU1FTlRf
UE9TSVRJT05fRk9MTE9XSU5HIHwgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUyB8IE5v
ZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZIHwgTm9kZS5ET0NVTUVOVF9QT1NJVElP
Tl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQykiLCAiMCIpOworCisgICAgICAgIHNob3VsZEJlRmFs
c2UoImRvY3VtZW50LmJvZHkuY29udGFpbnMoc2hhZG93Tm9kZSkiKTsKKworICAgICAgICBkb2N1
bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNoYWRvd0hvc3QpOworCisgICAgICAgIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CisgICAgPC9zY3JpcHQ+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="428288"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>