<?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>218007</bug_id>
          
          <creation_ts>2020-10-20 21:37:20 -0700</creation_ts>
          <short_desc>REGRESSION(r266295): DOMSelection&apos;s addRange and containsNode behave incorrectly when selection crosses shadow boundaries</short_desc>
          <delta_ts>2020-10-23 18:16:03 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=217895</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>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>darin</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1700065</commentid>
    <comment_count>0</comment_count>
      <attachid>411957</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-20 21:37:20 -0700</bug_when>
    <thetext>Created attachment 411957
test

After https://trac.webkit.org/changeset/266295, addRange and containsNode of DOMSelection
behaves incorrectly when the selection crosses shadow boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700205</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 08:52:02 -0700</bug_when>
    <thetext>Oh, maybe I have this correct in the &quot;live range&quot; mode but incorrect in the old mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700242</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 09:46:08 -0700</bug_when>
    <thetext>Half of this is a bug in the super-crazy addRange implementation we have currently, not in the standards-compliant one that is behind the &quot;live range selection enabled&quot; flag.

The other half is a bug in containsNode that is unconditionally wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700252</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 10:04:51 -0700</bug_when>
    <thetext>I’m confused about the addRange half of this. It doesn’t seem like you can use the Selection API to create a selection that crosses shadow boundaries, unless there is a bug. For example, setBaseAndExtent is not supposed to do anything if either node has a root that is not the document.

I get lost in the attached test case. Doesn’t the specification say that calling this function should do nothing?

    getSelection().setBaseAndExtent(document.body, 0, document.querySelector(&apos;b[slot=second]&apos;).firstChild, 5);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700459</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-21 16:36:07 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; I’m confused about the addRange half of this. It doesn’t seem like you can
&gt; use the Selection API to create a selection that crosses shadow boundaries,
&gt; unless there is a bug. For example, setBaseAndExtent is not supposed to do
&gt; anything if either node has a root that is not the document.
&gt; 
&gt; I get lost in the attached test case. Doesn’t the specification say that
&gt; calling this function should do nothing?
&gt; 
&gt;     getSelection().setBaseAndExtent(document.body, 0,
&gt; document.querySelector(&apos;b[slot=second]&apos;).firstChild, 5);

No, this is saying that we&apos;re setting selection from the (body,0) to (#text, 5) where #text is the first child of b element that gets assigned to a slot. Because b is in the same tree as body, this is totally valid. In the flat tree, it gets moved into inside the slot inside the shadow tree but that&apos;s irrelevant for the purpose of determining what&apos;s allowed / disallowed in DOM API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700881</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-22 16:30:37 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #4)
&gt; No, this is saying that we&apos;re setting selection from the (body,0) to (#text,
&gt; 5) where #text is the first child of b element that gets assigned to a slot.
&gt; Because b is in the same tree as body, this is totally valid. In the flat
&gt; tree, it gets moved into inside the slot inside the shadow tree but that&apos;s
&gt; irrelevant for the purpose of determining what&apos;s allowed / disallowed in DOM
&gt; API.

Why do we have to use such a complicated example? What makes this critical to reproducing the bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700884</commentid>
    <comment_count>6</comment_count>
      <attachid>412143</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-22 16:39:20 -0700</bug_when>
    <thetext>Created attachment 412143
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700886</commentid>
    <comment_count>7</comment_count>
      <attachid>412145</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-22 16:56:32 -0700</bug_when>
    <thetext>Created attachment 412145
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701027</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 09:03:56 -0700</bug_when>
    <thetext>Patch is finished and 100% ready to review. Failure is just because I didn’t regenerate the expected.txt file and it’s missing a PASS line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701029</commentid>
    <comment_count>9</comment_count>
      <attachid>412185</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 09:08:33 -0700</bug_when>
    <thetext>Created attachment 412185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701060</commentid>
    <comment_count>10</comment_count>
      <attachid>412185</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-23 10:35:57 -0700</bug_when>
    <thetext>Comment on attachment 412185
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:965
&gt; -        if (isPointInRange(*range, makeBoundaryPoint(end)))
&gt; +        if (contains&lt;ComposedTree&gt;(*range, makeBoundaryPoint(end)))

I think this code will look better if it were range-&gt;contains&lt;ComposedTree&gt;(makeBoundaryPoint(end)) instead.

&gt; Source/WebCore/dom/SimpleRange.h:72
&gt; +template&lt;TreeType&gt; bool contains(const SimpleRange&amp;, const Node&amp;);
&gt; +
&gt; +template&lt;TreeType&gt; bool intersects(const SimpleRange&amp;, const SimpleRange&amp;);
&gt; +template&lt;TreeType&gt; bool intersects(const SimpleRange&amp;, const Node&amp;);

I think these two functions are probably better off being member functions of SimpleRange.

&gt; LayoutTests/editing/selection/selections-across-trees.html:27
&gt; +

Can we also check that focusNode is still nodeInSlot?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701117</commentid>
    <comment_count>11</comment_count>
      <attachid>412185</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 12:32:47 -0700</bug_when>
    <thetext>Comment on attachment 412185
Patch

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

&gt;&gt; LayoutTests/editing/selection/selections-across-trees.html:27
&gt;&gt; +
&gt; 
&gt; Can we also check that focusNode is still nodeInSlot?

I do check that above.

But here, the test selects all the children of the body, so focusNode will *not* be nodeInSlot.

What are you asking for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701118</commentid>
    <comment_count>12</comment_count>
      <attachid>412185</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 12:34:53 -0700</bug_when>
    <thetext>Comment on attachment 412185
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:965
&gt;&gt; +        if (contains&lt;ComposedTree&gt;(*range, makeBoundaryPoint(end)))
&gt; 
&gt; I think this code will look better if it were range-&gt;contains&lt;ComposedTree&gt;(makeBoundaryPoint(end)) instead.

I guess it’s a matter of taste. I don’t think we should add member functions to SimpleRange, even though it would make the syntax nicer here. There are advantages to free functions vs. member functions in C++, like being able to convert the first argument’s type.

&gt;&gt; Source/WebCore/dom/SimpleRange.h:72
&gt;&gt; +template&lt;TreeType&gt; bool intersects(const SimpleRange&amp;, const Node&amp;);
&gt; 
&gt; I think these two functions are probably better off being member functions of SimpleRange.

OK, same debate.

I’m open to eventually changing this, but please consider that we can also have intersects functions overloaded for all sorts of different combinations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701130</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 13:23:35 -0700</bug_when>
    <thetext>I’m going to land, and address Ryosuke’s comments as follow ups once I understand better what he’s looking for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701142</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 14:04:46 -0700</bug_when>
    <thetext>Committed r268940: &lt;https://trac.webkit.org/changeset/268940&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701143</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-23 14:05:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/70633710&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701162</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-23 16:55:32 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 412185 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=412185&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:965
&gt; &gt;&gt; +        if (contains&lt;ComposedTree&gt;(*range, makeBoundaryPoint(end)))
&gt; &gt; 
&gt; &gt; I think this code will look better if it were range-&gt;contains&lt;ComposedTree&gt;(makeBoundaryPoint(end)) instead.
&gt; 
&gt; I guess it’s a matter of taste. I don’t think we should add member functions
&gt; to SimpleRange, even though it would make the syntax nicer here. There are
&gt; advantages to free functions vs. member functions in C++, like being able to
&gt; convert the first argument’s type.

Sure, one thing to note is though that this will make it harder for people to find where these functions are declared / defined. Maybe we can add Source/WebCore/dom/Contains.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701163</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-23 16:57:49 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; Comment on attachment 412185 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=412185&amp;action=review
&gt; 
&gt; &gt;&gt; LayoutTests/editing/selection/selections-across-trees.html:27
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; Can we also check that focusNode is still nodeInSlot?
&gt; 
&gt; I do check that above.
&gt; 
&gt; But here, the test selects all the children of the body, so focusNode will
&gt; *not* be nodeInSlot.
&gt; 
&gt; What are you asking for?

Right, this is why in the original test I posted, I&apos;ve added the following range instead:
const range = document.createRange();
range.setStart(shadowRoot.firstChild, 0);
range.setEnd(shadowRoot, 1);
getSelection().addRange(range);

What I&apos;m saying that is that we should check that the selection doesn&apos;t get changed when we try to add a range within a shadow root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701164</commentid>
    <comment_count>18</comment_count>
      <attachid>412185</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 17:00:30 -0700</bug_when>
    <thetext>Comment on attachment 412185
Patch

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

&gt;&gt;&gt;&gt; LayoutTests/editing/selection/selections-across-trees.html:27
&gt;&gt;&gt;&gt; +
&gt;&gt;&gt; 
&gt;&gt;&gt; Can we also check that focusNode is still nodeInSlot?
&gt;&gt; 
&gt;&gt; I do check that above.
&gt;&gt; 
&gt;&gt; But here, the test selects all the children of the body, so focusNode will *not* be nodeInSlot.
&gt;&gt; 
&gt;&gt; What are you asking for?
&gt; 
&gt; Right, this is why in the original test I posted, I&apos;ve added the following range instead:
&gt; const range = document.createRange();
&gt; range.setStart(shadowRoot.firstChild, 0);
&gt; range.setEnd(shadowRoot, 1);
&gt; getSelection().addRange(range);
&gt; 
&gt; What I&apos;m saying that is that we should check that the selection doesn&apos;t get changed when we try to add a range within a shadow root.

That’s what this does:

    shouldBe(&quot;getSelection().setBaseAndExtent(document.body, 0, nodeInSlot, 5); selectionAddRange(shadowNode, 0, shadowRoot, 1); getSelection().focusNode&quot;, &quot;nodeInSlot&quot;);

Are you asking me to add it? It’s already there!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701166</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 17:02:03 -0700</bug_when>
    <thetext>Because:

    selectionAddRange(shadowNode, 0, shadowRoot, 1)

*is*

    const range = document.createRange();
    range.setStart(shadowRoot.firstChild, 0);
    range.setEnd(shadowRoot, 1);
    getSelection().addRange(range);

Because shadowNode is shadowRoot.firstChild, and selectionAddRange does what you said above.

And then it does:

    shouldBe(focusNode, nodeInSlot)

I used your test! Is there something more you want me to add?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701169</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-23 17:05:43 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #18)
&gt; Comment on attachment 412185 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=412185&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; LayoutTests/editing/selection/selections-across-trees.html:27
&gt; &gt;&gt;&gt;&gt; +
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Can we also check that focusNode is still nodeInSlot?
&gt; &gt;&gt; 
&gt; &gt;&gt; I do check that above.
&gt; &gt;&gt; 
&gt; &gt;&gt; But here, the test selects all the children of the body, so focusNode will *not* be nodeInSlot.
&gt; &gt;&gt; 
&gt; &gt;&gt; What are you asking for?
&gt; &gt; 
&gt; &gt; Right, this is why in the original test I posted, I&apos;ve added the following range instead:
&gt; &gt; const range = document.createRange();
&gt; &gt; range.setStart(shadowRoot.firstChild, 0);
&gt; &gt; range.setEnd(shadowRoot, 1);
&gt; &gt; getSelection().addRange(range);
&gt; &gt; 
&gt; &gt; What I&apos;m saying that is that we should check that the selection doesn&apos;t get changed when we try to add a range within a shadow root.
&gt; 
&gt; That’s what this does:
&gt; 
&gt;     shouldBe(&quot;getSelection().setBaseAndExtent(document.body, 0, nodeInSlot,
&gt; 5); selectionAddRange(shadowNode, 0, shadowRoot, 1);
&gt; getSelection().focusNode&quot;, &quot;nodeInSlot&quot;);
&gt; 
&gt; Are you asking me to add it? It’s already there!

Ah, ok. Sorry, I missed selectionAddRange part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701173</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-23 17:50:14 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #16)
&gt; Sure, one thing to note is though that this will make it harder for people
&gt; to find where these functions are declared / defined. Maybe we can add
&gt; Source/WebCore/dom/Contains.h?

That’s an interesting point.

There is really a family of tree ordering/structure functions:

treeOrder
contains
intersects
intersection
unionRange (annoying name)
intersectingNodes
characterDataOffsetRange
containedNodes (to be added, maybe)
(a few more to come, likely matching concepts in DOM specifications)

I think that all of these kind of &quot;go together&quot;. There are versions that work on nodes, boundary points, and ranges. They are sort of cousins of these:

parent
first/lastChild
next/previousSibling
contains
isDescendantOf
rootNode
document

I could lean more toward making everything member functions. Or maybe put many of these into a TreeStructure.h header?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701178</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-23 18:16:03 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #21)
&gt; (In reply to Ryosuke Niwa from comment #16)
&gt; &gt; Sure, one thing to note is though that this will make it harder for people
&gt; &gt; to find where these functions are declared / defined. Maybe we can add
&gt; &gt; Source/WebCore/dom/Contains.h?
&gt; 
&gt; That’s an interesting point.
&gt; 
&gt; There is really a family of tree ordering/structure functions:
&gt; 
&gt; treeOrder
&gt; contains
&gt; intersects
&gt; intersection
&gt; unionRange (annoying name)
&gt; intersectingNodes
&gt; characterDataOffsetRange
&gt; containedNodes (to be added, maybe)
&gt; (a few more to come, likely matching concepts in DOM specifications)
&gt; 
&gt; I think that all of these kind of &quot;go together&quot;. There are versions that
&gt; work on nodes, boundary points, and ranges. They are sort of cousins of
&gt; these:
&gt; 
&gt; parent
&gt; first/lastChild
&gt; next/previousSibling
&gt; contains
&gt; isDescendantOf
&gt; rootNode
&gt; document
&gt; 
&gt; I could lean more toward making everything member functions. Or maybe put
&gt; many of these into a TreeStructure.h header?

We do have NodeTraversal.h so we could put them there. Or maybe something like NodeAlgorithm.h? If these functions are also supposed to work with RenderObject&apos;s then maybe TreeAlgorithm.h is more appropriate but I&apos;m not sure that&apos;s really the way to go. It&apos;s probably better to have separate versions for Node vs. RenderObject and other kinds of trees.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>411957</attachid>
            <date>2020-10-20 21:37:20 -0700</date>
            <delta_ts>2020-10-20 21:37:20 -0700</delta_ts>
            <desc>test</desc>
            <filename>shadow-selection.html</filename>
            <type>text/html</type>
            <size>822</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8Ym9keT4KVGhpcyB0ZXN0Ljxicj4KPHNjcmlwdD4KCmNv
bnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChob3N0KTsKY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHtt
b2RlOiAnY2xvc2VkJ30pOwpob3N0LmlubmVySFRNTCA9ICc8Yj5oZWxsbzwvYj48YiBzbG90PSJz
ZWNvbmQiPndvcmxkPC9iPic7CnNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxzcGFuPjxzbG90Pjwv
c2xvdD4gPHNsb3QgbmFtZT0ic2Vjb25kIj48L3Nsb3Q+PC9zcGFuPic7CgpnZXRTZWxlY3Rpb24o
KS5zZXRCYXNlQW5kRXh0ZW50KGRvY3VtZW50LmJvZHksIDAsIGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3IoJ2Jbc2xvdD1zZWNvbmRdJykuZmlyc3RDaGlsZCwgNSk7Cgpjb25zdCByYW5nZSA9IGRvY3Vt
ZW50LmNyZWF0ZVJhbmdlKCk7CnJhbmdlLnNldFN0YXJ0KHNoYWRvd1Jvb3QuZmlyc3RDaGlsZCwg
MCk7CnJhbmdlLnNldEVuZChzaGFkb3dSb290LCAxKTsKZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2Uo
cmFuZ2UpOwoKZG9jdW1lbnQud3JpdGUoZ2V0U2VsZWN0aW9uKCkuY29udGFpbnNOb2RlKHNoYWRv
d1Jvb3QuZmlyc3RDaGlsZC5jaGlsZE5vZGVzWzFdKSA/ICdGQUlMJyA6ICdQQVNTJyk7Cgpkb2N1
bWVudC53cml0ZShnZXRTZWxlY3Rpb24oKS5mb2N1c05vZGUgPT0gZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcignYltzbG90PXNlY29uZF0nKS5maXJzdENoaWxkID8gJ1BBU1MnIDogJ0ZBSUwnKTsKCjwv
c2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412143</attachid>
            <date>2020-10-22 16:39:20 -0700</date>
            <delta_ts>2020-10-22 16:57:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218007-20201022163919.patch</filename>
            <type>text/plain</type>
            <size>30784</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZiNzRjZDAxNmNlYTdj
NWRjY2UzNDhhYmZkMGU5N2Q4NWU5YjJlOC4uZjg4NDQ3MThhZDcyYTJmYTY1MTY0ZGFjZDZkODk0
ZDA2MjMyMDNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTEwLTIyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUp
OiBET01TZWxlY3Rpb24ncyBhZGRSYW5nZSBhbmQgY29udGFpbnNOb2RlIGJlaGF2ZXMgaW5jb3Jy
ZWN0bHkgd2hlbiBzZWxlY3Rpb24gY3Jvc3NlcyBzaGFkb3cgYm91bmRhcmllcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MDA3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxl
Y3Rpb24vc2VsZWN0aW9ucy1hY3Jvc3MtdHJlZXMuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxpbmtDbGlja1BvaW50KTogVXBkYXRlIGZvciB0aGUg
bmV3IG5hbWUgb2YKKyAgICAgICAgaXNQb2ludEluUmFuZ2UsIGNvbnRhaW5zPENvbXBvc2VkVHJl
ZT4uIFdlIGNhbiByZXR1cm4gYW5kIGNoYW5nZSBpdCBmcm9tIENvbXBvc2VkVHJlZQorICAgICAg
ICB0byBzb21ldGhpbmcgZWxzZSBzaW5jZSB0aGF0J3MgbGlrZWx5IG5vdCB0aGUgdHJlZSB3ZSBu
ZWVkIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpz
ZXRTZWxlY3RlZFRleHRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdCk6
IERpdHRvLgorCisgICAgICAgICogZG9tL0JvdW5kYXJ5UG9pbnQuaDogVXBkYXRlIHRvIHVzZSBU
cmVlVHlwZSBlbnVtZXJhdGlvbiBpbnN0ZWFkIG9mIGNsYXNzZXMuCisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVwdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OnRyZWVPcmRlcik6IERpdHRvLgorICAgICAgICAqIGRvbS9Ob2RlLmg6IERpdHRv
LgorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpp
c1BvaW50SW5SYW5nZSk6IFVwZGF0ZWQgc2luY2Ugd2UgcmVuYW1lZCBpc1BvaW50SW5SYW5nZSB0
byBiZQorICAgICAgICBhbiBvdmVybG9hZCBvZiBjb250YWlucy4KKworICAgICAgICAqIGRvbS9T
aW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBVcGRhdGUgdG8g
dXNlIFRyZWVUeXBlIGVudW1lcmF0aW9uIGluc3RlYWQgb2YgY2xhc3Nlcy4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRhaW5zKTogRGl0dG8uIEFsc28gcmVuYW1lZCBpc1BvaW50SW5SYW5nZSB0byBh
biBvdmVybG9hZCBvZiBjb250YWlucy4KKyAgICAgICAgQWxzbyBhZGRlZCBjb252ZXJ0ZWQgdGhl
IGNvbnRhaW5zIHRoYXQgdGFrZXMgdHdvIHJhbmdlcyB0byBhIGZ1bmN0aW9uIHRlbXBsYXRlLgor
ICAgICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0cyk6IERpdHRvLgorCisgICAgICAgICogZG9tL1Np
bXBsZVJhbmdlLmg6IFJlb3JnYW5pemVkIHRoZSBmdW5jdGlvbnMgc28gYWxsIHRoZSBkZXByZWNh
dGVkIGZ1bmN0aW9ucworICAgICAgICB0aGF0IHNpbGVudGx5IHVzZSBDb21wb3NlZFRyZWUgYXJl
IGdyb3VwZWQgdG9nZXRoZXIuIFVwZGF0ZWQgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlcworICAgICAg
ICB0byB1c2UgVHJlZVR5cGUgZW51bWVyYXRpb24gaW5zdGVhZCBvZiBjbGFzc2VzLiBBZGRlZCBh
IGNvdXBsZSBtb3JlIGZ1bmN0aW9uCisgICAgICAgIHRlbXBsYXRlcyB0aGF0IHdlIHVzZWQgdG8g
Zml4IERPTVNlbGVjdGlvbi4KKyAKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6IFVw
ZGF0ZSBmb3IgdGhlIG5ldyBuYW1lIG9mIHNQb2ludEluUmFuZ2UsCisgICAgICAgIGNvbnRhaW5z
PENvbXBvc2VkVHJlZT4uIFdlIGNhbiByZXR1cm4gYW5kIGNoYW5nZSBpdCBmcm9tIENvbXBvc2Vk
VHJlZSB0byBzb21ldGhpbmcKKyAgICAgICAgZWxzZSBzaW5jZSB0aGF0J3MgbGlrZWx5IG5vdCB0
aGUgdHJlZSB3ZSBuZWVkIGhlcmUuCisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cExlZ2FjeS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkNvbnRhaW5zUG9zaXRp
b24pOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YWRkUmFuZ2UpOiBVc2UgaW50ZXJzZWN0czxUcmVlPiBi
ZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgdXNlIHRoZSBjb21wb3NlZCB0cmVlIGhl
cmUuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6
IFVzZSBpbnRlcnNlY3RzPFRyZWU+IGFuZCBjb250YWluczxUcmVlPi4KKyAgICAgICAgRXZhbnR1
YWxseSA8VHJlZT4gd2lsbCBiZSB0aGUgZGVmYXVsdCBhbmQgd2UgY2FuIGNvbWUgYmFjayBoZXJl
IGFuZCBlZGl0IGRvd24gdGhlc2UKKyAgICAgICAgY2FsbHMgZm9yIGJyZXZpdHksIGJ1dCBmaXJz
dCB3ZSBoYXZlIHRvIG1ha2UgYWxsIHRoZSB1c2VzIG9mIENvbXBvc2VkVHJlZSBleHBsaWNpdC4K
KwogMjAyMC0xMC0yMiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBUd2l0dGVyIFBob3RvIGdhbGxlcnkgaW5jb3JyZWN0bHkgcmVuZGVyZWQgYWZ0ZXIg
b3BlbmluZyBhbm90aGVyIG1vZGFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBmODg1Y2IyZDc2
YjJmN2YxMDAzMWYzZTc2ODc0NzY2YzU3MTM3NjU3Li4zMTc1YjZkYWFkYjBiYzA3ZWVmYWZkYjI1
YWQxMWJmOTFhNGI4MjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTk2Miw3ICs5NjIsNyBA
QCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsaW5rQ2xpY2tQb2ludCgpCiAg
ICAgaWYgKGF1dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2UoKSkgewogICAgICAgICBhdXRvIHN0YXJ0
ID0gVmlzaWJsZVBvc2l0aW9uIHsgbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKHJhbmdlLT5z
dGFydCkgfTsKICAgICAgICAgYXV0byBlbmQgPSBuZXh0VmlzaWJsZVBvc2l0aW9uKHN0YXJ0KTsK
LSAgICAgICAgaWYgKGlzUG9pbnRJblJhbmdlKCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
KSkpCisgICAgICAgIGlmIChjb250YWluczxDb21wb3NlZFRyZWU+KCpyYW5nZSwgbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kKSkpCiAgICAgICAgICAgICByZXR1cm4geyBib3VuZHNGb3JSYW5nZSgqbWFr
ZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpKS5jZW50ZXIoKSB9OwogICAgIH0KICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwpAQCAtMTY5MywxMCArMTY5MywxMCBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNv
bnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQogICAgICAgICBhdXRvJiBub2RlID0gKnRoaXMtPm5v
ZGUoKTsKICAgICAgICAgYXV0byBlbGVtZW50UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKTsK
ICAgICAgICAgYXV0byBzdGFydCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0
ZXJJdGVyYXRvcihub2RlLCByYW5nZS5zdGFydCk7Ci0gICAgICAgIGlmICghaXNQb2ludEluUmFu
Z2UoKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpKSkKKyAgICAgICAgaWYg
KCFjb250YWluczxDb21wb3NlZFRyZWU+KCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0KSkpCiAgICAgICAgICAgICBzdGFydCA9IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlv
bihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgYXV0byBlbmQgPSB2aXNpYmxlUG9zaXRp
b25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3Iobm9kZSwgcmFuZ2Uuc3RhcnQgKyByYW5n
ZS5sZW5ndGgpOwotICAgICAgICBpZiAoIWlzUG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1h
a2VCb3VuZGFyeVBvaW50KGVuZCkpKQorICAgICAgICBpZiAoIWNvbnRhaW5zPENvbXBvc2VkVHJl
ZT4oKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSkpCiAgICAgICAgICAgICBl
bmQgPSBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAg
ICAgICAgIG1fcmVuZGVyZXItPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oc3RhcnQsIGVuZCksIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiAgICAgfQpAQCAtMjI0Nyw3ICsyMjQ3LDcgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlv
blJhbmdlKGNvbnN0IFZpc2libGVQb3MKIAogICAgICAgICBhdXRvIHN0YXJ0ID0gcmFuZ2Uuc3Rh
cnQ7CiAgICAgICAgIGlmIChhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRSYW5nZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoIWlzUG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VC
b3VuZGFyeVBvaW50KHN0YXJ0KSkpCisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zPENvbXBvc2Vk
VHJlZT4oKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpKSkKICAgICAgICAg
ICAgICAgICBzdGFydCA9IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihlbGVtZW50UmFuZ2Ut
PnN0YXJ0KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91
bmRhcnlQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaAppbmRleCA1
M2Y1NGE4MDFhZjZlNDZjZjFkZTMxNzBhYTYzMzk5MTMyZDk1ZjI5Li40MDNiNTk3MjA0MGZhMDY1
OGVjZWQzYzVmOTU1YjdhYmQ0ZDllNGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Qm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgK
QEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IEJvdW5kYXJ5UG9pbnQgewogYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CiBib29sIG9wZXJh
dG9yIT0oY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVy
KGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0ZTxU
cmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRhcnlQ
b2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRl
cmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBv
aW50Jik7CiAKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3Vu
ZGFyeVBvaW50QmVmb3JlTm9kZShOb2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZWM4NjYzM2My
NjNhZmY2NGMyNTkxN2RiNWU1MDVmZGI5YzcwYjgxNy4uMzViOTliMzAzNTE4M2E0Y2E3NTA2Y2Vj
Y2M2OTk3ZmM1Mjg4NDc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjYzMiwxMSArMjYzMiwxMSBA
QCB0ZW1wbGF0ZTw+IENvbnRhaW5lck5vZGUqIHBhcmVudDxDb21wb3NlZFRyZWU+KGNvbnN0IE5v
ZGUmIG5vZGUpCiAgICAgcmV0dXJuIG5vZGUucGFyZW50SW5Db21wb3NlZFRyZWUoKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IHNpemVfdCBkZXB0aChjb25zdCBOb2RlJiBub2Rl
KQordGVtcGxhdGU8VHJlZVR5cGUgdHJlZVR5cGU+IHNpemVfdCBkZXB0aChjb25zdCBOb2RlJiBu
b2RlKQogewogICAgIHNpemVfdCBkZXB0aCA9IDA7CiAgICAgYXV0byBhbmNlc3RvciA9ICZub2Rl
OwotICAgIHdoaWxlICgoYW5jZXN0b3IgPSBwYXJlbnQ8VHJlZVR5cGU+KCphbmNlc3RvcikpKQor
ICAgIHdoaWxlICgoYW5jZXN0b3IgPSBwYXJlbnQ8dHJlZVR5cGU+KCphbmNlc3RvcikpKQogICAg
ICAgICArK2RlcHRoOwogICAgIHJldHVybiBkZXB0aDsKIH0KQEAgLTI2NDcsNyArMjY0Nyw3IEBA
IHN0cnVjdCBBbmNlc3RvckFuZENoaWxkcmVuIHsKICAgICBjb25zdCBOb2RlKiBkaXN0aW5jdEFu
Y2VzdG9yQjsKIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBBbmNlc3RvckFuZENo
aWxkcmVuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4oY29uc3QgTm9kZSYgYSwg
Y29uc3QgTm9kZSYgYikKK3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBBbmNlc3RvckFuZENo
aWxkcmVuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4oY29uc3QgTm9kZSYgYSwg
Y29uc3QgTm9kZSYgYikKIHsKICAgICAvLyBUaGlzIGNoZWNrIGlzbid0IG5lZWRlZCBmb3IgY29y
cmVjdG5lc3MsIGJ1dCBpdCBpcyBjaGVhcCBhbmQgbGlrZWx5IHRvIGJlCiAgICAgLy8gY29tbW9u
IGVub3VnaCB0byBiZSB3b3J0aCBvcHRpbWl6aW5nIHNvIHdlIGRvbid0IGhhdmUgdG8gd2FsayB0
byB0aGUgcm9vdC4KQEAgLTI2NTYsMjEgKzI2NTYsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVHJl
ZVR5cGU+IEFuY2VzdG9yQW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGls
ZHIKICAgICAvLyBGSVhNRTogQ291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgbm9kZXMgYXJlIGJv
dGggaW4gdGhlIHNhbWUgc2hhZG93IHRyZWUuCiAgICAgLy8gRklYTUU6IENvdWxkIG9wdGltaXpl
IGNhc2VzIHdoZXJlIG5vZGVzIGFyZSBpbiBkaWZmZXJlbnQgZG9jdW1lbnRzIHRvIHF1aWNrbHkg
cmV0dXJuIGZhbHNlLgogICAgIC8vIEZJWE1FOiBDb3VsZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSBv
bmUgbm9kZSBpcyBjb25uZWN0ZWQgYW5kIHRoZSBvdGhlciBpcyBub3QgdG8gcXVpY2tseSByZXR1
cm4gZmFsc2UuCi0gICAgYXV0byBbZGVwdGhBLCBkZXB0aEJdID0gc3RkOjptYWtlX3R1cGxlKGRl
cHRoPFRyZWVUeXBlPihhKSwgZGVwdGg8VHJlZVR5cGU+KGIpKTsKKyAgICBhdXRvIFtkZXB0aEEs
IGRlcHRoQl0gPSBzdGQ6Om1ha2VfdHVwbGUoZGVwdGg8dHJlZVR5cGU+KGEpLCBkZXB0aDx0cmVl
VHlwZT4oYikpOwogICAgIGF1dG8gW3gsIHksIGRpZmZlcmVuY2VdID0gZGVwdGhBID49IGRlcHRo
QgogICAgICAgICA/IHN0ZDo6bWFrZV90dXBsZSgmYSwgJmIsIGRlcHRoQSAtIGRlcHRoQikKICAg
ICAgICAgOiBzdGQ6Om1ha2VfdHVwbGUoJmIsICZhLCBkZXB0aEIgLSBkZXB0aEEpOwogICAgIGRl
Y2x0eXBlKHgpIGRpc3RpbmN0QW5jZXN0b3JBID0gbnVsbHB0cjsKICAgICBmb3IgKGRlY2x0eXBl
KGRpZmZlcmVuY2UpIGkgPSAwOyBpIDwgZGlmZmVyZW5jZTsgKytpKSB7CiAgICAgICAgIGRpc3Rp
bmN0QW5jZXN0b3JBID0geDsKLSAgICAgICAgeCA9IHBhcmVudDxUcmVlVHlwZT4oKngpOworICAg
ICAgICB4ID0gcGFyZW50PHRyZWVUeXBlPigqeCk7CiAgICAgfQogICAgIGRlY2x0eXBlKHkpIGRp
c3RpbmN0QW5jZXN0b3JCID0gbnVsbHB0cjsKICAgICB3aGlsZSAoeCAhPSB5KSB7CiAgICAgICAg
IGRpc3RpbmN0QW5jZXN0b3JBID0geDsKICAgICAgICAgZGlzdGluY3RBbmNlc3RvckIgPSB5Owot
ICAgICAgICB4ID0gcGFyZW50PFRyZWVUeXBlPigqeCk7Ci0gICAgICAgIHkgPSBwYXJlbnQ8VHJl
ZVR5cGU+KCp5KTsKKyAgICAgICAgeCA9IHBhcmVudDx0cmVlVHlwZT4oKngpOworICAgICAgICB5
ID0gcGFyZW50PHRyZWVUeXBlPigqeSk7CiAgICAgfQogICAgIGlmIChkZXB0aEEgPCBkZXB0aEIp
CiAgICAgICAgIHN0ZDo6c3dhcChkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNlc3RvckIp
OwpAQCAtMjY5NSwxMSArMjY5NSwxMSBAQCBzdGF0aWMgYm9vbCBpc1NpYmxpbmdTdWJzZXF1ZW50
KGNvbnN0IE5vZGUmIHNpYmxpbmdBLCBjb25zdCBOb2RlJiBzaWJsaW5nQikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBQYXJ0aWFsT3JkZXJpbmcg
dHJlZU9yZGVyKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIpCit0ZW1wbGF0ZTxUcmVlVHlw
ZSB0cmVlVHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBOb2RlJiBhLCBjb25z
dCBOb2RlJiBiKQogewogICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxP
cmRlcmluZzo6ZXF1aXZhbGVudDsKLSAgICBhdXRvIHJlc3VsdCA9IGNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yQW5kQ2hpbGRyZW48VHJlZVR5cGU+KGEsIGIpOworICAgIGF1dG8gcmVzdWx0ID0gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHJlbjx0cmVlVHlwZT4oYSwgYik7CiAgICAgaWYg
KCFyZXN1bHQuY29tbW9uQW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6
OnVub3JkZXJlZDsKICAgICBpZiAoIXJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CmluZGV4IDg1NDUxYmFjYTZmNjdjOGM4OTE1N2VlYzVmYmI5MDg3MTY3ZTNmMmYuLmVkNDRiNWUx
YThkNzAwNDBhYzFiYTdkZjFhNjFkZDlhZmJmMzhkNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNzU1LDEy
ICs3NTUsMTEgQEAgY29uc3RleHByIGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyk7CiBjb25z
dGV4cHIgYm9vbCBpc19sdGVxKFBhcnRpYWxPcmRlcmluZyk7CiBjb25zdGV4cHIgYm9vbCBpc19n
dGVxKFBhcnRpYWxPcmRlcmluZyk7CiAKLXN0cnVjdCBUcmVlIHsgfTsKLXN0cnVjdCBTaGFkb3dJ
bmNsdWRpbmdUcmVlIHsgfTsKLXN0cnVjdCBDb21wb3NlZFRyZWUgeyB9OwotdGVtcGxhdGU8dHlw
ZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBDb250YWluZXJOb2RlKiBwYXJlbnQoY29uc3QgTm9kZSYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJl
ZU9yZGVyKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CitlbnVtIFRyZWVUeXBlIHsgVHJlZSwg
U2hhZG93SW5jbHVkaW5nVHJlZSwgQ29tcG9zZWRUcmVlIH07Cit0ZW1wbGF0ZTxUcmVlVHlwZSA9
IFRyZWU+IENvbnRhaW5lck5vZGUqIHBhcmVudChjb25zdCBOb2RlJik7Cit0ZW1wbGF0ZTxUcmVl
VHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgTm9kZSYsIGNvbnN0
IE5vZGUmKTsKIAorLy8gRklYTUU6IERwcmVjYXRlZCBiZWNhdXNlIHRoaXMgc2lsZW50bHkgZGVm
YXVsdHMgdG8gQ29tcG9zZWRUcmVlLiBVc2UgdHJlZU9yZGVyIGluc3RlYWQuCiBXRUJDT1JFX0VY
UE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9k
ZSYpOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IGIyZmU2MzAy
MmQzOWYxZjhhYjRkZTU1NzU2MzFjMWNjNmQ0YzdlMGMuLjhkMDliZWRhYTgwYjAyZDBlNjJkY2Vl
ODdmZGJjMmEzZTI3MWY3YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBA
IEV4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBjb250YWluZXIs
IHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0
dXJuIGNoZWNrUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OmlzUG9pbnRJblJhbmdlPFRyZWU+KG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIHsgY29u
dGFpbmVyLCBvZmZzZXQgfSk7CisgICAgcmV0dXJuIGNvbnRhaW5zPFRyZWU+KG1ha2VTaW1wbGVS
YW5nZSgqdGhpcyksIHsgY29udGFpbmVyLCBvZmZzZXQgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNo
b3J0PiBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggNDhiN2UxNmU3ZTZkYTIw
M2NkMWJmODBjNTZkMWExMWFmMjIxOTk2ZC4uNDM2Y2FmM2VjYjg0NWIxZDY4ZDcyYTk3MzYxMmRh
NmFmOWVmNjU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC05NSwyNiArOTUs
MjYgQEAgc3RhdGljIFBhcnRpYWxPcmRlcmluZyBvcmRlcih1bnNpZ25lZCBhLCB1bnNpZ25lZCBi
KQogICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFRyZWVUeXBlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmIGEsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGIpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0
cmVlVHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBh
LCBjb25zdCBCb3VuZGFyeVBvaW50JiBiKQogewogICAgIGlmIChhLmNvbnRhaW5lci5wdHIoKSA9
PSBiLmNvbnRhaW5lci5wdHIoKSkKICAgICAgICAgcmV0dXJuIG9yZGVyKGEub2Zmc2V0LCBiLm9m
ZnNldCk7CiAKICAgICBmb3IgKGF1dG8gYW5jZXN0b3IgPSBiLmNvbnRhaW5lci5wdHIoKTsgYW5j
ZXN0b3I7ICkgewotICAgICAgICBhdXRvIG5leHRBbmNlc3RvciA9IHBhcmVudDxUcmVlVHlwZT4o
KmFuY2VzdG9yKTsKKyAgICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBwYXJlbnQ8dHJlZVR5cGU+
KCphbmNlc3Rvcik7CiAgICAgICAgIGlmIChuZXh0QW5jZXN0b3IgPT0gYS5jb250YWluZXIucHRy
KCkpCiAgICAgICAgICAgICByZXR1cm4gaXNPZmZzZXRCZWZvcmVDaGlsZCgqbmV4dEFuY2VzdG9y
LCBhLm9mZnNldCwgKmFuY2VzdG9yKSA/IFBhcnRpYWxPcmRlcmluZzo6bGVzcyA6IFBhcnRpYWxP
cmRlcmluZzo6Z3JlYXRlcjsKICAgICAgICAgYW5jZXN0b3IgPSBuZXh0QW5jZXN0b3I7CiAgICAg
fQogCiAgICAgZm9yIChhdXRvIGFuY2VzdG9yID0gYS5jb250YWluZXIucHRyKCk7IGFuY2VzdG9y
OyApIHsKLSAgICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBwYXJlbnQ8VHJlZVR5cGU+KCphbmNl
c3Rvcik7CisgICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gcGFyZW50PHRyZWVUeXBlPigqYW5j
ZXN0b3IpOwogICAgICAgICBpZiAobmV4dEFuY2VzdG9yID09IGIuY29udGFpbmVyLnB0cigpKQog
ICAgICAgICAgICAgcmV0dXJuIGlzT2Zmc2V0QmVmb3JlQ2hpbGQoKm5leHRBbmNlc3RvciwgYi5v
ZmZzZXQsICphbmNlc3RvcikgPyBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXIgOiBQYXJ0aWFsT3Jk
ZXJpbmc6Omxlc3M7CiAgICAgICAgIGFuY2VzdG9yID0gbmV4dEFuY2VzdG9yOwogICAgIH0KIAot
ICAgIHJldHVybiB0cmVlT3JkZXI8VHJlZVR5cGU+KGEuY29udGFpbmVyLCBiLmNvbnRhaW5lcik7
CisgICAgcmV0dXJuIHRyZWVPcmRlcjx0cmVlVHlwZT4oYS5jb250YWluZXIsIGIuY29udGFpbmVy
KTsKIH0KIAogUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2lu
dCYgYSwgY29uc3QgQm91bmRhcnlQb2ludCYgYikKQEAgLTIxMiw0MiArMjEyLDM0IEBAIFJlZlB0
cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiAgICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5l
ciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBl
PiBib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91
bmRhcnlQb2ludCYgcG9pbnQpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBjb250
YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50
KQogewotICAgIHJldHVybiBpc19sdGVxKHRyZWVPcmRlcjxUcmVlVHlwZT4ocmFuZ2Uuc3RhcnQs
IHBvaW50KSkgJiYgaXNfbHRlcSh0cmVlT3JkZXI8VHJlZVR5cGU+KHBvaW50LCByYW5nZS5lbmQp
KTsKKyAgICByZXR1cm4gaXNfbHRlcSh0cmVlT3JkZXI8dHJlZVR5cGU+KHJhbmdlLnN0YXJ0LCBw
b2ludCkpICYmIGlzX2x0ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihwb2ludCwgcmFuZ2UuZW5kKSk7
CiB9CiAKLXRlbXBsYXRlIGJvb2wgaXNQb2ludEluUmFuZ2U8VHJlZT4oY29uc3QgU2ltcGxlUmFu
Z2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0ZSBib29sIGNvbnRhaW5zPFRyZWU+
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBwb2ludCkKK3RlbXBsYXRlPFRy
ZWVUeXBlIHRyZWVUeXBlPiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
Y29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mIHBvaW50KQogewotICAgIHJldHVybiBwb2lu
dCAmJiBpc1BvaW50SW5SYW5nZTxUcmVlVHlwZT4ocmFuZ2UsICpwb2ludCk7CisgICAgcmV0dXJu
IHBvaW50ICYmIGNvbnRhaW5zPHRyZWVUeXBlPihyYW5nZSwgKnBvaW50KTsKIH0KIAotYm9vbCBp
c1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9p
bnQmIHBvaW50KQotewotICAgIHJldHVybiBpc1BvaW50SW5SYW5nZTxDb21wb3NlZFRyZWU+KHJh
bmdlLCBwb2ludCk7Ci19Ci0KLWJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCi17Ci0gICAgcmV0
dXJuIGlzUG9pbnRJblJhbmdlPENvbXBvc2VkVHJlZT4ocmFuZ2UsIHBvaW50KTsKLX0KK3RlbXBs
YXRlIGJvb2wgY29udGFpbnM8Q29tcG9zZWRUcmVlPihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0
IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+Jik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBl
PiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29u
c3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gUGFy
dGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmIHBvaW50KQogewotICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPFRy
ZWVUeXBlPihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNfbHQob3JkZXIpKQorICAgIGlmIChhdXRv
IG9yZGVyID0gdHJlZU9yZGVyPHRyZWVUeXBlPihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNfbHQo
b3JkZXIpKQogICAgICAgICByZXR1cm4gb3JkZXI7Ci0gICAgaWYgKGF1dG8gb3JkZXIgPSB0cmVl
T3JkZXI8VHJlZVR5cGU+KHJhbmdlLmVuZCwgcG9pbnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgIGlm
IChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPHRyZWVUeXBlPihyYW5nZS5lbmQsIHBvaW50KTsgIWlz
X2d0KG9yZGVyKSkKICAgICAgICAgcmV0dXJuIG9yZGVyOwogICAgIHJldHVybiBQYXJ0aWFsT3Jk
ZXJpbmc6OmVxdWl2YWxlbnQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBQYXJ0
aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50LCBjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gUGFydGlhbE9y
ZGVyaW5nIHRyZWVPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPFRyZWVUeXBl
Pihwb2ludCwgcmFuZ2Uuc3RhcnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgIGlmIChhdXRvIG9yZGVy
ID0gdHJlZU9yZGVyPHRyZWVUeXBlPihwb2ludCwgcmFuZ2Uuc3RhcnQpOyAhaXNfZ3Qob3JkZXIp
KQogICAgICAgICByZXR1cm4gb3JkZXI7Ci0gICAgaWYgKGF1dG8gb3JkZXIgPSB0cmVlT3JkZXI8
VHJlZVR5cGU+KHBvaW50LCByYW5nZS5lbmQpOyAhaXNfbHQob3JkZXIpKQorICAgIGlmIChhdXRv
IG9yZGVyID0gdHJlZU9yZGVyPHRyZWVUeXBlPihwb2ludCwgcmFuZ2UuZW5kKTsgIWlzX2x0KG9y
ZGVyKSkKICAgICAgICAgcmV0dXJuIG9yZGVyOwogICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6
OmVxdWl2YWxlbnQ7CiB9CkBAIC0yNjUsMTQgKzI1NywyMSBAQCBQYXJ0aWFsT3JkZXJpbmcgZG9j
dW1lbnRPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbgogICAgIHJldHVybiB0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihwb2ludCwgcmFuZ2UpOwog
fQogCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1w
bGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpCit7Cisg
ICAgcmV0dXJuIGlzX2x0ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihvdXRlclJhbmdlLnN0YXJ0LCBp
bm5lclJhbmdlLnN0YXJ0KSkgJiYgaXNfZ3RlcSh0cmVlT3JkZXI8dHJlZVR5cGU+KG91dGVyUmFu
Z2UuZW5kLCBpbm5lclJhbmdlLmVuZCkpOworfQorCit0ZW1wbGF0ZSBib29sIGNvbnRhaW5zPFRy
ZWU+KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBjb250
YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlu
bmVyUmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdl
LnN0YXJ0LCBpbm5lclJhbmdlLnN0YXJ0KSkgJiYgaXNfZ3RlcShkb2N1bWVudE9yZGVyKG91dGVy
UmFuZ2UuZW5kLCBpbm5lclJhbmdlLmVuZCkpOworICAgIHJldHVybiBjb250YWluczxDb21wb3Nl
ZFRyZWU+KG91dGVyUmFuZ2UsIGlubmVyUmFuZ2UpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
cmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1w
bGVSYW5nZSYgYikKK3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBib29sIGludGVyc2VjdHMo
Y29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogewotICAgIHJldHVy
biBpc19sdGVxKHRyZWVPcmRlcjxUcmVlVHlwZT4oYS5zdGFydCwgYi5lbmQpKSAmJiBpc19sdGVx
KHRyZWVPcmRlcjxUcmVlVHlwZT4oYi5zdGFydCwgYS5lbmQpKTsKKyAgICByZXR1cm4gaXNfbHRl
cSh0cmVlT3JkZXI8dHJlZVR5cGU+KGEuc3RhcnQsIGIuZW5kKSkgJiYgaXNfbHRlcSh0cmVlT3Jk
ZXI8dHJlZVR5cGU+KGIuc3RhcnQsIGEuZW5kKSk7CiB9CiAKIHRlbXBsYXRlIGJvb2wgaW50ZXJz
ZWN0czxUcmVlPihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CkBAIC0z
MDAsMTUgKzI5OSwyMiBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gaW50ZXJzZWN0aW9uKGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgYSwgY29uc3QgT3B0aW9uYQogICAgIHJldHVybiB7IHsg
c3RkOjptYXgoYS0+c3RhcnQsIGItPnN0YXJ0LCBjb21wYXJlQnlEb2N1bWVudE9yZGVyKSwgc3Rk
OjptaW4oYS0+ZW5kLCBiLT5lbmQsIGNvbXBhcmVCeURvY3VtZW50T3JkZXIpIH0gfTsKIH0KIAot
Ym9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUp
Cit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGEgbW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtIHRoYXQgYXZvaWRzIGFsd2F5cyBjb21wdXRpbmcg
dGhlIG5vZGUgaW5kZXguCiAgICAgLy8gRklYTUU6IERvZXMgdGhpcyBjb25zdF9jYXN0IHBvaW50
IHRvIGEgZGVzaWduIHByb2JsZW0/CiAgICAgYXV0byBub2RlUmFuZ2UgPSBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlKGNvbnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpKTsKLSAgICByZXR1cm4gbm9kZVJhbmdl
ICYmIGNvbnRhaW5zKHJhbmdlLCAqbm9kZVJhbmdlKTsKKyAgICByZXR1cm4gbm9kZVJhbmdlICYm
IGNvbnRhaW5zPHRyZWVUeXBlPihyYW5nZSwgKm5vZGVSYW5nZSk7Cit9CisKK3RlbXBsYXRlIGJv
b2wgY29udGFpbnM8VHJlZT4oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKK2Jv
b2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQor
eworICAgIHJldHVybiBjb250YWluczxDb21wb3NlZFRyZWU+KHJhbmdlLCBub2RlKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgY29udGFpbnMoY29uc3QgTm9kZSYgb3V0
ZXIsIGNvbnN0IE5vZGUmIGlubmVyKTsKK3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBib29s
IGNvbnRhaW5zKGNvbnN0IE5vZGUmIG91dGVyLCBjb25zdCBOb2RlJiBpbm5lcik7CiAKIHRlbXBs
YXRlPD4gYm9vbCBjb250YWluczxUcmVlPihjb25zdCBOb2RlJiBvdXRlciwgY29uc3QgTm9kZSYg
aW5uZXIpCiB7CkBAIC0zMjEsMTUgKzMyNywxNCBAQCB0ZW1wbGF0ZTw+IGJvb2wgY29udGFpbnM8
Q29tcG9zZWRUcmVlPihjb25zdCBOb2RlJiBvdXRlciwgY29uc3QgTm9kZSYgaW5uZXIpCiAgICAg
cmV0dXJuIG91dGVyLmNvbnRhaW5zKGlubmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVHJl
ZVR5cGU+IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5v
ZGUmIG5vZGUpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKIHsKICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYWx3YXlz
IGNvbXB1dGluZyB0aGUgbm9kZSBpbmRleC4KICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvbnN0
X2Nhc3QgcG9pbnQgdG8gYSBkZXNpZ24gcHJvYmxlbT8KICAgICBhdXRvIG5vZGVSYW5nZSA9IG1h
a2VSYW5nZVNlbGVjdGluZ05vZGUoY29uc3RfY2FzdDxOb2RlJj4obm9kZSkpOwogICAgIGlmICgh
bm9kZVJhbmdlKQotICAgICAgICByZXR1cm4gY29udGFpbnM8VHJlZVR5cGU+KG5vZGUsIHJhbmdl
LnN0YXJ0LmNvbnRhaW5lcik7Ci0gICAgcmV0dXJuIGlzX2x0KHRyZWVPcmRlcjxUcmVlVHlwZT4o
bm9kZVJhbmdlLT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQodHJlZU9yZGVyPFRyZWVUeXBl
PihyYW5nZS5zdGFydCwgbm9kZVJhbmdlLT5lbmQpKTsKLQorICAgICAgICByZXR1cm4gY29udGFp
bnM8dHJlZVR5cGU+KG5vZGUsIHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIGlz
X2x0KHRyZWVPcmRlcjx0cmVlVHlwZT4obm9kZVJhbmdlLT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYg
aXNfbHQodHJlZU9yZGVyPHRyZWVUeXBlPihyYW5nZS5zdGFydCwgbm9kZVJhbmdlLT5lbmQpKTsK
IH0KIAogdGVtcGxhdGUgYm9vbCBpbnRlcnNlY3RzPFRyZWU+KGNvbnN0IFNpbXBsZVJhbmdlJiwg
Y29uc3QgTm9kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA0OTBjMGJlMzFjMWFh
Y2IzZjZiZjVjM2YyMTE3MWU2MmZiNGVjODRkLi4wMWIyMzBlNjI3ODE0OWNjOGZhYmUyMmRmNDQ0
Mzk2ZjhkMDI4NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNTcsMjIgKzU3LDM3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGF1dG8gbWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoVCYm
IGFyZ3VtZW50KSAtPiBkZWNsdHlwZShtYWtlCiAKIHRlbXBsYXRlPHR5cGVuYW1lIC4uLlQ+IGF1
dG8gbWFrZVNpbXBsZVJhbmdlKFQmJiAuLi5hcmd1bWVudHMpIC0+IGRlY2x0eXBlKG1ha2VTaW1w
bGVSYW5nZUhlbHBlcihtYWtlQm91bmRhcnlQb2ludEhlbHBlcihzdGQ6OmZvcndhcmQ8VD4oYXJn
dW1lbnRzKSkuLi4pKSB7IHJldHVybiBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIobWFrZUJvdW5kYXJ5
UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKTsgfQogCi0vLyBGSVhN
RTogV291bGQgbGlrZSB0aGVzZSB0byBoYXZlIHNob3J0ZXIgbmFtZXM7IGFub3RoZXIgb3B0aW9u
IGlzIHRvIGNoYW5nZSBwcmVmaXggdG8gbWFrZVNpbXBsZVJhbmdlLgorLy8gRklYTUU6IFdvdWxk
IGxpa2UgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byBoYXZlIHNob3J0ZXIgbmFtZXM7IGFub3RoZXIg
b3B0aW9uIGlzIHRvIGNoYW5nZSBwcmVmaXggdG8gbWFrZVNpbXBsZVJhbmdlLgogV0VCQ09SRV9F
WFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYp
OwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKE5vZGUmKTsKIAotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJik7Ci0KIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
aW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRy
ZWVUeXBlPiBib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91
bmRhcnlQb2ludCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaXNQb2ludElu
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYp
OwotV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKLWJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxl
UmFuZ2UmLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwordGVtcGxhdGU8VHJlZVR5
cGUgPSBUcmVlPiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRh
cnlQb2ludCYpOwordGVtcGxhdGU8VHJlZVR5cGUgPSBUcmVlPiBib29sIGNvbnRhaW5zKGNvbnN0
IFNpbXBsZVJhbmdlJiwgY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK3RlbXBsYXRl
PFRyZWVUeXBlPiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiBvdXRlclJhbmdlLCBj
b25zdCBTaW1wbGVSYW5nZSYgaW5uZXJSYW5nZSk7Cit0ZW1wbGF0ZTxUcmVlVHlwZT4gYm9vbCBj
b250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKKwordGVtcGxhdGU8VHJl
ZVR5cGU+IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJh
bmdlJik7Cit0ZW1wbGF0ZTxUcmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJh
bmdlJiwgY29uc3QgTm9kZSYpOworCisvLyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMg
aW4gcmFuZ2UuCit0ZW1wbGF0ZTxUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVl
T3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0
ZTxUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRh
cnlQb2ludCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKK3N0cnVjdCBPZmZzZXRSYW5nZSB7Cisg
ICAgdW5zaWduZWQgc3RhcnQgeyAwIH07CisgICAgdW5zaWduZWQgZW5kIHsgMCB9OworfTsKK09m
ZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNv
bnN0IE5vZGUmKTsKKworLy8gRklYTUU6IFN0YXJ0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZXBy
ZWNhdGVkIHNpbmNlIHRoZXkgc2lsZW50bHkgZGVmYXVsdCB0byBDb21wb3NlZFRyZWUuCiAKK1dF
QkNPUkVfRVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBT
aW1wbGVSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVS
YW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpOwogdGVtcGxh
dGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHMoY29u
c3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgYm9v
bCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwogV0VCQ09SRV9F
WFBPUlQgU2ltcGxlUmFuZ2UgdW5pb25SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNp
bXBsZVJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gaW50ZXJz
ZWN0aW9uKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYsIGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYpOwogCkBAIC04MCw5ICs5NSw2IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFp
bnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
cmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYp
OwogV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29u
c3QgTm9kZSYpOwogCi0vLyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2Uu
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVl
T3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29u
c3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBQ
YXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmKTsKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9y
ZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCkBAIC05Miwx
MSArMTA0LDcgQEAgSW50ZXJzZWN0aW5nTm9kZVJhbmdlIGludGVyc2VjdGluZ05vZGVzKGNvbnN0
IFNpbXBsZVJhbmdlJik7CiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2VXaXRoUXVpcms7CiBJ
bnRlcnNlY3RpbmdOb2RlUmFuZ2VXaXRoUXVpcmsgaW50ZXJzZWN0aW5nTm9kZXNXaXRoRGVwcmVj
YXRlZFplcm9PZmZzZXRTdGFydFF1aXJrKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLXN0cnVjdCBP
ZmZzZXRSYW5nZSB7Ci0gICAgdW5zaWduZWQgc3RhcnQgeyAwIH07Ci0gICAgdW5zaWduZWQgZW5k
IHsgMCB9OwotfTsKLU9mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKKy8vIEZJWE1FOiBFbmQgb2YgZnVuY3Rpb25zIHRo
YXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdGhleSBzaWxlbnRseSBkZWZhdWx0IHRvIENvbXBvc2Vk
VHJlZS4KIAogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRl
cmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgTm9kZT4gewogcHVibGljOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA3NzBkOGJmMDcwMDI3Y2U5
Y2Q1Y2FhNjQxMzNlOGM3YmExOWM1YmYyLi4wZGU3NTI4MDMwMGZiNTlkMzFiZWE0Nzg4ZDliZmZm
N2IwNTkzOTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApA
QCAtMTkwMiw3ICsxOTAyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAogICAgIGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5v
ZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBpc1Bv
aW50SW5SYW5nZSgqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGlubmVyTm9kZS0+cmVuZGVyZXIo
KS0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpLCBudWxscHRyKSkpOworICAg
IHJldHVybiBXZWJDb3JlOjpjb250YWluczxDb21wb3NlZFRyZWU+KCpyYW5nZSwgbWFrZUJvdW5k
YXJ5UG9pbnQoaW5uZXJOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KHJlc3VsdC5s
b2NhbFBvaW50KCksIG51bGxwdHIpKSk7CiB9CiAKIC8vIFdvcmthcm91bmQgZm9yIHRoZSBmYWN0
IHRoYXQgaXQncyBoYXJkIHRvIGRlbGV0ZSBhIGZyYW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggNTU4MjRmYTA4
MzZlMDMzYzc5MjY2MTZhNDc5NzExMjBlMzc0M2M5OS4uZWYxNmFkNTI4NjU1OWFjZjMzNjkwNjdi
ZTllZDM1M2I3Y2M1ZTRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBib29s
IHNlbGVjdGlvbkNvbnRhaW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlv
biwgY29uc3QgVmlzCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2Ug
JiYgaXNQb2ludEluUmFuZ2UoKnNlbGVjdGVkUmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0
aW9uKSk7CisgICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UgJiYgY29pbnRhaW5zPENvbXBvc2VkVHJl
ZT4oKnNlbGVjdGVkUmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSk7CiB9CiAKIE9w
dGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDBkZjdkOWI2MTA3Nzdj
NjRkZGE3NWFhMDI2MmY3NDkyYmEwMGE5MjEuLmZlYzcxZmE3YmViNThjOWI2ZWI1NmVjYzdjYjNk
MDAzMTUyODIyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTM5MSw3
ICszOTEsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkK
ICAgICB9CiAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFuZ2UpOwogICAg
IGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkgewotICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5l
ci0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSAmJiBpbnRlcnNlY3RzKCpzZWxlY3RlZFJhbmdlLCBy
YW5nZSkpCisgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250
YWluaW5nU2hhZG93Um9vdCgpICYmIGludGVyc2VjdHM8VHJlZT4oKnNlbGVjdGVkUmFuZ2UsIHJh
bmdlKSkKICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24odW5pb25SYW5nZSgqc2Vs
ZWN0ZWRSYW5nZSwgcmFuZ2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQzMyw3ICs0
MzMsNyBAQCBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wg
YWxsb3dQYXJ0aWFsKSBjb25zdAogICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSAmJiAhbm9kZS5k
b2N1bWVudCgpLnNldHRpbmdzKCkubGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKQogICAgICAg
ICBhbGxvd1BhcnRpYWwgPSB0cnVlOwogICAgIGF1dG8gcmFuZ2UgPSB0aGlzLT5yYW5nZSgpOwot
ICAgIHJldHVybiByYW5nZSAmJiAoYWxsb3dQYXJ0aWFsID8gaW50ZXJzZWN0cygqcmFuZ2UsIG5v
ZGUpIDogY29udGFpbnMoKnJhbmdlLCBub2RlKSk7CisgICAgcmV0dXJuIHJhbmdlICYmIChhbGxv
d1BhcnRpYWwgPyBpbnRlcnNlY3RzPFRyZWU+KCpyYW5nZSwgbm9kZSkgOiBjb250YWluczxUcmVl
PigqcmFuZ2UsIG5vZGUpKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gRE9NU2VsZWN0aW9uOjpz
ZWxlY3RBbGxDaGlsZHJlbihOb2RlJiBub2RlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNiNDM4ZjIwYjM5YTEwZDc3ZDcxMjk4NTI4MGY3MzVl
ZGQzYzgxMmEuLmIyMDVjYTdmNzYyZjQ0YzgyMjBkMmIwNDM1OWZkMzMyZDAzOGI5ZGYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAyMC0xMC0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUkVHUkVTU0lPTihyMjY2Mjk1KTogRE9NU2VsZWN0aW9uJ3MgYWRkUmFuZ2UgYW5kIGNvbnRh
aW5zTm9kZSBiZWhhdmVzIGluY29ycmVjdGx5IHdoZW4gc2VsZWN0aW9uIGNyb3NzZXMgc2hhZG93
IGJvdW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwOiBEaXNh
YmxlZCB0aGUgaXNQb2ludEluUmFuZ2UKKyAgICAgICAgdGVzdCBhbmQgYWRkZWQgY29tbWVudHMg
YWJvdXQgaG93IHdlIHdpbGwgcmVzdG9yZSBpdCBpbiB0aGUgZnV0dXJlLgorCiAyMDIwLTEwLTIy
ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0
cHldIFVzZSB3ZWJraXRjb3JlcHkncyBhdXRvaW5zdGFsbGVyIGZvciBjaHJvbWUgYW5kIGdlY2tv
IGRyaXZlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9E
b2N1bWVudE9yZGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1
bWVudE9yZGVyLmNwcAppbmRleCBmMWNkOWJiZjdiMWEzYjU1YzhhY2JhZWI4MDJjZjY3ZDg1ZWZh
OTg3Li42N2QxOTdiNWM0Y2E0ZjVjMjM4NDk4MGY4Y2JjODQyNjAxYTgzZGU4IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCkBA
IC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg+CiAKKy8vIEZJWE1FOiBFeHBv
c2UgdGhlIGZ1bmN0aW9ucyB0ZXN0ZWQgaGVyZSBpbiBXZWJLaXQgaW50ZXJuYWxzIG9iamVjdCwg
dGhlbiByZXBsYWNlIHRoaXMgdGVzdCB3aXRoIG9uZSB3cml0dGVuIGluIEphdmFTY3JpcHQuCisv
LyBGSVhNRTogV2hlbiBkb2luZyB0aGUgYWJvdmUsIGRvbid0IGZvcmdldCB0byByZW1vdmUgdGhl
IG1hbnkgV0VCQ09SRV9FWFBPUlQgdGhhdCB3ZXJlIGFkZGVkIHNvIHdlIGNvdWxkIGNvbXBpbGUg
YW5kIGxpbmsgdGhpcyB0ZXN0LgorCiAjZGVmaW5lIEVYUEVDVF9CT1RIKGEsIGIsIGZvcndhcmQs
IHJldmVyc2VkKSBkbyB7IEVYUEVDVF9TVFJFUShzdHJpbmcoZG9jdW1lbnRPcmRlcihhLCBiKSks
IGZvcndhcmQpOyBFWFBFQ1RfU1RSRVEoc3RyaW5nKGRvY3VtZW50T3JkZXIoYiwgYSkpLCByZXZl
cnNlZCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIEVYUEVDVF9FUVVJVkFMRU5UKGEsIGIpIEVYUEVD
VF9CT1RIKGEsIGIsICJlcXVpdmFsZW50IiwgImVxdWl2YWxlbnQiKQogI2RlZmluZSBFWFBFQ1Rf
TEVTUyhhLCBiKSBFWFBFQ1RfQk9USChhLCBiLCAibGVzcyIsICJncmVhdGVyIikKQEAgLTQ3Nyw2
ICs0ODAsMTAgQEAgVEVTVChEb2N1bWVudE9yZGVyLCBQb3NpdGlvbnMpCiAgICAgLy8gRklYTUU6
IEFkZCB0ZXN0cyB0aGF0IGNvdmVyIHNoYWRvdyB0cmVlcy4KIH0KIAorLy8gRGlzYWJsZWQgdGhp
cyB0ZXN0IHNpbmNlIGlzUG9pbnRJblJhbmdlIGlzIG5vdyBhIHRlbXBsYXRlIGZ1bmN0aW9uIG5h
bWVkIGNvbnRhaW5zLgorLy8gS2VlcGluZyB0aGUgY29kZSBhcm91bmQgdG8gdXNlIGFzIGEgcmVm
ZXJlbmNlIHdoZW4gcmV3cml0aW5nIGluIEphdmFTY3JpcHQKKyNpZiAwCisKIFRFU1QoRG9jdW1l
bnRPcmRlciwgSXNQb2ludEluUmFuZ2UpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURv
Y3VtZW50KCk7CkBAIC01MjYsNiArNTMzLDggQEAgVEVTVChEb2N1bWVudE9yZGVyLCBJc1BvaW50
SW5SYW5nZSkKICAgICAvLyBGSVhNRTogQWRkIHRlc3RzIHRoYXQgY292ZXIgc2hhZG93IHRyZWVz
LgogfQogCisjZW5kaWYKKwogVEVTVChEb2N1bWVudE9yZGVyLCBSYW5nZUNvbnRhaW5zUmFuZ2Up
CiB7CiAgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzEyYTFm
NDU1MDVjZmFhZGNmZGFkZDQwNWU3ZWJlYTIyNWJhZjQ0ZC4uZGY0OWRlN2Q3NDljNzRkMDQzYmMz
MDBmYTU3NGJlMzJjMzIwYzFkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTEwLTIyICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYy
OTUpOiBET01TZWxlY3Rpb24ncyBhZGRSYW5nZSBhbmQgY29udGFpbnNOb2RlIGJlaGF2ZXMgaW5j
b3JyZWN0bHkgd2hlbiBzZWxlY3Rpb24gY3Jvc3NlcyBzaGFkb3cgYm91bmRhcmllcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MDA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVj
dGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10cmVlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGVkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdGlvbnMtYWNyb3NzLXRyZWVzLmh0bWw6IEFkZGVk
LgorCiAyMDIwLTEwLTIyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFR3aXR0ZXIgUGhvdG8gZ2FsbGVyeSBpbmNvcnJlY3RseSByZW5kZXJlZCBhZnRl
ciBvcGVuaW5nIGFub3RoZXIgbW9kYWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL3NlbGVjdGlvbnMtYWNyb3NzLXRyZWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdGlvbnMtYWNyb3NzLXRyZWVzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NzEyYzZmMDc2N2M1OTBmNzRiODkwZWI1NDEyMjkxOTM4NmVjNTBiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0aW9u
cy1hY3Jvc3MtdHJlZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorUEFTUyBnZXRTZWxl
Y3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5ib2R5KTsgZ2V0U2VsZWN0aW9uKCku
Y29udGFpbnNOb2RlKHNoYWRvd05vZGUpIGlzIGZhbHNlCitQQVNTIGdldFNlbGVjdGlvbigpLnNl
bGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmJvZHkpOyBnZXRTZWxlY3Rpb24oKS5jb250YWluc05v
ZGUoc2hhZG93Tm9kZSwgdHJ1ZSkgaXMgZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10cmVlcy5odG1sIGIvTGF5b3V0VGVzdHMvZWRp
dGluZy9zZWxlY3Rpb24vc2VsZWN0aW9ucy1hY3Jvc3MtdHJlZXMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
MzI3ODM4Y2YwOGI4OWJiYTBjYTVmOWY2MGFlN2E2MjI5MTBiZWMzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0aW9ucy1hY3Jvc3MtdHJlZXMu
aHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsK
KyAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2Rl
OiAnY2xvc2VkJ30pOworICAgICAgICBzaGFkb3dSb290LnRleHRDb250ZW50ID0gJ2hlbGxvJzsK
KyAgICAgICAgY29uc3Qgc2hhZG93Tm9kZSA9IHNoYWRvd1Jvb3QuZmlyc3RDaGlsZDsKKworICAg
ICAgICBzaG91bGRCZUZhbHNlKCJnZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1
bWVudC5ib2R5KTsgZ2V0U2VsZWN0aW9uKCkuY29udGFpbnNOb2RlKHNoYWRvd05vZGUpIik7Cisg
ICAgICAgIHNob3VsZEJlRmFsc2UoImdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRv
Y3VtZW50LmJvZHkpOyBnZXRTZWxlY3Rpb24oKS5jb250YWluc05vZGUoc2hhZG93Tm9kZSwgdHJ1
ZSkiKTsKKworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNoYWRvd0hvc3QpOwor
CisgICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgPC9zY3JpcHQ+Cis8L2h0
bWw+Cg==
</data>
<flag name="commit-queue"
          id="428532"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412145</attachid>
            <date>2020-10-22 16:56:32 -0700</date>
            <delta_ts>2020-10-23 10:30:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218007-20201022165631.patch</filename>
            <type>text/plain</type>
            <size>33992</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZiNzRjZDAxNmNlYTdj
NWRjY2UzNDhhYmZkMGU5N2Q4NWU5YjJlOC4uNGE4ZGU2YmU1MDI5NmM3OTZkODRlZjczNTE0ZmU3
M2JlMDk1YzgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTEwLTIyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUp
OiBET01TZWxlY3Rpb24ncyBhZGRSYW5nZSBhbmQgY29udGFpbnNOb2RlIGJlaGF2ZSBpbmNvcnJl
Y3RseSB3aGVuIHNlbGVjdGlvbiBjcm9zc2VzIHNoYWRvdyBib3VuZGFyaWVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgwMDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVj
dGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10cmVlcy5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQpOiBVcGRhdGUgZm9yIHRoZSBu
ZXcgbmFtZSBvZgorICAgICAgICBpc1BvaW50SW5SYW5nZSwgY29udGFpbnM8Q29tcG9zZWRUcmVl
Pi4gV2UgY2FuIHJldHVybiBhbmQgY2hhbmdlIGl0IGZyb20gQ29tcG9zZWRUcmVlCisgICAgICAg
IHRvIHNvbWV0aGluZyBlbHNlIHNpbmNlIHRoYXQncyBsaWtlbHkgbm90IHRoZSB0cmVlIHdlIG5l
ZWQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNl
dFNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlIGNvbnN0KTog
RGl0dG8uCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwOgorICAgICAgICAoaXNXaGl0ZVNwYWNlQmV0d2VlblNlbnRlbmNlcyk6IERp
dHRvLgorCisgICAgICAgICogZG9tL0JvdW5kYXJ5UG9pbnQuaDogVXBkYXRlIHRvIHVzZSBUcmVl
VHlwZSBlbnVtZXJhdGlvbiBpbnN0ZWFkIG9mIGNsYXNzZXMuCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVwdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OnRyZWVPcmRlcik6IERpdHRvLgorICAgICAgICAqIGRvbS9Ob2RlLmg6IERpdHRvLgor
CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjppc1Bv
aW50SW5SYW5nZSk6IFVwZGF0ZWQgc2luY2Ugd2UgcmVuYW1lZCBpc1BvaW50SW5SYW5nZSB0byBi
ZQorICAgICAgICBhbiBvdmVybG9hZCBvZiBjb250YWlucy4KKworICAgICAgICAqIGRvbS9TaW1w
bGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBVcGRhdGUgdG8gdXNl
IFRyZWVUeXBlIGVudW1lcmF0aW9uIGluc3RlYWQgb2YgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbnRhaW5zKTogRGl0dG8uIEFsc28gcmVuYW1lZCBpc1BvaW50SW5SYW5nZSB0byBhbiBv
dmVybG9hZCBvZiBjb250YWlucy4KKyAgICAgICAgQWxzbyBhZGRlZCBjb252ZXJ0ZWQgdGhlIGNv
bnRhaW5zIHRoYXQgdGFrZXMgdHdvIHJhbmdlcyB0byBhIGZ1bmN0aW9uIHRlbXBsYXRlLgorICAg
ICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0cyk6IERpdHRvLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmg6IFJlb3JnYW5pemVkIHRoZSBmdW5jdGlvbnMgc28gYWxsIHRoZSBkZXByZWNhdGVk
IGZ1bmN0aW9ucworICAgICAgICB0aGF0IHNpbGVudGx5IHVzZSBDb21wb3NlZFRyZWUgYXJlIGdy
b3VwZWQgdG9nZXRoZXIuIFVwZGF0ZWQgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlcworICAgICAgICB0
byB1c2UgVHJlZVR5cGUgZW51bWVyYXRpb24gaW5zdGVhZCBvZiBjbGFzc2VzLiBBZGRlZCBhIGNv
dXBsZSBtb3JlIGZ1bmN0aW9uCisgICAgICAgIHRlbXBsYXRlcyB0aGF0IHdlIHVzZWQgdG8gZml4
IERPTVNlbGVjdGlvbi4KKyAKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6IFVwZGF0
ZSBmb3IgdGhlIG5ldyBuYW1lIG9mIHNQb2ludEluUmFuZ2UsCisgICAgICAgIGNvbnRhaW5zPENv
bXBvc2VkVHJlZT4uIFdlIGNhbiByZXR1cm4gYW5kIGNoYW5nZSBpdCBmcm9tIENvbXBvc2VkVHJl
ZSB0byBzb21ldGhpbmcKKyAgICAgICAgZWxzZSBzaW5jZSB0aGF0J3MgbGlrZWx5IG5vdCB0aGUg
dHJlZSB3ZSBuZWVkIGhlcmUuCisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkNvbnRhaW5zUG9zaXRpb24p
OiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVNlbGVjdGlvbjo6YWRkUmFuZ2UpOiBVc2UgaW50ZXJzZWN0czxUcmVlPiBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgdXNlIHRoZSBjb21wb3NlZCB0cmVlIGhlcmUu
CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6IFVz
ZSBpbnRlcnNlY3RzPFRyZWU+IGFuZCBjb250YWluczxUcmVlPi4KKyAgICAgICAgRXZhbnR1YWxs
eSA8VHJlZT4gd2lsbCBiZSB0aGUgZGVmYXVsdCBhbmQgd2UgY2FuIGNvbWUgYmFjayBoZXJlIGFu
ZCBlZGl0IGRvd24gdGhlc2UKKyAgICAgICAgY2FsbHMgZm9yIGJyZXZpdHksIGJ1dCBmaXJzdCB3
ZSBoYXZlIHRvIG1ha2UgYWxsIHRoZSB1c2VzIG9mIENvbXBvc2VkVHJlZSBleHBsaWNpdC4KKwog
MjAyMC0xMC0yMiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBUd2l0dGVyIFBob3RvIGdhbGxlcnkgaW5jb3JyZWN0bHkgcmVuZGVyZWQgYWZ0ZXIgb3Bl
bmluZyBhbm90aGVyIG1vZGFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggZGExZWVl
NDZiNDBhMzM3NzI5YTcyNzc5ZDc1ZDI4NWViMTc1ODliOC4uMGVmOWQwNmU2MTVmNjM1ZGE4ODg1
YTQ5ODNhYWNlZjU0YTJkNzRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIwLTEwLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUpOiBET01TZWxlY3Rpb24ncyBhZGRSYW5nZSBhbmQg
Y29udGFpbnNOb2RlIGJlaGF2ZSBpbmNvcnJlY3RseSB3aGVuIHNlbGVjdGlvbiBjcm9zc2VzIHNo
YWRvdyBib3VuZGFyaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTgwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEFjY2Vzc2libGVUZXh0SW1wbC5jcHA6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4
dDo6aXNJblJhbmdlKTogVXBkYXRlZCBzaW5jZSB3ZSByZW5hbWVkIGlzUG9pbnRJblJhbmdlIHRv
IGJlCisgICAgICAgIGFuIG92ZXJsb2FkIG9mIGNvbnRhaW5zLgorCiAyMDIwLTEwLTE5ICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmUgcmVtYWluaW5n
IFdlYiBBbmltYXRpb25zIHJ1bnRpbWUtZW5hYmxlZCBmZWF0dXJlcyB0byBzZXR0aW5ncwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKaW5kZXggZjg4NWNiMmQ3NmIyZjdmMTAwMzFmM2U3Njg3NDc2NmM1NzEz
NzY1Ny4uMzE3NWI2ZGFhZGIwYmMwN2VlZmFmZGIyNWFkMTFiZjkxYTRiODI3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCkBAIC05NjIsNyArOTYyLDcgQEAgSW50UG9pbnQgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQoKQogICAgIGlmIChhdXRvIHJhbmdlID0gZWxlbWVu
dFJhbmdlKCkpIHsKICAgICAgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbiB7IG1ha2VD
b250YWluZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+c3RhcnQpIH07CiAgICAgICAgIGF1dG8gZW5k
ID0gbmV4dFZpc2libGVQb3NpdGlvbihzdGFydCk7Ci0gICAgICAgIGlmIChpc1BvaW50SW5SYW5n
ZSgqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQorICAgICAgICBpZiAoY29udGFpbnM8
Q29tcG9zZWRUcmVlPigqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQogICAgICAgICAg
ICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoKm1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSku
Y2VudGVyKCkgfTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNr
UG9pbnQoKTsKQEAgLTE2OTMsMTAgKzE2OTMsMTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UK
ICAgICAgICAgYXV0byYgbm9kZSA9ICp0aGlzLT5ub2RlKCk7CiAgICAgICAgIGF1dG8gZWxlbWVu
dFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCk7CiAgICAgICAgIGF1dG8gc3RhcnQgPSB2aXNp
YmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3Iobm9kZSwgcmFuZ2Uuc3Rh
cnQpOwotICAgICAgICBpZiAoIWlzUG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0KSkpCisgICAgICAgIGlmICghY29udGFpbnM8Q29tcG9zZWRUcmVlPigq
ZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFydCkpKQogICAgICAgICAgICAgc3Rh
cnQgPSBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAg
ICAgICAgIGF1dG8gZW5kID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0
ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgaWYgKCFp
c1BvaW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChlbmQpKSkKKyAg
ICAgICAgaWYgKCFjb250YWluczxDb21wb3NlZFRyZWU+KCplbGVtZW50UmFuZ2UsIG1ha2VCb3Vu
ZGFyeVBvaW50KGVuZCkpKQogICAgICAgICAgICAgZW5kID0gbWFrZUNvbnRhaW5lck9mZnNldFBv
c2l0aW9uKGVsZW1lbnRSYW5nZS0+c3RhcnQpOwogICAgICAgICBtX3JlbmRlcmVyLT5mcmFtZSgp
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQpLCBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkp
OwogICAgIH0KQEAgLTIyNDcsNyArMjI0Nyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zCiAK
ICAgICAgICAgYXV0byBzdGFydCA9IHJhbmdlLnN0YXJ0OwogICAgICAgICBpZiAoYXV0byBlbGVt
ZW50UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKSkgewotICAgICAgICAgICAgaWYgKCFpc1Bv
aW50SW5SYW5nZSgqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFydCkpKQorICAg
ICAgICAgICAgaWYgKCFjb250YWluczxDb21wb3NlZFRyZWU+KCplbGVtZW50UmFuZ2UsIG1ha2VC
b3VuZGFyeVBvaW50KHN0YXJ0KSkpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBtYWtlQ29udGFp
bmVyT2Zmc2V0UG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmluZGV4IGUxMjZjY2NhNTdlMmY1MTJiOGZi
MTAzNjVmODhiMWRmOWE3MmYzZDEuLjQ3YTZhNGJmZmNhZGI0YTYwZTU5YzM1MGNjZjViM2ZlYWU5
MTk3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAgLTcwNCw3ICs3
MDQsNyBAQCBzdGF0aWMgYm9vbCBpc1doaXRlU3BhY2VCZXR3ZWVuU2VudGVuY2VzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1
dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7Ci0gICAgcmV0dXJuIHJhbmdl
ICYmIGlzUG9pbnRJblJhbmdlKCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pKTsK
KyAgICByZXR1cm4gcmFuZ2UgJiYgY29udGFpbnM8Q29tcG9zZWRUcmVlPigqcmFuZ2UsIG1ha2VC
b3VuZGFyeVBvaW50KHBvc2l0aW9uKSk7CiB9CiAKIHN0YXRpYyBWaXNpYmxlU2VsZWN0aW9uIHNl
bnRlbmNlQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Qq
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBBdGtUZXh0Qm91bmRhcnkgYm91bmRh
cnlUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKaW5kZXggNTNmNTRhODAxYWY2ZTQ2
Y2YxZGUzMTcwYWE2MzM5OTEzMmQ5NWYyOS4uNDAzYjU5NzIwNDBmYTA2NThlY2VkM2M1Zjk1NWI3
YWJkNGQ5ZTRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCkBAIC00MSw3ICs0MSw3
IEBAIHN0cnVjdCBCb3VuZGFyeVBvaW50IHsKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3VuZGFy
eVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJv
dW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFRyZWVUeXBlID0gVHJlZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBCb3VuZGFy
eVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwordGVtcGxhdGU8VHJlZVR5cGUgPSBUcmVl
PiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBC
b3VuZGFyeVBvaW50Jik7CiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRP
cmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogCiBXRUJD
T1JFX0VYUE9SVCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludEJlZm9y
ZU5vZGUoTm9kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGVjODY2MzNjMjYzYWZmNjRjMjU5MTdk
YjVlNTA1ZmRiOWM3MGI4MTcuLjM1Yjk5YjMwMzUxODNhNGNhNzUwNmNlY2NjNjk5N2ZjNTI4ODQ3
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI2MzIsMTEgKzI2MzIsMTEgQEAgdGVtcGxhdGU8PiBD
b250YWluZXJOb2RlKiBwYXJlbnQ8Q29tcG9zZWRUcmVlPihjb25zdCBOb2RlJiBub2RlKQogICAg
IHJldHVybiBub2RlLnBhcmVudEluQ29tcG9zZWRUcmVlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFRyZWVUeXBlPiBzaXplX3QgZGVwdGgoY29uc3QgTm9kZSYgbm9kZSkKK3RlbXBsYXRlPFRy
ZWVUeXBlIHRyZWVUeXBlPiBzaXplX3QgZGVwdGgoY29uc3QgTm9kZSYgbm9kZSkKIHsKICAgICBz
aXplX3QgZGVwdGggPSAwOwogICAgIGF1dG8gYW5jZXN0b3IgPSAmbm9kZTsKLSAgICB3aGlsZSAo
KGFuY2VzdG9yID0gcGFyZW50PFRyZWVUeXBlPigqYW5jZXN0b3IpKSkKKyAgICB3aGlsZSAoKGFu
Y2VzdG9yID0gcGFyZW50PHRyZWVUeXBlPigqYW5jZXN0b3IpKSkKICAgICAgICAgKytkZXB0aDsK
ICAgICByZXR1cm4gZGVwdGg7CiB9CkBAIC0yNjQ3LDcgKzI2NDcsNyBAQCBzdHJ1Y3QgQW5jZXN0
b3JBbmRDaGlsZHJlbiB7CiAgICAgY29uc3QgTm9kZSogZGlzdGluY3RBbmNlc3RvckI7CiB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25J
bmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIp
Cit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25J
bmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuKGNvbnN0IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIp
CiB7CiAgICAgLy8gVGhpcyBjaGVjayBpc24ndCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzLCBidXQg
aXQgaXMgY2hlYXAgYW5kIGxpa2VseSB0byBiZQogICAgIC8vIGNvbW1vbiBlbm91Z2ggdG8gYmUg
d29ydGggb3B0aW1pemluZyBzbyB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgdG8gdGhlIHJvb3QuCkBA
IC0yNjU2LDIxICsyNjU2LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBBbmNlc3Rv
ckFuZENoaWxkcmVuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyCiAgICAgLy8gRklY
TUU6IENvdWxkIG9wdGltaXplIGNhc2VzIHdoZXJlIG5vZGVzIGFyZSBib3RoIGluIHRoZSBzYW1l
IHNoYWRvdyB0cmVlLgogICAgIC8vIEZJWE1FOiBDb3VsZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSBu
b2RlcyBhcmUgaW4gZGlmZmVyZW50IGRvY3VtZW50cyB0byBxdWlja2x5IHJldHVybiBmYWxzZS4K
ICAgICAvLyBGSVhNRTogQ291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgb25lIG5vZGUgaXMgY29u
bmVjdGVkIGFuZCB0aGUgb3RoZXIgaXMgbm90IHRvIHF1aWNrbHkgcmV0dXJuIGZhbHNlLgotICAg
IGF1dG8gW2RlcHRoQSwgZGVwdGhCXSA9IHN0ZDo6bWFrZV90dXBsZShkZXB0aDxUcmVlVHlwZT4o
YSksIGRlcHRoPFRyZWVUeXBlPihiKSk7CisgICAgYXV0byBbZGVwdGhBLCBkZXB0aEJdID0gc3Rk
OjptYWtlX3R1cGxlKGRlcHRoPHRyZWVUeXBlPihhKSwgZGVwdGg8dHJlZVR5cGU+KGIpKTsKICAg
ICBhdXRvIFt4LCB5LCBkaWZmZXJlbmNlXSA9IGRlcHRoQSA+PSBkZXB0aEIKICAgICAgICAgPyBz
dGQ6Om1ha2VfdHVwbGUoJmEsICZiLCBkZXB0aEEgLSBkZXB0aEIpCiAgICAgICAgIDogc3RkOjpt
YWtlX3R1cGxlKCZiLCAmYSwgZGVwdGhCIC0gZGVwdGhBKTsKICAgICBkZWNsdHlwZSh4KSBkaXN0
aW5jdEFuY2VzdG9yQSA9IG51bGxwdHI7CiAgICAgZm9yIChkZWNsdHlwZShkaWZmZXJlbmNlKSBp
ID0gMDsgaSA8IGRpZmZlcmVuY2U7ICsraSkgewogICAgICAgICBkaXN0aW5jdEFuY2VzdG9yQSA9
IHg7Ci0gICAgICAgIHggPSBwYXJlbnQ8VHJlZVR5cGU+KCp4KTsKKyAgICAgICAgeCA9IHBhcmVu
dDx0cmVlVHlwZT4oKngpOwogICAgIH0KICAgICBkZWNsdHlwZSh5KSBkaXN0aW5jdEFuY2VzdG9y
QiA9IG51bGxwdHI7CiAgICAgd2hpbGUgKHggIT0geSkgewogICAgICAgICBkaXN0aW5jdEFuY2Vz
dG9yQSA9IHg7CiAgICAgICAgIGRpc3RpbmN0QW5jZXN0b3JCID0geTsKLSAgICAgICAgeCA9IHBh
cmVudDxUcmVlVHlwZT4oKngpOwotICAgICAgICB5ID0gcGFyZW50PFRyZWVUeXBlPigqeSk7Cisg
ICAgICAgIHggPSBwYXJlbnQ8dHJlZVR5cGU+KCp4KTsKKyAgICAgICAgeSA9IHBhcmVudDx0cmVl
VHlwZT4oKnkpOwogICAgIH0KICAgICBpZiAoZGVwdGhBIDwgZGVwdGhCKQogICAgICAgICBzdGQ6
OnN3YXAoZGlzdGluY3RBbmNlc3RvckEsIGRpc3RpbmN0QW5jZXN0b3JCKTsKQEAgLTI2OTUsMTEg
KzI2OTUsMTEgQEAgc3RhdGljIGJvb2wgaXNTaWJsaW5nU3Vic2VxdWVudChjb25zdCBOb2RlJiBz
aWJsaW5nQSwgY29uc3QgTm9kZSYgc2libGluZ0IpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25z
dCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQordGVtcGxhdGU8VHJlZVR5cGUgdHJlZVR5cGU+IFBh
cnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikKIHsK
ICAgICBpZiAoJmEgPT0gJmIpCiAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2
YWxlbnQ7Ci0gICAgYXV0byByZXN1bHQgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxk
cmVuPFRyZWVUeXBlPihhLCBiKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yQW5kQ2hpbGRyZW48dHJlZVR5cGU+KGEsIGIpOwogICAgIGlmICghcmVzdWx0LmNvbW1v
bkFuY2VzdG9yKQogICAgICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjp1bm9yZGVyZWQ7CiAg
ICAgaWYgKCFyZXN1bHQuZGlzdGluY3RBbmNlc3RvckEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA4NTQ1MWJh
Y2E2ZjY3YzhjODkxNTdlZWM1ZmJiOTA4NzE2N2UzZjJmLi5lZDQ0YjVlMWE4ZDcwMDQwYWMxYmE3
ZGYxYTYxZGQ5YWZiZjM4ZDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTc1NSwxMiArNzU1LDExIEBAIGNv
bnN0ZXhwciBib29sIGlzX25lcShQYXJ0aWFsT3JkZXJpbmcpOwogY29uc3RleHByIGJvb2wgaXNf
bHRlcShQYXJ0aWFsT3JkZXJpbmcpOwogY29uc3RleHByIGJvb2wgaXNfZ3RlcShQYXJ0aWFsT3Jk
ZXJpbmcpOwogCi1zdHJ1Y3QgVHJlZSB7IH07Ci1zdHJ1Y3QgU2hhZG93SW5jbHVkaW5nVHJlZSB7
IH07Ci1zdHJ1Y3QgQ29tcG9zZWRUcmVlIHsgfTsKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBl
ID0gVHJlZT4gQ29udGFpbmVyTm9kZSogcGFyZW50KGNvbnN0IE5vZGUmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFRyZWVUeXBlID0gVHJlZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBO
b2RlJiwgY29uc3QgTm9kZSYpOworZW51bSBUcmVlVHlwZSB7IFRyZWUsIFNoYWRvd0luY2x1ZGlu
Z1RyZWUsIENvbXBvc2VkVHJlZSB9OwordGVtcGxhdGU8VHJlZVR5cGUgPSBUcmVlPiBDb250YWlu
ZXJOb2RlKiBwYXJlbnQoY29uc3QgTm9kZSYpOwordGVtcGxhdGU8VHJlZVR5cGUgPSBUcmVlPiBQ
YXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CiAKKy8v
IEZJWE1FOiBEcHJlY2F0ZWQgYmVjYXVzZSB0aGlzIHNpbGVudGx5IGRlZmF1bHRzIHRvIENvbXBv
c2VkVHJlZS4gVXNlIHRyZWVPcmRlciBpbnN0ZWFkLgogV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9y
ZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIAogI2lmIEFT
U0VSVF9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCBiMmZlNjMwMjJkMzlmMWY4YWI0ZGU1
NTc1NjMxYzFjYzZkNGM3ZTBjLi44ZDA5YmVkYWE4MGIwMmQwZTYyZGNlZTg3ZmRiYzJhM2UyNzFm
N2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTE1NSw3ICsxNTUsNyBAQCBFeGNlcHRpb25Pcjxi
b29sPiBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZz
ZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBjaGVja1Jlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQotICAgIHJldHVybiBXZWJDb3JlOjppc1BvaW50
SW5SYW5nZTxUcmVlPihtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpLCB7IGNvbnRhaW5lciwgb2Zmc2V0
IH0pOworICAgIHJldHVybiBjb250YWluczxUcmVlPihtYWtlU2ltcGxlUmFuZ2UoKnRoaXMpLCB7
IGNvbnRhaW5lciwgb2Zmc2V0IH0pOwogfQogCiBFeGNlcHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNv
bXBhcmVQb2ludChOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDQ4YjdlMTZlN2U2ZGEyMDNjZDFiZjgwYzU2ZDFh
MTFhZjIyMTk5NmQuLjQzNmNhZjNlY2I4NDViMWQ2OGQ3MmE5NzM2MTJkYTZhZjllZjY1NTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtOTUsMjYgKzk1LDI2IEBAIHN0YXRpYyBQ
YXJ0aWFsT3JkZXJpbmcgb3JkZXIodW5zaWduZWQgYSwgdW5zaWduZWQgYikKICAgICByZXR1cm4g
UGFydGlhbE9yZGVyaW5nOjplcXVpdmFsZW50OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVl
VHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBhLCBj
b25zdCBCb3VuZGFyeVBvaW50JiBiKQordGVtcGxhdGU8VHJlZVR5cGUgdHJlZVR5cGU+IFBhcnRp
YWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgYSwgY29uc3QgQm91bmRh
cnlQb2ludCYgYikKIHsKICAgICBpZiAoYS5jb250YWluZXIucHRyKCkgPT0gYi5jb250YWluZXIu
cHRyKCkpCiAgICAgICAgIHJldHVybiBvcmRlcihhLm9mZnNldCwgYi5vZmZzZXQpOwogCiAgICAg
Zm9yIChhdXRvIGFuY2VzdG9yID0gYi5jb250YWluZXIucHRyKCk7IGFuY2VzdG9yOyApIHsKLSAg
ICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBwYXJlbnQ8VHJlZVR5cGU+KCphbmNlc3Rvcik7Cisg
ICAgICAgIGF1dG8gbmV4dEFuY2VzdG9yID0gcGFyZW50PHRyZWVUeXBlPigqYW5jZXN0b3IpOwog
ICAgICAgICBpZiAobmV4dEFuY2VzdG9yID09IGEuY29udGFpbmVyLnB0cigpKQogICAgICAgICAg
ICAgcmV0dXJuIGlzT2Zmc2V0QmVmb3JlQ2hpbGQoKm5leHRBbmNlc3RvciwgYS5vZmZzZXQsICph
bmNlc3RvcikgPyBQYXJ0aWFsT3JkZXJpbmc6Omxlc3MgOiBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0
ZXI7CiAgICAgICAgIGFuY2VzdG9yID0gbmV4dEFuY2VzdG9yOwogICAgIH0KIAogICAgIGZvciAo
YXV0byBhbmNlc3RvciA9IGEuY29udGFpbmVyLnB0cigpOyBhbmNlc3RvcjsgKSB7Ci0gICAgICAg
IGF1dG8gbmV4dEFuY2VzdG9yID0gcGFyZW50PFRyZWVUeXBlPigqYW5jZXN0b3IpOworICAgICAg
ICBhdXRvIG5leHRBbmNlc3RvciA9IHBhcmVudDx0cmVlVHlwZT4oKmFuY2VzdG9yKTsKICAgICAg
ICAgaWYgKG5leHRBbmNlc3RvciA9PSBiLmNvbnRhaW5lci5wdHIoKSkKICAgICAgICAgICAgIHJl
dHVybiBpc09mZnNldEJlZm9yZUNoaWxkKCpuZXh0QW5jZXN0b3IsIGIub2Zmc2V0LCAqYW5jZXN0
b3IpID8gUGFydGlhbE9yZGVyaW5nOjpncmVhdGVyIDogUGFydGlhbE9yZGVyaW5nOjpsZXNzOwog
ICAgICAgICBhbmNlc3RvciA9IG5leHRBbmNlc3RvcjsKICAgICB9CiAKLSAgICByZXR1cm4gdHJl
ZU9yZGVyPFRyZWVUeXBlPihhLmNvbnRhaW5lciwgYi5jb250YWluZXIpOworICAgIHJldHVybiB0
cmVlT3JkZXI8dHJlZVR5cGU+KGEuY29udGFpbmVyLCBiLmNvbnRhaW5lcik7CiB9CiAKIFBhcnRp
YWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmIGIpCkBAIC0yMTIsNDIgKzIxMiwzNCBAQCBSZWZQdHI8Tm9kZT4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBj
b21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5j
b250YWluZXIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBpc1BvaW50
SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBv
aW50KQordGVtcGxhdGU8VHJlZVR5cGUgdHJlZVR5cGU+IGJvb2wgY29udGFpbnMoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKIHsKLSAgICByZXR1
cm4gaXNfbHRlcSh0cmVlT3JkZXI8VHJlZVR5cGU+KHJhbmdlLnN0YXJ0LCBwb2ludCkpICYmIGlz
X2x0ZXEodHJlZU9yZGVyPFRyZWVUeXBlPihwb2ludCwgcmFuZ2UuZW5kKSk7CisgICAgcmV0dXJu
IGlzX2x0ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihyYW5nZS5zdGFydCwgcG9pbnQpKSAmJiBpc19s
dGVxKHRyZWVPcmRlcjx0cmVlVHlwZT4ocG9pbnQsIHJhbmdlLmVuZCkpOwogfQogCi10ZW1wbGF0
ZSBib29sIGlzUG9pbnRJblJhbmdlPFRyZWU+KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91
bmRhcnlQb2ludCYpOwordGVtcGxhdGUgYm9vbCBjb250YWluczxUcmVlPihjb25zdCBTaW1wbGVS
YW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5
cGU+IGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlw
ZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE9wdGlvbmFs
PEJvdW5kYXJ5UG9pbnQ+JiBwb2ludCkKIHsKLSAgICByZXR1cm4gcG9pbnQgJiYgaXNQb2ludElu
UmFuZ2U8VHJlZVR5cGU+KHJhbmdlLCAqcG9pbnQpOworICAgIHJldHVybiBwb2ludCAmJiBjb250
YWluczx0cmVlVHlwZT4ocmFuZ2UsICpwb2ludCk7CiB9CiAKLWJvb2wgaXNQb2ludEluUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKLXsK
LSAgICByZXR1cm4gaXNQb2ludEluUmFuZ2U8Q29tcG9zZWRUcmVlPihyYW5nZSwgcG9pbnQpOwot
fQotCi1ib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3Qg
T3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mIHBvaW50KQotewotICAgIHJldHVybiBpc1BvaW50SW5S
YW5nZTxDb21wb3NlZFRyZWU+KHJhbmdlLCBwb2ludCk7Ci19Cit0ZW1wbGF0ZSBib29sIGNvbnRh
aW5zPENvbXBvc2VkVHJlZT4oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBPcHRpb25hbDxCb3Vu
ZGFyeVBvaW50PiYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gUGFydGlhbE9yZGVy
aW5nIHRyZWVPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9p
bnQmIHBvaW50KQordGVtcGxhdGU8VHJlZVR5cGUgdHJlZVR5cGU+IFBhcnRpYWxPcmRlcmluZyB0
cmVlT3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBCb3VuZGFyeVBvaW50JiBw
b2ludCkKIHsKLSAgICBpZiAoYXV0byBvcmRlciA9IHRyZWVPcmRlcjxUcmVlVHlwZT4ocmFuZ2Uu
c3RhcnQsIHBvaW50KTsgIWlzX2x0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9IHRyZWVP
cmRlcjx0cmVlVHlwZT4ocmFuZ2Uuc3RhcnQsIHBvaW50KTsgIWlzX2x0KG9yZGVyKSkKICAgICAg
ICAgcmV0dXJuIG9yZGVyOwotICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPFRyZWVUeXBl
PihyYW5nZS5lbmQsIHBvaW50KTsgIWlzX2d0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9
IHRyZWVPcmRlcjx0cmVlVHlwZT4ocmFuZ2UuZW5kLCBwb2ludCk7ICFpc19ndChvcmRlcikpCiAg
ICAgICAgIHJldHVybiBvcmRlcjsKICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjplcXVpdmFs
ZW50OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gUGFydGlhbE9yZGVyaW5nIHRy
ZWVPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQordGVtcGxhdGU8VHJlZVR5cGUgdHJlZVR5cGU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3Jk
ZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
IHsKLSAgICBpZiAoYXV0byBvcmRlciA9IHRyZWVPcmRlcjxUcmVlVHlwZT4ocG9pbnQsIHJhbmdl
LnN0YXJ0KTsgIWlzX2d0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9IHRyZWVPcmRlcjx0
cmVlVHlwZT4ocG9pbnQsIHJhbmdlLnN0YXJ0KTsgIWlzX2d0KG9yZGVyKSkKICAgICAgICAgcmV0
dXJuIG9yZGVyOwotICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPFRyZWVUeXBlPihwb2lu
dCwgcmFuZ2UuZW5kKTsgIWlzX2x0KG9yZGVyKSkKKyAgICBpZiAoYXV0byBvcmRlciA9IHRyZWVP
cmRlcjx0cmVlVHlwZT4ocG9pbnQsIHJhbmdlLmVuZCk7ICFpc19sdChvcmRlcikpCiAgICAgICAg
IHJldHVybiBvcmRlcjsKICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjplcXVpdmFsZW50Owog
fQpAQCAtMjY1LDE0ICsyNTcsMjEgQEAgUGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29u
c3QgQm91bmRhcnlQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW4KICAgICByZXR1
cm4gdHJlZU9yZGVyPENvbXBvc2VkVHJlZT4ocG9pbnQsIHJhbmdlKTsKIH0KIAordGVtcGxhdGU8
VHJlZVR5cGUgdHJlZVR5cGU+IGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIG91dGVy
UmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKQoreworICAgIHJldHVybiBpc19s
dGVxKHRyZWVPcmRlcjx0cmVlVHlwZT4ob3V0ZXJSYW5nZS5zdGFydCwgaW5uZXJSYW5nZS5zdGFy
dCkpICYmIGlzX2d0ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihvdXRlclJhbmdlLmVuZCwgaW5uZXJS
YW5nZS5lbmQpKTsKK30KKwordGVtcGxhdGUgYm9vbCBjb250YWluczxUcmVlPihjb25zdCBTaW1w
bGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CisKIGJvb2wgY29udGFpbnMoY29uc3QgU2lt
cGxlUmFuZ2UmIG91dGVyUmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKQogewot
ICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIob3V0ZXJSYW5nZS5zdGFydCwgaW5uZXJS
YW5nZS5zdGFydCkpICYmIGlzX2d0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLmVuZCwgaW5u
ZXJSYW5nZS5lbmQpKTsKKyAgICByZXR1cm4gY29udGFpbnM8Q29tcG9zZWRUcmVlPihvdXRlclJh
bmdlLCBpbm5lclJhbmdlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wg
aW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIpCit0
ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJh
bmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKIHsKLSAgICByZXR1cm4gaXNfbHRlcSh0cmVl
T3JkZXI8VHJlZVR5cGU+KGEuc3RhcnQsIGIuZW5kKSkgJiYgaXNfbHRlcSh0cmVlT3JkZXI8VHJl
ZVR5cGU+KGIuc3RhcnQsIGEuZW5kKSk7CisgICAgcmV0dXJuIGlzX2x0ZXEodHJlZU9yZGVyPHRy
ZWVUeXBlPihhLnN0YXJ0LCBiLmVuZCkpICYmIGlzX2x0ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihi
LnN0YXJ0LCBhLmVuZCkpOwogfQogCiB0ZW1wbGF0ZSBib29sIGludGVyc2VjdHM8VHJlZT4oY29u
c3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwpAQCAtMzAwLDE1ICsyOTksMjIg
QEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGludGVyc2VjdGlvbihjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIGEsIGNvbnN0IE9wdGlvbmEKICAgICByZXR1cm4geyB7IHN0ZDo6bWF4KGEtPnN0
YXJ0LCBiLT5zdGFydCwgY29tcGFyZUJ5RG9jdW1lbnRPcmRlciksIHN0ZDo6bWluKGEtPmVuZCwg
Yi0+ZW5kLCBjb21wYXJlQnlEb2N1bWVudE9yZGVyKSB9IH07CiB9CiAKLWJvb2wgY29udGFpbnMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQordGVtcGxhdGU8VHJl
ZVR5cGUgdHJlZVR5cGU+IGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBj
b25zdCBOb2RlJiBub2RlKQogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciBhIG1vcmUgZWZmaWNp
ZW50IGFsZ29yaXRobSB0aGF0IGF2b2lkcyBhbHdheXMgY29tcHV0aW5nIHRoZSBub2RlIGluZGV4
LgogICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgY29uc3RfY2FzdCBwb2ludCB0byBhIGRlc2lnbiBw
cm9ibGVtPwogICAgIGF1dG8gbm9kZVJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShjb25z
dF9jYXN0PE5vZGUmPihub2RlKSk7Ci0gICAgcmV0dXJuIG5vZGVSYW5nZSAmJiBjb250YWlucyhy
YW5nZSwgKm5vZGVSYW5nZSk7CisgICAgcmV0dXJuIG5vZGVSYW5nZSAmJiBjb250YWluczx0cmVl
VHlwZT4ocmFuZ2UsICpub2RlUmFuZ2UpOworfQorCit0ZW1wbGF0ZSBib29sIGNvbnRhaW5zPFRy
ZWU+KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOworCitib29sIGNvbnRhaW5zKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4g
Y29udGFpbnM8Q29tcG9zZWRUcmVlPihyYW5nZSwgbm9kZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFRyZWVUeXBlPiBib29sIGNvbnRhaW5zKGNvbnN0IE5vZGUmIG91dGVyLCBjb25zdCBOb2Rl
JiBpbm5lcik7Cit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25z
dCBOb2RlJiBvdXRlciwgY29uc3QgTm9kZSYgaW5uZXIpOwogCiB0ZW1wbGF0ZTw+IGJvb2wgY29u
dGFpbnM8VHJlZT4oY29uc3QgTm9kZSYgb3V0ZXIsIGNvbnN0IE5vZGUmIGlubmVyKQogewpAQCAt
MzIxLDE1ICszMjcsMTQgQEAgdGVtcGxhdGU8PiBib29sIGNvbnRhaW5zPENvbXBvc2VkVHJlZT4o
Y29uc3QgTm9kZSYgb3V0ZXIsIGNvbnN0IE5vZGUmIGlubmVyKQogICAgIHJldHVybiBvdXRlci5j
b250YWlucyhpbm5lcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGlu
dGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQordGVt
cGxhdGU8VHJlZVR5cGUgdHJlZVR5cGU+IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIGEg
bW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtIHRoYXQgYXZvaWRzIGFsd2F5cyBjb21wdXRpbmcgdGhl
IG5vZGUgaW5kZXguCiAgICAgLy8gRklYTUU6IERvZXMgdGhpcyBjb25zdF9jYXN0IHBvaW50IHRv
IGEgZGVzaWduIHByb2JsZW0/CiAgICAgYXV0byBub2RlUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlKGNvbnN0X2Nhc3Q8Tm9kZSY+KG5vZGUpKTsKICAgICBpZiAoIW5vZGVSYW5nZSkKLSAg
ICAgICAgcmV0dXJuIGNvbnRhaW5zPFRyZWVUeXBlPihub2RlLCByYW5nZS5zdGFydC5jb250YWlu
ZXIpOwotICAgIHJldHVybiBpc19sdCh0cmVlT3JkZXI8VHJlZVR5cGU+KG5vZGVSYW5nZS0+c3Rh
cnQsIHJhbmdlLmVuZCkpICYmIGlzX2x0KHRyZWVPcmRlcjxUcmVlVHlwZT4ocmFuZ2Uuc3RhcnQs
IG5vZGVSYW5nZS0+ZW5kKSk7Ci0KKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zPHRyZWVUeXBlPihu
b2RlLCByYW5nZS5zdGFydC5jb250YWluZXIpOworICAgIHJldHVybiBpc19sdCh0cmVlT3JkZXI8
dHJlZVR5cGU+KG5vZGVSYW5nZS0+c3RhcnQsIHJhbmdlLmVuZCkpICYmIGlzX2x0KHRyZWVPcmRl
cjx0cmVlVHlwZT4ocmFuZ2Uuc3RhcnQsIG5vZGVSYW5nZS0+ZW5kKSk7CiB9CiAKIHRlbXBsYXRl
IGJvb2wgaW50ZXJzZWN0czxUcmVlPihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggNDkwYzBiZTMxYzFhYWNiM2Y2YmY1YzNmMjEx
NzFlNjJmYjRlYzg0ZC4uMDFiMjMwZTYyNzgxNDljYzhmYWJlMjJkZjQ0NDM5NmY4ZDAyODQ3NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTU3LDIyICs1NywzNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBhdXRvIG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVudCkgLT4g
ZGVjbHR5cGUobWFrZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVS
YW5nZShUJiYgLi4uYXJndW1lbnRzKSAtPiBkZWNsdHlwZShtYWtlU2ltcGxlUmFuZ2VIZWxwZXIo
bWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKSkg
eyByZXR1cm4gbWFrZVNpbXBsZVJhbmdlSGVscGVyKG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKHN0
ZDo6Zm9yd2FyZDxUPihhcmd1bWVudHMpKS4uLik7IH0KIAotLy8gRklYTUU6IFdvdWxkIGxpa2Ug
dGhlc2UgdG8gaGF2ZSBzaG9ydGVyIG5hbWVzOyBhbm90aGVyIG9wdGlvbiBpcyB0byBjaGFuZ2Ug
cHJlZml4IHRvIG1ha2VTaW1wbGVSYW5nZS4KKy8vIEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHR3
byBmdW5jdGlvbnMgdG8gaGF2ZSBzaG9ydGVyIG5hbWVzOyBhbm90aGVyIG9wdGlvbiBpcyB0byBj
aGFuZ2UgcHJlZml4IHRvIG1ha2VTaW1wbGVSYW5nZS4KIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQ
T1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAK
LVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25z
dCBTaW1wbGVSYW5nZSYpOwotCiBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBj
b25zdCBTaW1wbGVSYW5nZSYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBp
c1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKLVdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFy
eVBvaW50Jik7Ci1ib29sIGlzUG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
T3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK3RlbXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gYm9v
bCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK3Rl
bXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+Jik7Cit0ZW1wbGF0ZTxUcmVlVHlwZT4gYm9v
bCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFu
Z2UmIGlubmVyUmFuZ2UpOwordGVtcGxhdGU8VHJlZVR5cGU+IGJvb2wgY29udGFpbnMoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKK3RlbXBsYXRlPFRyZWVUeXBlPiBib29sIGlu
dGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwordGVtcGxh
dGU8VHJlZVR5cGU+IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5v
ZGUmKTsKKworLy8gUmV0dXJucyBlcXVpdmFsZW50IGlmIHBvaW50IGlzIGluIHJhbmdlLgordGVt
cGxhdGU8VHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwordGVtcGxhdGU8VHJlZVR5cGUgPSBU
cmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25z
dCBTaW1wbGVSYW5nZSYpOworCitzdHJ1Y3QgT2Zmc2V0UmFuZ2UgeworICAgIHVuc2lnbmVkIHN0
YXJ0IHsgMCB9OworICAgIHVuc2lnbmVkIGVuZCB7IDAgfTsKK307CitPZmZzZXRSYW5nZSBjaGFy
YWN0ZXJEYXRhT2Zmc2V0UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisK
Ky8vIEZJWE1FOiBTdGFydCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB0
aGV5IHNpbGVudGx5IGRlZmF1bHQgdG8gQ29tcG9zZWRUcmVlLgogCitXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsK
IFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxlUmFuZ2UmIG91dGVyUmFu
Z2UsIGNvbnN0IFNpbXBsZVJhbmdlJiBpbm5lclJhbmdlKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFRy
ZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVS
YW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaW50ZXJzZWN0cyhj
b25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJh
bmdlIHVuaW9uUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwog
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGludGVyc2VjdGlvbihjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKIApA
QCAtODAsOSArOTUsNiBAQCBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBs
ZVJhbmdlJiwgY29uc3QgTm9kZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wg
aW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKIAot
Ly8gUmV0dXJucyBlcXVpdmFsZW50IGlmIHBvaW50IGlzIGluIHJhbmdlLgotdGVtcGxhdGU8dHlw
ZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVHJl
ZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9p
bnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5n
IGRvY3VtZW50T3JkZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7
CiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBCb3Vu
ZGFyeVBvaW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIApAQCAtOTIsMTEgKzEwNCw3IEBAIElu
dGVyc2VjdGluZ05vZGVSYW5nZSBpbnRlcnNlY3RpbmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYp
OwogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJhbmdlV2l0aFF1aXJrOwogSW50ZXJzZWN0aW5nTm9k
ZVJhbmdlV2l0aFF1aXJrIGludGVyc2VjdGluZ05vZGVzV2l0aERlcHJlY2F0ZWRaZXJvT2Zmc2V0
U3RhcnRRdWlyayhjb25zdCBTaW1wbGVSYW5nZSYpOwogCi1zdHJ1Y3QgT2Zmc2V0UmFuZ2Ugewot
ICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OwotICAgIHVuc2lnbmVkIGVuZCB7IDAgfTsKLX07Ci1P
ZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBj
b25zdCBOb2RlJik7CisvLyBGSVhNRTogRW5kIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZXByZWNh
dGVkIHNpbmNlIHRoZXkgc2lsZW50bHkgZGVmYXVsdCB0byBDb21wb3NlZFRyZWUuCiAKIGNsYXNz
IEludGVyc2VjdGluZ05vZGVJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9y
d2FyZF9pdGVyYXRvcl90YWcsIE5vZGU+IHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNzcwZDhiZjA3MDAyN2NlOWNkNWNhYTY0MTMzZThj
N2JhMTljNWJmMi4uMGRlNzUyODAzMDBmYjU5ZDMxYmVhNDc4OGQ5YmZmZjdiMDU5Mzk0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTE5MDIsNyArMTkw
Miw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmNvbnRhaW5zKGNvbnN0IExheW91dFBvaW50JiBw
b2ludCkgY29uc3QKICAgICBpZiAoIWlubmVyTm9kZSB8fCAhaW5uZXJOb2RlLT5yZW5kZXJlcigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaXNQb2ludEluUmFuZ2UoKnJh
bmdlLCBtYWtlQm91bmRhcnlQb2ludChpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9y
UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cikpKTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6Y29udGFpbnM8Q29tcG9zZWRUcmVlPigqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGlubmVy
Tm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpLCBu
dWxscHRyKSkpOwogfQogCiAvLyBXb3JrYXJvdW5kIGZvciB0aGUgZmFjdCB0aGF0IGl0J3MgaGFy
ZCB0byBkZWxldGUgYSBmcmFtZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IDU1ODI0ZmEwODM2ZTAzM2M3OTI2NjE2
YTQ3OTcxMTIwZTM3NDNjOTkuLjhiMTIwODUzMTZlNmUwYzQ1NmFjYzAxMzAwNTk2NzRmYzQ1YmYy
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cExlZ2FjeS5tbQpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250
YWluc1Bvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZpcwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rp
b24uZmlyc3RSYW5nZSgpOwotICAgIHJldHVybiBzZWxlY3RlZFJhbmdlICYmIGlzUG9pbnRJblJh
bmdlKCpzZWxlY3RlZFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikpOworICAgIHJl
dHVybiBzZWxlY3RlZFJhbmdlICYmIGNvbnRhaW5zPENvbXBvc2VkVHJlZT4oKnNlbGVjdGVkUmFu
Z2UsIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSk7CiB9CiAKIE9wdGlvbmFsPHN0ZDo6dHVw
bGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VG
b3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDBkZjdkOWI2MTA3NzdjNjRkZGE3NWFhMDI2MmY3
NDkyYmEwMGE5MjEuLmZlYzcxZmE3YmViNThjOWI2ZWI1NmVjYzdjYjNkMDAzMTUyODIyNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lk
IERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkKICAgICB9CiAgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFuZ2UpOwogICAgIGlmIChhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewot
ICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1No
YWRvd1Jvb3QoKSAmJiBpbnRlcnNlY3RzKCpzZWxlY3RlZFJhbmdlLCByYW5nZSkpCisgICAgICAg
IGlmICghc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9v
dCgpICYmIGludGVyc2VjdHM8VHJlZT4oKnNlbGVjdGVkUmFuZ2UsIHJhbmdlKSkKICAgICAgICAg
ICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24odW5pb25SYW5nZSgqc2VsZWN0ZWRSYW5nZSwgcmFu
Z2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQzMyw3ICs0MzMsNyBAQCBib29sIERP
TVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBj
b25zdAogICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSAmJiAhbm9kZS5kb2N1bWVudCgpLnNldHRp
bmdzKCkubGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKQogICAgICAgICBhbGxvd1BhcnRpYWwg
PSB0cnVlOwogICAgIGF1dG8gcmFuZ2UgPSB0aGlzLT5yYW5nZSgpOwotICAgIHJldHVybiByYW5n
ZSAmJiAoYWxsb3dQYXJ0aWFsID8gaW50ZXJzZWN0cygqcmFuZ2UsIG5vZGUpIDogY29udGFpbnMo
KnJhbmdlLCBub2RlKSk7CisgICAgcmV0dXJuIHJhbmdlICYmIChhbGxvd1BhcnRpYWwgPyBpbnRl
cnNlY3RzPFRyZWU+KCpyYW5nZSwgbm9kZSkgOiBjb250YWluczxUcmVlPigqcmFuZ2UsIG5vZGUp
KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gRE9NU2VsZWN0aW9uOjpzZWxlY3RBbGxDaGlsZHJl
bihOb2RlJiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNz
aWJsZVRleHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0
SW1wbC5jcHAKaW5kZXggNWNlOGE2MTcxOWU2ZTE3OTlhOGU4YzA4YTIwZjZkMzhlOTVmNmYwNC4u
YTIxNjNmZDA5MmI0NTQzY2FhNWE1MjA5MWRiMGExMzMzMTFlYzY4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCkBAIC03NTYsNSArNzU2LDUg
QEAgSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6aW5pdGlhbENoZWNrKCkKIGJvb2wgQWNjZXNzaWJs
ZVRleHQ6OmlzSW5SYW5nZShWaXNpYmxlUG9zaXRpb24mIGN1cnJlbnQsIFZpc2libGVQb3NpdGlv
blJhbmdlJiB3b3JkUmFuZ2UpCiB7CiAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSh3
b3JkUmFuZ2UpOwotICAgIHJldHVybiByYW5nZSAmJiBpc1BvaW50SW5SYW5nZSgqcmFuZ2UsIG1h
a2VCb3VuZGFyeVBvaW50KGN1cnJlbnQpKTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgY29udGFpbnM8
Q29tcG9zZWRUcmVlPigqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGN1cnJlbnQpKTsKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzYjQzOGYy
MGIzOWExMGQ3N2Q3MTI5ODUyODBmNzM1ZWRkM2M4MTJhLi5iZWE5Y2E5MjczMGU4NGU2NTg0ZGNm
MmRkNTc3NWRhODlkZDY2ZWJmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMTAtMjIgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04ocjI2NjI5NSk6IERPTVNlbGVj
dGlvbidzIGFkZFJhbmdlIGFuZCBjb250YWluc05vZGUgYmVoYXZlIGluY29ycmVjdGx5IHdoZW4g
c2VsZWN0aW9uIGNyb3NzZXMgc2hhZG93IGJvdW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODAwNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0RvY3VtZW50T3JkZXIuY3BwOiBEaXNhYmxlZCB0aGUgaXNQb2ludEluUmFuZ2UKKyAgICAgICAg
dGVzdCBhbmQgYWRkZWQgY29tbWVudHMgYWJvdXQgaG93IHdlIHdpbGwgcmVzdG9yZSBpdCBpbiB0
aGUgZnV0dXJlLgorCiAyMDIwLTEwLTIyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxl
LmNvbT4KIAogICAgICAgICBbd2Via2l0cHldIFVzZSB3ZWJraXRjb3JlcHkncyBhdXRvaW5zdGFs
bGVyIGZvciBjaHJvbWUgYW5kIGdlY2tvIGRyaXZlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcAppbmRleCBmMWNkOWJiZjdiMWEz
YjU1YzhhY2JhZWI4MDJjZjY3ZDg1ZWZhOTg3Li42N2QxOTdiNWM0Y2E0ZjVjMjM4NDk4MGY4Y2Jj
ODQyNjAxYTgzZGU4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvRG9jdW1lbnRPcmRlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0RvY3VtZW50T3JkZXIuY3BwCkBAIC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmg+CiAKKy8vIEZJWE1FOiBFeHBvc2UgdGhlIGZ1bmN0aW9ucyB0ZXN0ZWQgaGVyZSBpbiBX
ZWJLaXQgaW50ZXJuYWxzIG9iamVjdCwgdGhlbiByZXBsYWNlIHRoaXMgdGVzdCB3aXRoIG9uZSB3
cml0dGVuIGluIEphdmFTY3JpcHQuCisvLyBGSVhNRTogV2hlbiBkb2luZyB0aGUgYWJvdmUsIGRv
bid0IGZvcmdldCB0byByZW1vdmUgdGhlIG1hbnkgV0VCQ09SRV9FWFBPUlQgdGhhdCB3ZXJlIGFk
ZGVkIHNvIHdlIGNvdWxkIGNvbXBpbGUgYW5kIGxpbmsgdGhpcyB0ZXN0LgorCiAjZGVmaW5lIEVY
UEVDVF9CT1RIKGEsIGIsIGZvcndhcmQsIHJldmVyc2VkKSBkbyB7IEVYUEVDVF9TVFJFUShzdHJp
bmcoZG9jdW1lbnRPcmRlcihhLCBiKSksIGZvcndhcmQpOyBFWFBFQ1RfU1RSRVEoc3RyaW5nKGRv
Y3VtZW50T3JkZXIoYiwgYSkpLCByZXZlcnNlZCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIEVYUEVD
VF9FUVVJVkFMRU5UKGEsIGIpIEVYUEVDVF9CT1RIKGEsIGIsICJlcXVpdmFsZW50IiwgImVxdWl2
YWxlbnQiKQogI2RlZmluZSBFWFBFQ1RfTEVTUyhhLCBiKSBFWFBFQ1RfQk9USChhLCBiLCAibGVz
cyIsICJncmVhdGVyIikKQEAgLTQ3Nyw2ICs0ODAsMTAgQEAgVEVTVChEb2N1bWVudE9yZGVyLCBQ
b3NpdGlvbnMpCiAgICAgLy8gRklYTUU6IEFkZCB0ZXN0cyB0aGF0IGNvdmVyIHNoYWRvdyB0cmVl
cy4KIH0KIAorLy8gRGlzYWJsZWQgdGhpcyB0ZXN0IHNpbmNlIGlzUG9pbnRJblJhbmdlIGlzIG5v
dyBhIHRlbXBsYXRlIGZ1bmN0aW9uIG5hbWVkIGNvbnRhaW5zLgorLy8gS2VlcGluZyB0aGUgY29k
ZSBhcm91bmQgdG8gdXNlIGFzIGEgcmVmZXJlbmNlIHdoZW4gcmV3cml0aW5nIGluIEphdmFTY3Jp
cHQKKyNpZiAwCisKIFRFU1QoRG9jdW1lbnRPcmRlciwgSXNQb2ludEluUmFuZ2UpCiB7CiAgICAg
YXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CkBAIC01MjYsNiArNTMzLDggQEAgVEVT
VChEb2N1bWVudE9yZGVyLCBJc1BvaW50SW5SYW5nZSkKICAgICAvLyBGSVhNRTogQWRkIHRlc3Rz
IHRoYXQgY292ZXIgc2hhZG93IHRyZWVzLgogfQogCisjZW5kaWYKKwogVEVTVChEb2N1bWVudE9y
ZGVyLCBSYW5nZUNvbnRhaW5zUmFuZ2UpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURv
Y3VtZW50KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYzEyYTFmNDU1MDVjZmFhZGNmZGFkZDQwNWU3ZWJlYTIyNWJhZjQ0
ZC4uZGY0OWRlN2Q3NDljNzRkMDQzYmMzMDBmYTU3NGJlMzJjMzIwYzFkZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDIwLTEwLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUpOiBET01TZWxlY3Rpb24ncyBhZGRSYW5nZSBhbmQg
Y29udGFpbnNOb2RlIGJlaGF2ZXMgaW5jb3JyZWN0bHkgd2hlbiBzZWxlY3Rpb24gY3Jvc3NlcyBz
aGFkb3cgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE4MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10cmVlcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdGlvbnMt
YWNyb3NzLXRyZWVzLmh0bWw6IEFkZGVkLgorCiAyMDIwLTEwLTIyICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFR3aXR0ZXIgUGhvdG8gZ2FsbGVyeSBp
bmNvcnJlY3RseSByZW5kZXJlZCBhZnRlciBvcGVuaW5nIGFub3RoZXIgbW9kYWwKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdGlvbnMtYWNyb3NzLXRyZWVz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdGlvbnMt
YWNyb3NzLXRyZWVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzEyYzZmMDc2N2M1OTBmNzRi
ODkwZWI1NDEyMjkxOTM4NmVjNTBiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRp
dGluZy9zZWxlY3Rpb24vc2VsZWN0aW9ucy1hY3Jvc3MtdHJlZXMtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsNiBAQAorUEFTUyBnZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVu
dC5ib2R5KTsgZ2V0U2VsZWN0aW9uKCkuY29udGFpbnNOb2RlKHNoYWRvd05vZGUpIGlzIGZhbHNl
CitQQVNTIGdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmJvZHkpOyBn
ZXRTZWxlY3Rpb24oKS5jb250YWluc05vZGUoc2hhZG93Tm9kZSwgdHJ1ZSkgaXMgZmFsc2UKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10cmVl
cy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0aW9ucy1hY3Jvc3Mt
dHJlZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZWJhYWM0MTE3NjFmNzc0Y2RlYzU3NWMwOTcyOTk4ZWM4
YzYyMmMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
c2VsZWN0aW9ucy1hY3Jvc3MtdHJlZXMuaHRtbApAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxzY3JpcHQ+CisgICAg
ICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRv
d0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pOworICAgICAgICBzaGFkb3dIb3N0
LmlubmVySFRNTCA9ICc8Yj5oZWxsbzwvYj48YiBzbG90PSJzZWNvbmQiPndvcmxkPC9iPic7Cisg
ICAgICAgIHNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxzcGFuPjxzbG90Pjwvc2xvdD4gPHNsb3Qg
bmFtZT0ic2Vjb25kIj48L3Nsb3Q+PC9zcGFuPic7CisgICAgICAgIGNvbnN0IHNoYWRvd05vZGUg
PSBzaGFkb3dSb290LmZpcnN0Q2hpbGQ7CisgICAgICAgIGNvbnN0IG5vZGVJblNsb3QgPSBkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCdiW3Nsb3Q9c2Vjb25kXScpLmZpcnN0Q2hpbGQ7CisKKyAgICAg
ICAgZnVuY3Rpb24gc2VsZWN0aW9uQWRkUmFuZ2Uoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0
LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
cmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICAgICAgcmFuZ2Uuc2V0U3Rh
cnQoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHJhbmdlLnNldEVu
ZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgICAgICAgICBnZXRTZWxlY3Rpb24oKS5h
ZGRSYW5nZShyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBzaG91bGRCZSgiZ2V0U2VsZWN0
aW9uKCkuc2V0QmFzZUFuZEV4dGVudChkb2N1bWVudC5ib2R5LCAwLCBub2RlSW5TbG90LCA1KTsg
c2VsZWN0aW9uQWRkUmFuZ2Uoc2hhZG93Tm9kZSwgMCwgc2hhZG93Um9vdCwgMSk7IGdldFNlbGVj
dGlvbigpLmZvY3VzTm9kZSIsICJub2RlSW5TbG90Iik7CisKKyAgICAgICAgc2hvdWxkQmVGYWxz
ZSgiZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuYm9keSk7IGdldFNl
bGVjdGlvbigpLmNvbnRhaW5zTm9kZShzaGFkb3dOb2RlKSIpOworICAgICAgICBzaG91bGRCZUZh
bHNlKCJnZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5ib2R5KTsgZ2V0
U2VsZWN0aW9uKCkuY29udGFpbnNOb2RlKHNoYWRvd05vZGUsIHRydWUpIik7CisKKyAgICAgICAg
Z2V0U2VsZWN0aW9uKCkuZW1wdHkoKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls
ZChzaGFkb3dIb3N0KTsKKworICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAg
IDwvc2NyaXB0PgorPC9odG1sPgo=
</data>
<flag name="commit-queue"
          id="428537"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412185</attachid>
            <date>2020-10-23 09:08:33 -0700</date>
            <delta_ts>2020-10-23 10:35:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218007-20201023090832.patch</filename>
            <type>text/plain</type>
            <size>34166</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4OTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTA1MDdlODNmNmI4MDFk
OTVhMzJhYmY5NTM2YjNjZGNlMjZjOGQ3MC4uNGRjZTRkYzEyODBjM2E5ZDRlYjA4ZGQ1ZjA5NDY3
NzgzMWI5YWRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTEwLTIyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUp
OiBET01TZWxlY3Rpb24ncyBhZGRSYW5nZSBhbmQgY29udGFpbnNOb2RlIGJlaGF2ZSBpbmNvcnJl
Y3RseSB3aGVuIHNlbGVjdGlvbiBjcm9zc2VzIHNoYWRvdyBib3VuZGFyaWVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgwMDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NlbGVj
dGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10cmVlcy5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQpOiBVcGRhdGUgZm9yIHRoZSBu
ZXcgbmFtZSBvZgorICAgICAgICBpc1BvaW50SW5SYW5nZSwgY29udGFpbnM8Q29tcG9zZWRUcmVl
Pi4gV2UgY2FuIHJldHVybiBhbmQgY2hhbmdlIGl0IGZyb20gQ29tcG9zZWRUcmVlCisgICAgICAg
IHRvIHNvbWV0aGluZyBlbHNlIHNpbmNlIHRoYXQncyBsaWtlbHkgbm90IHRoZSB0cmVlIHdlIG5l
ZWQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNl
dFNlbGVjdGVkVGV4dFJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlIGNvbnN0KTog
RGl0dG8uCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwOgorICAgICAgICAoaXNXaGl0ZVNwYWNlQmV0d2VlblNlbnRlbmNlcyk6IERp
dHRvLgorCisgICAgICAgICogZG9tL0JvdW5kYXJ5UG9pbnQuaDogVXBkYXRlIHRvIHVzZSBUcmVl
VHlwZSBlbnVtZXJhdGlvbiBpbnN0ZWFkIG9mIGNsYXNzZXMuCisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVwdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OnRyZWVPcmRlcik6IERpdHRvLgorICAgICAgICAqIGRvbS9Ob2RlLmg6IERpdHRvLgor
CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjppc1Bv
aW50SW5SYW5nZSk6IFVwZGF0ZWQgc2luY2Ugd2UgcmVuYW1lZCBpc1BvaW50SW5SYW5nZSB0byBi
ZQorICAgICAgICBhbiBvdmVybG9hZCBvZiBjb250YWlucy4KKworICAgICAgICAqIGRvbS9TaW1w
bGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmVlT3JkZXIpOiBVcGRhdGUgdG8gdXNl
IFRyZWVUeXBlIGVudW1lcmF0aW9uIGluc3RlYWQgb2YgY2xhc3Nlcy4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbnRhaW5zKTogRGl0dG8uIEFsc28gcmVuYW1lZCBpc1BvaW50SW5SYW5nZSB0byBhbiBv
dmVybG9hZCBvZiBjb250YWlucy4KKyAgICAgICAgQWxzbyBhZGRlZCBjb252ZXJ0ZWQgdGhlIGNv
bnRhaW5zIHRoYXQgdGFrZXMgdHdvIHJhbmdlcyB0byBhIGZ1bmN0aW9uIHRlbXBsYXRlLgorICAg
ICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0cyk6IERpdHRvLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmg6IFJlb3JnYW5pemVkIHRoZSBmdW5jdGlvbnMgc28gYWxsIHRoZSBkZXByZWNhdGVk
IGZ1bmN0aW9ucworICAgICAgICB0aGF0IHNpbGVudGx5IHVzZSBDb21wb3NlZFRyZWUgYXJlIGdy
b3VwZWQgdG9nZXRoZXIuIFVwZGF0ZWQgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlcworICAgICAgICB0
byB1c2UgVHJlZVR5cGUgZW51bWVyYXRpb24gaW5zdGVhZCBvZiBjbGFzc2VzLiBBZGRlZCBhIGNv
dXBsZSBtb3JlIGZ1bmN0aW9uCisgICAgICAgIHRlbXBsYXRlcyB0aGF0IHdlIHVzZWQgdG8gZml4
IERPTVNlbGVjdGlvbi4KKyAKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjb250YWlucyBjb25zdCk6IFVwZGF0
ZSBmb3IgdGhlIG5ldyBuYW1lIG9mIHNQb2ludEluUmFuZ2UsCisgICAgICAgIGNvbnRhaW5zPENv
bXBvc2VkVHJlZT4uIFdlIGNhbiByZXR1cm4gYW5kIGNoYW5nZSBpdCBmcm9tIENvbXBvc2VkVHJl
ZSB0byBzb21ldGhpbmcKKyAgICAgICAgZWxzZSBzaW5jZSB0aGF0J3MgbGlrZWx5IG5vdCB0aGUg
dHJlZSB3ZSBuZWVkIGhlcmUuCisgICAgICAgICogZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkNvbnRhaW5zUG9zaXRpb24p
OiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVNlbGVjdGlvbjo6YWRkUmFuZ2UpOiBVc2UgaW50ZXJzZWN0czxUcmVlPiBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgdXNlIHRoZSBjb21wb3NlZCB0cmVlIGhlcmUu
CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZSBjb25zdCk6IFVz
ZSBpbnRlcnNlY3RzPFRyZWU+IGFuZCBjb250YWluczxUcmVlPi4KKyAgICAgICAgRXZhbnR1YWxs
eSA8VHJlZT4gd2lsbCBiZSB0aGUgZGVmYXVsdCBhbmQgd2UgY2FuIGNvbWUgYmFjayBoZXJlIGFu
ZCBlZGl0IGRvd24gdGhlc2UKKyAgICAgICAgY2FsbHMgZm9yIGJyZXZpdHksIGJ1dCBmaXJzdCB3
ZSBoYXZlIHRvIG1ha2UgYWxsIHRoZSB1c2VzIG9mIENvbXBvc2VkVHJlZSBleHBsaWNpdC4KKwog
MjAyMC0xMC0yMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtM
RkNdW0lGQ10gQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgdmVydGljYWwtYWxpZ246IDxsZW5ndGg+
IGFuZCA8cGVyY2VudGFnZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCBkYTFlZWU0
NmI0MGEzMzc3MjlhNzI3NzlkNzVkMjg1ZWIxNzU4OWI4Li4wZWY5ZDA2ZTYxNWY2MzVkYTg4ODVh
NDk4M2FhY2VmNTRhMmQ3NGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMjAtMTAtMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJFR1JFU1NJT04ocjI2NjI5NSk6IERPTVNlbGVjdGlvbidzIGFkZFJhbmdlIGFuZCBj
b250YWluc05vZGUgYmVoYXZlIGluY29ycmVjdGx5IHdoZW4gc2VsZWN0aW9uIGNyb3NzZXMgc2hh
ZG93IGJvdW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxODAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQWNjZXNzaWJsZVRleHRJbXBsLmNwcDoKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0
Ojppc0luUmFuZ2UpOiBVcGRhdGVkIHNpbmNlIHdlIHJlbmFtZWQgaXNQb2ludEluUmFuZ2UgdG8g
YmUKKyAgICAgICAgYW4gb3ZlcmxvYWQgb2YgY29udGFpbnMuCisKIDIwMjAtMTAtMTkgIEFudG9p
bmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSByZW1haW5pbmcg
V2ViIEFuaW1hdGlvbnMgcnVudGltZS1lbmFibGVkIGZlYXR1cmVzIHRvIHNldHRpbmdzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAppbmRleCBmODg1Y2IyZDc2YjJmN2YxMDAzMWYzZTc2ODc0NzY2YzU3MTM3
NjU3Li4zMTc1YjZkYWFkYjBiYzA3ZWVmYWZkYjI1YWQxMWJmOTFhNGI4MjcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKQEAgLTk2Miw3ICs5NjIsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpsaW5rQ2xpY2tQb2ludCgpCiAgICAgaWYgKGF1dG8gcmFuZ2UgPSBlbGVtZW50
UmFuZ2UoKSkgewogICAgICAgICBhdXRvIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uIHsgbWFrZUNv
bnRhaW5lck9mZnNldFBvc2l0aW9uKHJhbmdlLT5zdGFydCkgfTsKICAgICAgICAgYXV0byBlbmQg
PSBuZXh0VmlzaWJsZVBvc2l0aW9uKHN0YXJ0KTsKLSAgICAgICAgaWYgKGlzUG9pbnRJblJhbmdl
KCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSkpCisgICAgICAgIGlmIChjb250YWluczxD
b21wb3NlZFRyZWU+KCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSkpCiAgICAgICAgICAg
ICByZXR1cm4geyBib3VuZHNGb3JSYW5nZSgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpKS5j
ZW50ZXIoKSB9OwogICAgIH0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQ
b2ludCgpOwpAQCAtMTY5MywxMCArMTY5MywxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQog
ICAgICAgICBhdXRvJiBub2RlID0gKnRoaXMtPm5vZGUoKTsKICAgICAgICAgYXV0byBlbGVtZW50
UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKTsKICAgICAgICAgYXV0byBzdGFydCA9IHZpc2li
bGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcihub2RlLCByYW5nZS5zdGFy
dCk7Ci0gICAgICAgIGlmICghaXNQb2ludEluUmFuZ2UoKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5k
YXJ5UG9pbnQoc3RhcnQpKSkKKyAgICAgICAgaWYgKCFjb250YWluczxDb21wb3NlZFRyZWU+KCpl
bGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSkpCiAgICAgICAgICAgICBzdGFy
dCA9IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAg
ICAgICAgYXV0byBlbmQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRl
cmF0b3Iobm9kZSwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwotICAgICAgICBpZiAoIWlz
UG9pbnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGVuZCkpKQorICAg
ICAgICBpZiAoIWNvbnRhaW5zPENvbXBvc2VkVHJlZT4oKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kKSkpCiAgICAgICAgICAgICBlbmQgPSBtYWtlQ29udGFpbmVyT2Zmc2V0UG9z
aXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAgICAgICAgIG1fcmVuZGVyZXItPmZyYW1lKCku
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCksIEZy
YW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7
CiAgICAgfQpAQCAtMjI0Nyw3ICsyMjQ3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3MKIAog
ICAgICAgICBhdXRvIHN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgIGlmIChhdXRvIGVsZW1l
bnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzUG9p
bnRJblJhbmdlKCplbGVtZW50UmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSkpCisgICAg
ICAgICAgICBpZiAoIWNvbnRhaW5zPENvbXBvc2VkVHJlZT4oKmVsZW1lbnRSYW5nZSwgbWFrZUJv
dW5kYXJ5UG9pbnQoc3RhcnQpKSkKICAgICAgICAgICAgICAgICBzdGFydCA9IG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggZTEyNmNjY2E1N2UyZjUxMmI4ZmIx
MDM2NWY4OGIxZGY5YTcyZjNkMS4uNDdhNmE0YmZmY2FkYjRhNjBlNTljMzUwY2NmNWIzZmVhZTkx
OTc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNzA0LDcgKzcw
NCw3IEBAIHN0YXRpYyBib29sIGlzV2hpdGVTcGFjZUJldHdlZW5TZW50ZW5jZXMoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKLSAgICByZXR1cm4gcmFuZ2Ug
JiYgaXNQb2ludEluUmFuZ2UoKnJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikpOwor
ICAgIHJldHVybiByYW5nZSAmJiBjb250YWluczxDb21wb3NlZFRyZWU+KCpyYW5nZSwgbWFrZUJv
dW5kYXJ5UG9pbnQocG9zaXRpb24pKTsKIH0KIAogc3RhdGljIFZpc2libGVTZWxlY3Rpb24gc2Vu
dGVuY2VBdFBvc2l0aW9uRm9yQXRrQm91bmRhcnkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCos
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEF0a1RleHRCb3VuZGFyeSBib3VuZGFy
eVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaAppbmRleCA1M2Y1NGE4MDFhZjZlNDZj
ZjFkZTMxNzBhYTYzMzk5MTMyZDk1ZjI5Li40MDNiNTk3MjA0MGZhMDY1OGVjZWQzYzVmOTU1Yjdh
YmQ0ZDllNGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKQEAgLTQxLDcgKzQxLDcg
QEAgc3RydWN0IEJvdW5kYXJ5UG9pbnQgewogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJvdW5kYXJ5
UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CiBib29sIG9wZXJhdG9yIT0oY29uc3QgQm91
bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5kYXJ5
UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0ZTxUcmVlVHlwZSA9IFRyZWU+
IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmKTsKIFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9y
ZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CiAKIFdFQkNP
UkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50QmVmb3Jl
Tm9kZShOb2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggZWM4NjYzM2MyNjNhZmY2NGMyNTkxN2Ri
NWU1MDVmZGI5YzcwYjgxNy4uMzViOTliMzAzNTE4M2E0Y2E3NTA2Y2VjY2M2OTk3ZmM1Mjg4NDc5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjYzMiwxMSArMjYzMiwxMSBAQCB0ZW1wbGF0ZTw+IENv
bnRhaW5lck5vZGUqIHBhcmVudDxDb21wb3NlZFRyZWU+KGNvbnN0IE5vZGUmIG5vZGUpCiAgICAg
cmV0dXJuIG5vZGUucGFyZW50SW5Db21wb3NlZFRyZWUoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVHJlZVR5cGU+IHNpemVfdCBkZXB0aChjb25zdCBOb2RlJiBub2RlKQordGVtcGxhdGU8VHJl
ZVR5cGUgdHJlZVR5cGU+IHNpemVfdCBkZXB0aChjb25zdCBOb2RlJiBub2RlKQogewogICAgIHNp
emVfdCBkZXB0aCA9IDA7CiAgICAgYXV0byBhbmNlc3RvciA9ICZub2RlOwotICAgIHdoaWxlICgo
YW5jZXN0b3IgPSBwYXJlbnQ8VHJlZVR5cGU+KCphbmNlc3RvcikpKQorICAgIHdoaWxlICgoYW5j
ZXN0b3IgPSBwYXJlbnQ8dHJlZVR5cGU+KCphbmNlc3RvcikpKQogICAgICAgICArK2RlcHRoOwog
ICAgIHJldHVybiBkZXB0aDsKIH0KQEAgLTI2NDcsNyArMjY0Nyw3IEBAIHN0cnVjdCBBbmNlc3Rv
ckFuZENoaWxkcmVuIHsKICAgICBjb25zdCBOb2RlKiBkaXN0aW5jdEFuY2VzdG9yQjsKIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBBbmNlc3RvckFuZENoaWxkcmVuIGNvbW1vbklu
Y2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4oY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikK
K3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBBbmNlc3RvckFuZENoaWxkcmVuIGNvbW1vbklu
Y2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRyZW4oY29uc3QgTm9kZSYgYSwgY29uc3QgTm9kZSYgYikK
IHsKICAgICAvLyBUaGlzIGNoZWNrIGlzbid0IG5lZWRlZCBmb3IgY29ycmVjdG5lc3MsIGJ1dCBp
dCBpcyBjaGVhcCBhbmQgbGlrZWx5IHRvIGJlCiAgICAgLy8gY29tbW9uIGVub3VnaCB0byBiZSB3
b3J0aCBvcHRpbWl6aW5nIHNvIHdlIGRvbid0IGhhdmUgdG8gd2FsayB0byB0aGUgcm9vdC4KQEAg
LTI2NTYsMjEgKzI2NTYsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IEFuY2VzdG9y
QW5kQ2hpbGRyZW4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3JBbmRDaGlsZHIKICAgICAvLyBGSVhN
RTogQ291bGQgb3B0aW1pemUgY2FzZXMgd2hlcmUgbm9kZXMgYXJlIGJvdGggaW4gdGhlIHNhbWUg
c2hhZG93IHRyZWUuCiAgICAgLy8gRklYTUU6IENvdWxkIG9wdGltaXplIGNhc2VzIHdoZXJlIG5v
ZGVzIGFyZSBpbiBkaWZmZXJlbnQgZG9jdW1lbnRzIHRvIHF1aWNrbHkgcmV0dXJuIGZhbHNlLgog
ICAgIC8vIEZJWE1FOiBDb3VsZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSBvbmUgbm9kZSBpcyBjb25u
ZWN0ZWQgYW5kIHRoZSBvdGhlciBpcyBub3QgdG8gcXVpY2tseSByZXR1cm4gZmFsc2UuCi0gICAg
YXV0byBbZGVwdGhBLCBkZXB0aEJdID0gc3RkOjptYWtlX3R1cGxlKGRlcHRoPFRyZWVUeXBlPihh
KSwgZGVwdGg8VHJlZVR5cGU+KGIpKTsKKyAgICBhdXRvIFtkZXB0aEEsIGRlcHRoQl0gPSBzdGQ6
Om1ha2VfdHVwbGUoZGVwdGg8dHJlZVR5cGU+KGEpLCBkZXB0aDx0cmVlVHlwZT4oYikpOwogICAg
IGF1dG8gW3gsIHksIGRpZmZlcmVuY2VdID0gZGVwdGhBID49IGRlcHRoQgogICAgICAgICA/IHN0
ZDo6bWFrZV90dXBsZSgmYSwgJmIsIGRlcHRoQSAtIGRlcHRoQikKICAgICAgICAgOiBzdGQ6Om1h
a2VfdHVwbGUoJmIsICZhLCBkZXB0aEIgLSBkZXB0aEEpOwogICAgIGRlY2x0eXBlKHgpIGRpc3Rp
bmN0QW5jZXN0b3JBID0gbnVsbHB0cjsKICAgICBmb3IgKGRlY2x0eXBlKGRpZmZlcmVuY2UpIGkg
PSAwOyBpIDwgZGlmZmVyZW5jZTsgKytpKSB7CiAgICAgICAgIGRpc3RpbmN0QW5jZXN0b3JBID0g
eDsKLSAgICAgICAgeCA9IHBhcmVudDxUcmVlVHlwZT4oKngpOworICAgICAgICB4ID0gcGFyZW50
PHRyZWVUeXBlPigqeCk7CiAgICAgfQogICAgIGRlY2x0eXBlKHkpIGRpc3RpbmN0QW5jZXN0b3JC
ID0gbnVsbHB0cjsKICAgICB3aGlsZSAoeCAhPSB5KSB7CiAgICAgICAgIGRpc3RpbmN0QW5jZXN0
b3JBID0geDsKICAgICAgICAgZGlzdGluY3RBbmNlc3RvckIgPSB5OwotICAgICAgICB4ID0gcGFy
ZW50PFRyZWVUeXBlPigqeCk7Ci0gICAgICAgIHkgPSBwYXJlbnQ8VHJlZVR5cGU+KCp5KTsKKyAg
ICAgICAgeCA9IHBhcmVudDx0cmVlVHlwZT4oKngpOworICAgICAgICB5ID0gcGFyZW50PHRyZWVU
eXBlPigqeSk7CiAgICAgfQogICAgIGlmIChkZXB0aEEgPCBkZXB0aEIpCiAgICAgICAgIHN0ZDo6
c3dhcChkaXN0aW5jdEFuY2VzdG9yQSwgZGlzdGluY3RBbmNlc3RvckIpOwpAQCAtMjY5NSwxMSAr
MjY5NSwxMSBAQCBzdGF0aWMgYm9vbCBpc1NpYmxpbmdTdWJzZXF1ZW50KGNvbnN0IE5vZGUmIHNp
YmxpbmdBLCBjb25zdCBOb2RlJiBzaWJsaW5nQikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0
IE5vZGUmIGEsIGNvbnN0IE5vZGUmIGIpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gUGFy
dGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBOb2RlJiBhLCBjb25zdCBOb2RlJiBiKQogewog
ICAgIGlmICgmYSA9PSAmYikKICAgICAgICAgcmV0dXJuIFBhcnRpYWxPcmRlcmluZzo6ZXF1aXZh
bGVudDsKLSAgICBhdXRvIHJlc3VsdCA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yQW5kQ2hpbGRy
ZW48VHJlZVR5cGU+KGEsIGIpOworICAgIGF1dG8gcmVzdWx0ID0gY29tbW9uSW5jbHVzaXZlQW5j
ZXN0b3JBbmRDaGlsZHJlbjx0cmVlVHlwZT4oYSwgYik7CiAgICAgaWYgKCFyZXN1bHQuY29tbW9u
QW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OnVub3JkZXJlZDsKICAg
ICBpZiAoIXJlc3VsdC5kaXN0aW5jdEFuY2VzdG9yQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDg1NDUxYmFj
YTZmNjdjOGM4OTE1N2VlYzVmYmI5MDg3MTY3ZTNmMmYuLmVkNDRiNWUxYThkNzAwNDBhYzFiYTdk
ZjFhNjFkZDlhZmJmMzhkNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNzU1LDEyICs3NTUsMTEgQEAgY29u
c3RleHByIGJvb2wgaXNfbmVxKFBhcnRpYWxPcmRlcmluZyk7CiBjb25zdGV4cHIgYm9vbCBpc19s
dGVxKFBhcnRpYWxPcmRlcmluZyk7CiBjb25zdGV4cHIgYm9vbCBpc19ndGVxKFBhcnRpYWxPcmRl
cmluZyk7CiAKLXN0cnVjdCBUcmVlIHsgfTsKLXN0cnVjdCBTaGFkb3dJbmNsdWRpbmdUcmVlIHsg
fTsKLXN0cnVjdCBDb21wb3NlZFRyZWUgeyB9OwotdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGUg
PSBUcmVlPiBDb250YWluZXJOb2RlKiBwYXJlbnQoY29uc3QgTm9kZSYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVHJlZVR5cGUgPSBUcmVlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IE5v
ZGUmLCBjb25zdCBOb2RlJik7CitlbnVtIFRyZWVUeXBlIHsgVHJlZSwgU2hhZG93SW5jbHVkaW5n
VHJlZSwgQ29tcG9zZWRUcmVlIH07Cit0ZW1wbGF0ZTxUcmVlVHlwZSA9IFRyZWU+IENvbnRhaW5l
ck5vZGUqIHBhcmVudChjb25zdCBOb2RlJik7Cit0ZW1wbGF0ZTxUcmVlVHlwZSA9IFRyZWU+IFBh
cnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIAorLy8g
RklYTUU6IERwcmVjYXRlZCBiZWNhdXNlIHRoaXMgc2lsZW50bHkgZGVmYXVsdHMgdG8gQ29tcG9z
ZWRUcmVlLiBVc2UgdHJlZU9yZGVyIGluc3RlYWQuCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3Jk
ZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCiAjaWYgQVNT
RVJUX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IGIyZmU2MzAyMmQzOWYxZjhhYjRkZTU1
NzU2MzFjMWNjNmQ0YzdlMGMuLjhkMDliZWRhYTgwYjAyZDBlNjJkY2VlODdmZGJjMmEzZTI3MWY3
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIEV4Y2VwdGlvbk9yPGJv
b2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNl
dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGNoZWNrUmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmlzUG9pbnRJ
blJhbmdlPFRyZWU+KG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIHsgY29udGFpbmVyLCBvZmZzZXQg
fSk7CisgICAgcmV0dXJuIGNvbnRhaW5zPFRyZWU+KG1ha2VTaW1wbGVSYW5nZSgqdGhpcyksIHsg
Y29udGFpbmVyLCBvZmZzZXQgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29t
cGFyZVBvaW50KE5vZGUmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggNDhiN2UxNmU3ZTZkYTIwM2NkMWJmODBjNTZkMWEx
MWFmMjIxOTk2ZC4uNDM2Y2FmM2VjYjg0NWIxZDY4ZDcyYTk3MzYxMmRhNmFmOWVmNjU1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC05NSwyNiArOTUsMjYgQEAgc3RhdGljIFBh
cnRpYWxPcmRlcmluZyBvcmRlcih1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQogICAgIHJldHVybiBQ
YXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVU
eXBlPiBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNv
bnN0IEJvdW5kYXJ5UG9pbnQmIGIpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gUGFydGlh
bE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBhLCBjb25zdCBCb3VuZGFy
eVBvaW50JiBiKQogewogICAgIGlmIChhLmNvbnRhaW5lci5wdHIoKSA9PSBiLmNvbnRhaW5lci5w
dHIoKSkKICAgICAgICAgcmV0dXJuIG9yZGVyKGEub2Zmc2V0LCBiLm9mZnNldCk7CiAKICAgICBm
b3IgKGF1dG8gYW5jZXN0b3IgPSBiLmNvbnRhaW5lci5wdHIoKTsgYW5jZXN0b3I7ICkgewotICAg
ICAgICBhdXRvIG5leHRBbmNlc3RvciA9IHBhcmVudDxUcmVlVHlwZT4oKmFuY2VzdG9yKTsKKyAg
ICAgICAgYXV0byBuZXh0QW5jZXN0b3IgPSBwYXJlbnQ8dHJlZVR5cGU+KCphbmNlc3Rvcik7CiAg
ICAgICAgIGlmIChuZXh0QW5jZXN0b3IgPT0gYS5jb250YWluZXIucHRyKCkpCiAgICAgICAgICAg
ICByZXR1cm4gaXNPZmZzZXRCZWZvcmVDaGlsZCgqbmV4dEFuY2VzdG9yLCBhLm9mZnNldCwgKmFu
Y2VzdG9yKSA/IFBhcnRpYWxPcmRlcmluZzo6bGVzcyA6IFBhcnRpYWxPcmRlcmluZzo6Z3JlYXRl
cjsKICAgICAgICAgYW5jZXN0b3IgPSBuZXh0QW5jZXN0b3I7CiAgICAgfQogCiAgICAgZm9yIChh
dXRvIGFuY2VzdG9yID0gYS5jb250YWluZXIucHRyKCk7IGFuY2VzdG9yOyApIHsKLSAgICAgICAg
YXV0byBuZXh0QW5jZXN0b3IgPSBwYXJlbnQ8VHJlZVR5cGU+KCphbmNlc3Rvcik7CisgICAgICAg
IGF1dG8gbmV4dEFuY2VzdG9yID0gcGFyZW50PHRyZWVUeXBlPigqYW5jZXN0b3IpOwogICAgICAg
ICBpZiAobmV4dEFuY2VzdG9yID09IGIuY29udGFpbmVyLnB0cigpKQogICAgICAgICAgICAgcmV0
dXJuIGlzT2Zmc2V0QmVmb3JlQ2hpbGQoKm5leHRBbmNlc3RvciwgYi5vZmZzZXQsICphbmNlc3Rv
cikgPyBQYXJ0aWFsT3JkZXJpbmc6OmdyZWF0ZXIgOiBQYXJ0aWFsT3JkZXJpbmc6Omxlc3M7CiAg
ICAgICAgIGFuY2VzdG9yID0gbmV4dEFuY2VzdG9yOwogICAgIH0KIAotICAgIHJldHVybiB0cmVl
T3JkZXI8VHJlZVR5cGU+KGEuY29udGFpbmVyLCBiLmNvbnRhaW5lcik7CisgICAgcmV0dXJuIHRy
ZWVPcmRlcjx0cmVlVHlwZT4oYS5jb250YWluZXIsIGIuY29udGFpbmVyKTsKIH0KIAogUGFydGlh
bE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYgYSwgY29uc3QgQm91
bmRhcnlQb2ludCYgYikKQEAgLTIxMiw0MiArMjEyLDM0IEBAIFJlZlB0cjxOb2RlPiBjb21tb25J
bmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJuIGNv
bW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNv
bnRhaW5lcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGlzUG9pbnRJ
blJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQb2ludCYgcG9p
bnQpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQogewotICAgIHJldHVy
biBpc19sdGVxKHRyZWVPcmRlcjxUcmVlVHlwZT4ocmFuZ2Uuc3RhcnQsIHBvaW50KSkgJiYgaXNf
bHRlcSh0cmVlT3JkZXI8VHJlZVR5cGU+KHBvaW50LCByYW5nZS5lbmQpKTsKKyAgICByZXR1cm4g
aXNfbHRlcSh0cmVlT3JkZXI8dHJlZVR5cGU+KHJhbmdlLnN0YXJ0LCBwb2ludCkpICYmIGlzX2x0
ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihwb2ludCwgcmFuZ2UuZW5kKSk7CiB9CiAKLXRlbXBsYXRl
IGJvb2wgaXNQb2ludEluUmFuZ2U8VHJlZT4oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBCb3Vu
ZGFyeVBvaW50Jik7Cit0ZW1wbGF0ZSBib29sIGNvbnRhaW5zPFRyZWU+KGNvbnN0IFNpbXBsZVJh
bmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlw
ZT4gYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE9w
dGlvbmFsPEJvdW5kYXJ5UG9pbnQ+JiBwb2ludCkKK3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBl
PiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgT3B0aW9uYWw8
Qm91bmRhcnlQb2ludD4mIHBvaW50KQogewotICAgIHJldHVybiBwb2ludCAmJiBpc1BvaW50SW5S
YW5nZTxUcmVlVHlwZT4ocmFuZ2UsICpwb2ludCk7CisgICAgcmV0dXJuIHBvaW50ICYmIGNvbnRh
aW5zPHRyZWVUeXBlPihyYW5nZSwgKnBvaW50KTsKIH0KIAotYm9vbCBpc1BvaW50SW5SYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50KQotewot
ICAgIHJldHVybiBpc1BvaW50SW5SYW5nZTxDb21wb3NlZFRyZWU+KHJhbmdlLCBwb2ludCk7Ci19
Ci0KLWJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIGlzUG9pbnRJblJh
bmdlPENvbXBvc2VkVHJlZT4ocmFuZ2UsIHBvaW50KTsKLX0KK3RlbXBsYXRlIGJvb2wgY29udGFp
bnM8Q29tcG9zZWRUcmVlPihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE9wdGlvbmFsPEJvdW5k
YXJ5UG9pbnQ+Jik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBQYXJ0aWFsT3JkZXJp
bmcgdHJlZU9yZGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQb2lu
dCYgcG9pbnQpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gUGFydGlhbE9yZGVyaW5nIHRy
ZWVPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBv
aW50KQogewotICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPFRyZWVUeXBlPihyYW5nZS5z
dGFydCwgcG9pbnQpOyAhaXNfbHQob3JkZXIpKQorICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9y
ZGVyPHRyZWVUeXBlPihyYW5nZS5zdGFydCwgcG9pbnQpOyAhaXNfbHQob3JkZXIpKQogICAgICAg
ICByZXR1cm4gb3JkZXI7Ci0gICAgaWYgKGF1dG8gb3JkZXIgPSB0cmVlT3JkZXI8VHJlZVR5cGU+
KHJhbmdlLmVuZCwgcG9pbnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgIGlmIChhdXRvIG9yZGVyID0g
dHJlZU9yZGVyPHRyZWVUeXBlPihyYW5nZS5lbmQsIHBvaW50KTsgIWlzX2d0KG9yZGVyKSkKICAg
ICAgICAgcmV0dXJuIG9yZGVyOwogICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxl
bnQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBQYXJ0aWFsT3JkZXJpbmcgdHJl
ZU9yZGVyKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UpCit0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRl
cihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
ewotICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPFRyZWVUeXBlPihwb2ludCwgcmFuZ2Uu
c3RhcnQpOyAhaXNfZ3Qob3JkZXIpKQorICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9yZGVyPHRy
ZWVUeXBlPihwb2ludCwgcmFuZ2Uuc3RhcnQpOyAhaXNfZ3Qob3JkZXIpKQogICAgICAgICByZXR1
cm4gb3JkZXI7Ci0gICAgaWYgKGF1dG8gb3JkZXIgPSB0cmVlT3JkZXI8VHJlZVR5cGU+KHBvaW50
LCByYW5nZS5lbmQpOyAhaXNfbHQob3JkZXIpKQorICAgIGlmIChhdXRvIG9yZGVyID0gdHJlZU9y
ZGVyPHRyZWVUeXBlPihwb2ludCwgcmFuZ2UuZW5kKTsgIWlzX2x0KG9yZGVyKSkKICAgICAgICAg
cmV0dXJuIG9yZGVyOwogICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CiB9
CkBAIC0yNjUsMTQgKzI1NywyMSBAQCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25z
dCBCb3VuZGFyeVBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbgogICAgIHJldHVy
biB0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihwb2ludCwgcmFuZ2UpOwogfQogCit0ZW1wbGF0ZTxU
cmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJS
YW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpCit7CisgICAgcmV0dXJuIGlzX2x0
ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihvdXRlclJhbmdlLnN0YXJ0LCBpbm5lclJhbmdlLnN0YXJ0
KSkgJiYgaXNfZ3RlcSh0cmVlT3JkZXI8dHJlZVR5cGU+KG91dGVyUmFuZ2UuZW5kLCBpbm5lclJh
bmdlLmVuZCkpOworfQorCit0ZW1wbGF0ZSBib29sIGNvbnRhaW5zPFRyZWU+KGNvbnN0IFNpbXBs
ZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBjb250YWlucyhjb25zdCBTaW1w
bGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpCiB7Ci0g
ICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihvdXRlclJhbmdlLnN0YXJ0LCBpbm5lclJh
bmdlLnN0YXJ0KSkgJiYgaXNfZ3RlcShkb2N1bWVudE9yZGVyKG91dGVyUmFuZ2UuZW5kLCBpbm5l
clJhbmdlLmVuZCkpOworICAgIHJldHVybiBjb250YWluczxDb21wb3NlZFRyZWU+KG91dGVyUmFu
Z2UsIGlubmVyUmFuZ2UpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBp
bnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1wbGVSYW5nZSYgYikKK3Rl
bXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFu
Z2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogewotICAgIHJldHVybiBpc19sdGVxKHRyZWVP
cmRlcjxUcmVlVHlwZT4oYS5zdGFydCwgYi5lbmQpKSAmJiBpc19sdGVxKHRyZWVPcmRlcjxUcmVl
VHlwZT4oYi5zdGFydCwgYS5lbmQpKTsKKyAgICByZXR1cm4gaXNfbHRlcSh0cmVlT3JkZXI8dHJl
ZVR5cGU+KGEuc3RhcnQsIGIuZW5kKSkgJiYgaXNfbHRlcSh0cmVlT3JkZXI8dHJlZVR5cGU+KGIu
c3RhcnQsIGEuZW5kKSk7CiB9CiAKIHRlbXBsYXRlIGJvb2wgaW50ZXJzZWN0czxUcmVlPihjb25z
dCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CkBAIC0zMDAsMTUgKzI5OSwyMiBA
QCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gaW50ZXJzZWN0aW9uKGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYgYSwgY29uc3QgT3B0aW9uYQogICAgIHJldHVybiB7IHsgc3RkOjptYXgoYS0+c3Rh
cnQsIGItPnN0YXJ0LCBjb21wYXJlQnlEb2N1bWVudE9yZGVyKSwgc3RkOjptaW4oYS0+ZW5kLCBi
LT5lbmQsIGNvbXBhcmVCeURvY3VtZW50T3JkZXIpIH0gfTsKIH0KIAotYm9vbCBjb250YWlucyhj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit0ZW1wbGF0ZTxUcmVl
VHlwZSB0cmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNv
bnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIGEgbW9yZSBlZmZpY2ll
bnQgYWxnb3JpdGhtIHRoYXQgYXZvaWRzIGFsd2F5cyBjb21wdXRpbmcgdGhlIG5vZGUgaW5kZXgu
CiAgICAgLy8gRklYTUU6IERvZXMgdGhpcyBjb25zdF9jYXN0IHBvaW50IHRvIGEgZGVzaWduIHBy
b2JsZW0/CiAgICAgYXV0byBub2RlUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKGNvbnN0
X2Nhc3Q8Tm9kZSY+KG5vZGUpKTsKLSAgICByZXR1cm4gbm9kZVJhbmdlICYmIGNvbnRhaW5zKHJh
bmdlLCAqbm9kZVJhbmdlKTsKKyAgICByZXR1cm4gbm9kZVJhbmdlICYmIGNvbnRhaW5zPHRyZWVU
eXBlPihyYW5nZSwgKm5vZGVSYW5nZSk7Cit9CisKK3RlbXBsYXRlIGJvb2wgY29udGFpbnM8VHJl
ZT4oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKK2Jvb2wgY29udGFpbnMoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAgIHJldHVybiBj
b250YWluczxDb21wb3NlZFRyZWU+KHJhbmdlLCBub2RlKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVHJlZVR5cGU+IGJvb2wgY29udGFpbnMoY29uc3QgTm9kZSYgb3V0ZXIsIGNvbnN0IE5vZGUm
IGlubmVyKTsKK3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBib29sIGNvbnRhaW5zKGNvbnN0
IE5vZGUmIG91dGVyLCBjb25zdCBOb2RlJiBpbm5lcik7CiAKIHRlbXBsYXRlPD4gYm9vbCBjb250
YWluczxUcmVlPihjb25zdCBOb2RlJiBvdXRlciwgY29uc3QgTm9kZSYgaW5uZXIpCiB7CkBAIC0z
MjEsMTUgKzMyNywxNCBAQCB0ZW1wbGF0ZTw+IGJvb2wgY29udGFpbnM8Q29tcG9zZWRUcmVlPihj
b25zdCBOb2RlJiBvdXRlciwgY29uc3QgTm9kZSYgaW5uZXIpCiAgICAgcmV0dXJuIG91dGVyLmNv
bnRhaW5zKGlubmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaW50
ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit0ZW1w
bGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYSBt
b3JlIGVmZmljaWVudCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYWx3YXlzIGNvbXB1dGluZyB0aGUg
bm9kZSBpbmRleC4KICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIGNvbnN0X2Nhc3QgcG9pbnQgdG8g
YSBkZXNpZ24gcHJvYmxlbT8KICAgICBhdXRvIG5vZGVSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGUoY29uc3RfY2FzdDxOb2RlJj4obm9kZSkpOwogICAgIGlmICghbm9kZVJhbmdlKQotICAg
ICAgICByZXR1cm4gY29udGFpbnM8VHJlZVR5cGU+KG5vZGUsIHJhbmdlLnN0YXJ0LmNvbnRhaW5l
cik7Ci0gICAgcmV0dXJuIGlzX2x0KHRyZWVPcmRlcjxUcmVlVHlwZT4obm9kZVJhbmdlLT5zdGFy
dCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQodHJlZU9yZGVyPFRyZWVUeXBlPihyYW5nZS5zdGFydCwg
bm9kZVJhbmdlLT5lbmQpKTsKLQorICAgICAgICByZXR1cm4gY29udGFpbnM8dHJlZVR5cGU+KG5v
ZGUsIHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIGlzX2x0KHRyZWVPcmRlcjx0
cmVlVHlwZT4obm9kZVJhbmdlLT5zdGFydCwgcmFuZ2UuZW5kKSkgJiYgaXNfbHQodHJlZU9yZGVy
PHRyZWVUeXBlPihyYW5nZS5zdGFydCwgbm9kZVJhbmdlLT5lbmQpKTsKIH0KIAogdGVtcGxhdGUg
Ym9vbCBpbnRlcnNlY3RzPFRyZWU+KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA0OTBjMGJlMzFjMWFhY2IzZjZiZjVjM2YyMTE3
MWU2MmZiNGVjODRkLi4wMWIyMzBlNjI3ODE0OWNjOGZhYmUyMmRmNDQ0Mzk2ZjhkMDI4NDc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNTcsMjIgKzU3LDM3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGF1dG8gbWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoVCYmIGFyZ3VtZW50KSAtPiBk
ZWNsdHlwZShtYWtlCiAKIHRlbXBsYXRlPHR5cGVuYW1lIC4uLlQ+IGF1dG8gbWFrZVNpbXBsZVJh
bmdlKFQmJiAuLi5hcmd1bWVudHMpIC0+IGRlY2x0eXBlKG1ha2VTaW1wbGVSYW5nZUhlbHBlciht
YWtlQm91bmRhcnlQb2ludEhlbHBlcihzdGQ6OmZvcndhcmQ8VD4oYXJndW1lbnRzKSkuLi4pKSB7
IHJldHVybiBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIobWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3Rk
Ojpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKTsgfQogCi0vLyBGSVhNRTogV291bGQgbGlrZSB0
aGVzZSB0byBoYXZlIHNob3J0ZXIgbmFtZXM7IGFub3RoZXIgb3B0aW9uIGlzIHRvIGNoYW5nZSBw
cmVmaXggdG8gbWFrZVNpbXBsZVJhbmdlLgorLy8gRklYTUU6IFdvdWxkIGxpa2UgdGhlc2UgdHdv
IGZ1bmN0aW9ucyB0byBoYXZlIHNob3J0ZXIgbmFtZXM7IGFub3RoZXIgb3B0aW9uIGlzIHRvIGNo
YW5nZSBwcmVmaXggdG8gbWFrZVNpbXBsZVJhbmdlLgogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYpOwogV0VCQ09SRV9FWFBP
UlQgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmKTsKIAot
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0
IFNpbXBsZVJhbmdlJik7Ci0KIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYsIGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRyZWVUeXBlPiBib29sIGlz
UG9pbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVHJlZVR5cGU+IGJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwotV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc1BvaW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5
UG9pbnQmKTsKLWJvb2wgaXNQb2ludEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBP
cHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwordGVtcGxhdGU8VHJlZVR5cGUgPSBUcmVlPiBib29s
IGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwordGVt
cGxhdGU8VHJlZVR5cGUgPSBUcmVlPiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiwg
Y29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mKTsKK3RlbXBsYXRlPFRyZWVUeXBlPiBib29s
IGNvbnRhaW5zKGNvbnN0IFNpbXBsZVJhbmdlJiBvdXRlclJhbmdlLCBjb25zdCBTaW1wbGVSYW5n
ZSYgaW5uZXJSYW5nZSk7Cit0ZW1wbGF0ZTxUcmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25zdCBT
aW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKKwordGVtcGxhdGU8VHJlZVR5cGU+IGJvb2wgaW50
ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7Cit0ZW1wbGF0
ZTxUcmVlVHlwZT4gYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9k
ZSYpOworCisvLyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2UuCit0ZW1w
bGF0ZTxUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgU2lt
cGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Cit0ZW1wbGF0ZTxUcmVlVHlwZSA9IFRy
ZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0
IFNpbXBsZVJhbmdlJik7CisKK3N0cnVjdCBPZmZzZXRSYW5nZSB7CisgICAgdW5zaWduZWQgc3Rh
cnQgeyAwIH07CisgICAgdW5zaWduZWQgZW5kIHsgMCB9OworfTsKK09mZnNldFJhbmdlIGNoYXJh
Y3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKKwor
Ly8gRklYTUU6IFN0YXJ0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHRo
ZXkgc2lsZW50bHkgZGVmYXVsdCB0byBDb21wb3NlZFRyZWUuCiAKK1dFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYpOwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5n
ZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2UpOwogdGVtcGxhdGU8dHlwZW5hbWUgVHJl
ZVR5cGU+IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJh
bmdlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2Um
LCBjb25zdCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UgdW5pb25SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiBX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gaW50ZXJzZWN0aW9uKGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpOwogCkBA
IC04MCw5ICs5NSw2IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnMoY29uc3QgU2ltcGxl
UmFuZ2UmLCBjb25zdCBOb2RlJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmVlVHlwZT4gYm9vbCBp
bnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwogV0VCQ09SRV9FWFBP
UlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwogCi0v
LyBSZXR1cm5zIGVxdWl2YWxlbnQgaWYgcG9pbnQgaXMgaW4gcmFuZ2UuCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUcmVlVHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgU2lt
cGxlUmFuZ2UmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUcmVl
VHlwZSA9IFRyZWU+IFBhcnRpYWxPcmRlcmluZyB0cmVlT3JkZXIoY29uc3QgQm91bmRhcnlQb2lu
dCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcg
ZG9jdW1lbnRPcmRlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsK
IFdFQkNPUkVfRVhQT1JUIFBhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCkBAIC05MiwxMSArMTA0LDcgQEAgSW50
ZXJzZWN0aW5nTm9kZVJhbmdlIGludGVyc2VjdGluZ05vZGVzKGNvbnN0IFNpbXBsZVJhbmdlJik7
CiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2VXaXRoUXVpcms7CiBJbnRlcnNlY3RpbmdOb2Rl
UmFuZ2VXaXRoUXVpcmsgaW50ZXJzZWN0aW5nTm9kZXNXaXRoRGVwcmVjYXRlZFplcm9PZmZzZXRT
dGFydFF1aXJrKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLXN0cnVjdCBPZmZzZXRSYW5nZSB7Ci0g
ICAgdW5zaWduZWQgc3RhcnQgeyAwIH07Ci0gICAgdW5zaWduZWQgZW5kIHsgMCB9OwotfTsKLU9m
ZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIGNv
bnN0IE5vZGUmKTsKKy8vIEZJWE1FOiBFbmQgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIGRlcHJlY2F0
ZWQgc2luY2UgdGhleSBzaWxlbnRseSBkZWZhdWx0IHRvIENvbXBvc2VkVHJlZS4KIAogY2xhc3Mg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3
YXJkX2l0ZXJhdG9yX3RhZywgTm9kZT4gewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA3NzBkOGJmMDcwMDI3Y2U5Y2Q1Y2FhNjQxMzNlOGM3
YmExOWM1YmYyLi4wZGU3NTI4MDMwMGZiNTlkMzFiZWE0Nzg4ZDliZmZmN2IwNTkzOTRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMTkwMiw3ICsxOTAy
LDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50KSBjb25zdAogICAgIGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBpc1BvaW50SW5SYW5nZSgqcmFu
Z2UsIG1ha2VCb3VuZGFyeVBvaW50KGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQ
b2ludChyZXN1bHQubG9jYWxQb2ludCgpLCBudWxscHRyKSkpOworICAgIHJldHVybiBXZWJDb3Jl
Ojpjb250YWluczxDb21wb3NlZFRyZWU+KCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoaW5uZXJO
b2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCksIG51
bGxwdHIpKSk7CiB9CiAKIC8vIFdvcmthcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgaXQncyBoYXJk
IHRvIGRlbGV0ZSBhIGZyYW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggNTU4MjRmYTA4MzZlMDMzYzc5MjY2MTZh
NDc5NzExMjBlMzc0M2M5OS4uOGIxMjA4NTMxNmU2ZTBjNDU2YWNjMDEzMDA1OTY3NGZjNDViZjJl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9v
a3VwTGVnYWN5Lm1tCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkNvbnRh
aW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlzCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlv
bi5maXJzdFJhbmdlKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UgJiYgaXNQb2ludEluUmFu
Z2UoKnNlbGVjdGVkUmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSk7CisgICAgcmV0
dXJuIHNlbGVjdGVkUmFuZ2UgJiYgY29udGFpbnM8Q29tcG9zZWRUcmVlPigqc2VsZWN0ZWRSYW5n
ZSwgbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pKTsKIH0KIAogT3B0aW9uYWw8c3RkOjp0dXBs
ZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZv
clNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggMGRmN2Q5YjYxMDc3N2M2NGRkYTc1YWEwMjYyZjc0
OTJiYTAwYTkyMS4uZmVjNzFmYTdiZWI1OGM5YjZlYjU2ZWNjN2NiM2QwMDMxNTI4MjI0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQg
RE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgbGl2ZVJhbmdlKQogICAgIH0KICAgICBhdXRv
IHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxpdmVSYW5nZSk7CiAgICAgaWYgKGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0g
ICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hh
ZG93Um9vdCgpICYmIGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2UsIHJhbmdlKSkKKyAgICAgICAg
aWYgKCFzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290
KCkgJiYgaW50ZXJzZWN0czxUcmVlPigqc2VsZWN0ZWRSYW5nZSwgcmFuZ2UpKQogICAgICAgICAg
ICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbih1bmlvblJhbmdlKCpzZWxlY3RlZFJhbmdlLCByYW5n
ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDMzLDcgKzQzMyw3IEBAIGJvb2wgRE9N
U2VsZWN0aW9uOjpjb250YWluc05vZGUoTm9kZSYgbm9kZSwgYm9vbCBhbGxvd1BhcnRpYWwpIGNv
bnN0CiAgICAgaWYgKG5vZGUuaXNUZXh0Tm9kZSgpICYmICFub2RlLmRvY3VtZW50KCkuc2V0dGlu
Z3MoKS5saXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkKCkpCiAgICAgICAgIGFsbG93UGFydGlhbCA9
IHRydWU7CiAgICAgYXV0byByYW5nZSA9IHRoaXMtPnJhbmdlKCk7Ci0gICAgcmV0dXJuIHJhbmdl
ICYmIChhbGxvd1BhcnRpYWwgPyBpbnRlcnNlY3RzKCpyYW5nZSwgbm9kZSkgOiBjb250YWlucygq
cmFuZ2UsIG5vZGUpKTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgKGFsbG93UGFydGlhbCA/IGludGVy
c2VjdHM8VHJlZT4oKnJhbmdlLCBub2RlKSA6IGNvbnRhaW5zPFRyZWU+KCpyYW5nZSwgbm9kZSkp
OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBET01TZWxlY3Rpb246OnNlbGVjdEFsbENoaWxkcmVu
KE5vZGUmIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3Np
YmxlVGV4dEltcGwuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJ
bXBsLmNwcAppbmRleCA1Y2U4YTYxNzE5ZTZlMTc5OWE4ZThjMDhhMjBmNmQzOGU5NWY2ZjA0Li5h
MjE2M2ZkMDkyYjQ1NDNjYWE1YTUyMDkxZGIwYTEzMzMxMWVjNjg0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAKQEAgLTc1Niw1ICs3NTYsNSBA
QCBIUkVTVUxUIEFjY2Vzc2libGVUZXh0Ojppbml0aWFsQ2hlY2soKQogYm9vbCBBY2Nlc3NpYmxl
VGV4dDo6aXNJblJhbmdlKFZpc2libGVQb3NpdGlvbiYgY3VycmVudCwgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UmIHdvcmRSYW5nZSkKIHsKICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHdv
cmRSYW5nZSk7Ci0gICAgcmV0dXJuIHJhbmdlICYmIGlzUG9pbnRJblJhbmdlKCpyYW5nZSwgbWFr
ZUJvdW5kYXJ5UG9pbnQoY3VycmVudCkpOworICAgIHJldHVybiByYW5nZSAmJiBjb250YWluczxD
b21wb3NlZFRyZWU+KCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoY3VycmVudCkpOwogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg4MGY0N2Q2
M2E5NjFhZTZlNWU1ZGQ1ODRmZGE1NjQ2NjhhODFhZjUuLjFjZmQ2ZTcxMDJlN2JkZmI3NjU5ZTNk
YTI2ZTE2YThlNTVkZjQ0ZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0xMC0yMiAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjY2Mjk1KTogRE9NU2VsZWN0
aW9uJ3MgYWRkUmFuZ2UgYW5kIGNvbnRhaW5zTm9kZSBiZWhhdmUgaW5jb3JyZWN0bHkgd2hlbiBz
ZWxlY3Rpb24gY3Jvc3NlcyBzaGFkb3cgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RG9jdW1lbnRPcmRlci5jcHA6IERpc2FibGVkIHRoZSBpc1BvaW50SW5SYW5nZQorICAgICAgICB0
ZXN0IGFuZCBhZGRlZCBjb21tZW50cyBhYm91dCBob3cgd2Ugd2lsbCByZXN0b3JlIGl0IGluIHRo
ZSBmdXR1cmUuCisKIDIwMjAtMTAtMjIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBOdWxsIGNoZWNrIHBsYXRmb3JtU3RyYXRlZ2llcyB3aGVu
IG1ha2luZyBibG9iIHJlYWQgc3RyZWFtIGZvciBhbiBOU1VSTFJlcXVlc3QKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Eb2N1bWVudE9yZGVyLmNwcAppbmRleCBm
MWNkOWJiZjdiMWEzYjU1YzhhY2JhZWI4MDJjZjY3ZDg1ZWZhOTg3Li42N2QxOTdiNWM0Y2E0ZjVj
MjM4NDk4MGY4Y2JjODQyNjAxYTgzZGU4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRG9jdW1lbnRPcmRlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0RvY3VtZW50T3JkZXIuY3BwCkBAIC0zNiw2ICszNiw5IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmg+CiAKKy8vIEZJWE1FOiBFeHBvc2UgdGhlIGZ1bmN0aW9ucyB0ZXN0
ZWQgaGVyZSBpbiBXZWJLaXQgaW50ZXJuYWxzIG9iamVjdCwgdGhlbiByZXBsYWNlIHRoaXMgdGVz
dCB3aXRoIG9uZSB3cml0dGVuIGluIEphdmFTY3JpcHQuCisvLyBGSVhNRTogV2hlbiBkb2luZyB0
aGUgYWJvdmUsIGRvbid0IGZvcmdldCB0byByZW1vdmUgdGhlIG1hbnkgV0VCQ09SRV9FWFBPUlQg
dGhhdCB3ZXJlIGFkZGVkIHNvIHdlIGNvdWxkIGNvbXBpbGUgYW5kIGxpbmsgdGhpcyB0ZXN0Lgor
CiAjZGVmaW5lIEVYUEVDVF9CT1RIKGEsIGIsIGZvcndhcmQsIHJldmVyc2VkKSBkbyB7IEVYUEVD
VF9TVFJFUShzdHJpbmcoZG9jdW1lbnRPcmRlcihhLCBiKSksIGZvcndhcmQpOyBFWFBFQ1RfU1RS
RVEoc3RyaW5nKGRvY3VtZW50T3JkZXIoYiwgYSkpLCByZXZlcnNlZCk7IH0gd2hpbGUgKDApCiAj
ZGVmaW5lIEVYUEVDVF9FUVVJVkFMRU5UKGEsIGIpIEVYUEVDVF9CT1RIKGEsIGIsICJlcXVpdmFs
ZW50IiwgImVxdWl2YWxlbnQiKQogI2RlZmluZSBFWFBFQ1RfTEVTUyhhLCBiKSBFWFBFQ1RfQk9U
SChhLCBiLCAibGVzcyIsICJncmVhdGVyIikKQEAgLTQ3Nyw2ICs0ODAsMTAgQEAgVEVTVChEb2N1
bWVudE9yZGVyLCBQb3NpdGlvbnMpCiAgICAgLy8gRklYTUU6IEFkZCB0ZXN0cyB0aGF0IGNvdmVy
IHNoYWRvdyB0cmVlcy4KIH0KIAorLy8gRGlzYWJsZWQgdGhpcyB0ZXN0IHNpbmNlIGlzUG9pbnRJ
blJhbmdlIGlzIG5vdyBhIHRlbXBsYXRlIGZ1bmN0aW9uIG5hbWVkIGNvbnRhaW5zLgorLy8gS2Vl
cGluZyB0aGUgY29kZSBhcm91bmQgdG8gdXNlIGFzIGEgcmVmZXJlbmNlIHdoZW4gcmV3cml0aW5n
IGluIEphdmFTY3JpcHQKKyNpZiAwCisKIFRFU1QoRG9jdW1lbnRPcmRlciwgSXNQb2ludEluUmFu
Z2UpCiB7CiAgICAgYXV0byBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7CkBAIC01MjYsNiAr
NTMzLDggQEAgVEVTVChEb2N1bWVudE9yZGVyLCBJc1BvaW50SW5SYW5nZSkKICAgICAvLyBGSVhN
RTogQWRkIHRlc3RzIHRoYXQgY292ZXIgc2hhZG93IHRyZWVzLgogfQogCisjZW5kaWYKKwogVEVT
VChEb2N1bWVudE9yZGVyLCBSYW5nZUNvbnRhaW5zUmFuZ2UpCiB7CiAgICAgYXV0byBkb2N1bWVu
dCA9IGNyZWF0ZURvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmY5YzJjMjRjN2QxNGNmYTBkMWFlZmY3ZmRj
NzAwZDRmZDViYjZkYi4uZGEwMmY5YTlhMDNmODlmYjI0Yzk4ZmQxY2Y5OTc1ZTdhMWFhNzM1MCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTEwLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OKHIyNjYyOTUpOiBET01TZWxlY3Rpb24ncyBh
ZGRSYW5nZSBhbmQgY29udGFpbnNOb2RlIGJlaGF2ZXMgaW5jb3JyZWN0bHkgd2hlbiBzZWxlY3Rp
b24gY3Jvc3NlcyBzaGFkb3cgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb25zLWFjcm9z
cy10cmVlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9u
L3NlbGVjdGlvbnMtYWNyb3NzLXRyZWVzLmh0bWw6IEFkZGVkLgorCiAyMDIwLTEwLTIzICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBJbXBs
ZW1lbnQgYW50aWFsaWFzZWQgcm91bmRlZCByZWN0YW5nbGUgY2xpcHBpbmcgaW4gVGV4dHVyZU1h
cHBlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0aW9u
cy1hY3Jvc3MtdHJlZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vc2VsZWN0aW9ucy1hY3Jvc3MtdHJlZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhN2Y5
NTk2OTAxMTkzZWNkNDhlMGQxMDVhZmNkOTU3YWJiZGVjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10cmVlcy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw3IEBACitQQVNTIGdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRF
eHRlbnQoZG9jdW1lbnQuYm9keSwgMCwgbm9kZUluU2xvdCwgNSk7IHNlbGVjdGlvbkFkZFJhbmdl
KHNoYWRvd05vZGUsIDAsIHNoYWRvd1Jvb3QsIDEpOyBnZXRTZWxlY3Rpb24oKS5mb2N1c05vZGUg
aXMgbm9kZUluU2xvdAorUEFTUyBnZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1
bWVudC5ib2R5KTsgZ2V0U2VsZWN0aW9uKCkuY29udGFpbnNOb2RlKHNoYWRvd05vZGUpIGlzIGZh
bHNlCitQQVNTIGdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmJvZHkp
OyBnZXRTZWxlY3Rpb24oKS5jb250YWluc05vZGUoc2hhZG93Tm9kZSwgdHJ1ZSkgaXMgZmFsc2UK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Rpb25zLWFjcm9zcy10
cmVlcy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0aW9ucy1hY3Jv
c3MtdHJlZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZWJhYWM0MTE3NjFmNzc0Y2RlYzU3NWMwOTcyOTk4
ZWM4YzYyMmMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vc2VsZWN0aW9ucy1hY3Jvc3MtdHJlZXMuaHRtbApAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxzY3JpcHQ+Cisg
ICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNo
YWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pOworICAgICAgICBzaGFkb3dI
b3N0LmlubmVySFRNTCA9ICc8Yj5oZWxsbzwvYj48YiBzbG90PSJzZWNvbmQiPndvcmxkPC9iPic7
CisgICAgICAgIHNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxzcGFuPjxzbG90Pjwvc2xvdD4gPHNs
b3QgbmFtZT0ic2Vjb25kIj48L3Nsb3Q+PC9zcGFuPic7CisgICAgICAgIGNvbnN0IHNoYWRvd05v
ZGUgPSBzaGFkb3dSb290LmZpcnN0Q2hpbGQ7CisgICAgICAgIGNvbnN0IG5vZGVJblNsb3QgPSBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdiW3Nsb3Q9c2Vjb25kXScpLmZpcnN0Q2hpbGQ7CisKKyAg
ICAgICAgZnVuY3Rpb24gc2VsZWN0aW9uQWRkUmFuZ2Uoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zm
c2V0LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICAgICAgcmFuZ2Uuc2V0
U3RhcnQoc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHJhbmdlLnNl
dEVuZChlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CisgICAgICAgICAgICBnZXRTZWxlY3Rpb24o
KS5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICBzaG91bGRCZSgiZ2V0U2Vs
ZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChkb2N1bWVudC5ib2R5LCAwLCBub2RlSW5TbG90LCA1
KTsgc2VsZWN0aW9uQWRkUmFuZ2Uoc2hhZG93Tm9kZSwgMCwgc2hhZG93Um9vdCwgMSk7IGdldFNl
bGVjdGlvbigpLmZvY3VzTm9kZSIsICJub2RlSW5TbG90Iik7CisKKyAgICAgICAgc2hvdWxkQmVG
YWxzZSgiZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuYm9keSk7IGdl
dFNlbGVjdGlvbigpLmNvbnRhaW5zTm9kZShzaGFkb3dOb2RlKSIpOworICAgICAgICBzaG91bGRC
ZUZhbHNlKCJnZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5ib2R5KTsg
Z2V0U2VsZWN0aW9uKCkuY29udGFpbnNOb2RlKHNoYWRvd05vZGUsIHRydWUpIik7CisKKyAgICAg
ICAgZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVD
aGlsZChzaGFkb3dIb3N0KTsKKworICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
ICAgIDwvc2NyaXB0PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="428579"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>