<?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>48516</bug_id>
          
          <creation_ts>2010-10-28 06:00:18 -0700</creation_ts>
          <short_desc>GraphicsContext: Remove &quot;current path&quot; and add a path argument to strokePath, fillPath and clipPath</short_desc>
          <delta_ts>2011-01-25 13:56:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>50286</dependson>
    
    <dependson>53124</dependson>
          <blocked>50284</blocked>
    
    <blocked>50294</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>kevino</cc>
    
    <cc>krit</cc>
    
    <cc>mitz</cc>
    
    <cc>mrobinson</cc>
    
    <cc>oliver</cc>
    
    <cc>paroga</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>simon.maxime</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>301016</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-28 06:00:18 -0700</bug_when>
    <thetext>GraphicsContext currently has a &quot;current path&quot;, set using GraphicsContext::beginPath() and GraphicsContext::addPath()

This path is then implicitly used by strokePath(), fillPath() and clipPath(). To make it more confusing, due to a quirk of CGContextStrokePath, strokePath() is expected to clear the current path. This is poorly handled ATM, for example there is some mysterious Skia-specific code handling the case in RenderSVGResourceSolidColor::postApplyResource().

I propose we refactor GraphicsContext to take a Path object as an argument to these functions and remove the concept of a &quot;current path.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301023</commentid>
    <comment_count>1</comment_count>
      <attachid>72179</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-28 06:14:19 -0700</bug_when>
    <thetext>Created attachment 72179
Proposed patch

First stab at this, tested on Qt, CG and Cairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301130</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-10-28 09:58:32 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; This is poorly handled ATM, for example there is some mysterious Skia-specific code handling the case in RenderSVGResourceSolidColor::postApplyResource().

In my opinion, a bug in the implementation is not good justification for changing the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301136</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-28 10:11:16 -0700</bug_when>
    <thetext>I think it would be better, if fillPath and strokePath don&apos;t take Path arguments. Instead they shouldn&apos;t delete the current path after filling or stroking a shape. We could handle it manually. IIRC the most platforms support this (not sure about CG).
This way we would save the operation of re-adding the same path onto the context for a fill+stroke operation of shapes in SVG.
What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301593</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-28 23:04:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; In my opinion, a bug in the implementation is not good justification for changing the API.

You&apos;re right, the primary reason I wanted to do this was to get a cleaner, more concise API.

(In reply to comment #3)
&gt; This way we would save the operation of re-adding the same path onto the context for a fill+stroke operation of shapes in SVG.

You&apos;re right, I didn&apos;t properly consider the fill+stroke redundancy since that doesn&apos;t happen on Qt.

New suggestion: how about replacing beginPath()+addPath() with setPath(const Path&amp;) (since that&apos;s how it&apos;s used anyway) and not expecting strokePath() or fillPath() to touch the current path?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301608</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-28 23:55:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; New suggestion: how about replacing beginPath()+addPath() with setPath(const Path&amp;) (since that&apos;s how it&apos;s used anyway) and not expecting strokePath() or fillPath() to touch the current path?

Like you said, setPath would make use of beginPath()+addPath() anyway. So where is the improvement, if fillPath() and strokePath don&apos;t use the currentPath?
Btw, why doesn&apos;t fillPath or strokePath on Qt close the currentPath? IIRC it was the way I implemented it on Qt. Did it change? When yes, why?

Nevertheless, it&apos;s ok to use setPath, but I&apos;d still let fillPath and strokePath use the currentPath, just make sure that we don&apos;t close/clear the path and do it manually instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301615</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-29 00:08:32 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; New suggestion: how about replacing beginPath()+addPath() with setPath(const Path&amp;) (since that&apos;s how it&apos;s used anyway) and not expecting strokePath() or fillPath() to touch the current path?
&gt; 
&gt; Like you said, setPath would make use of beginPath()+addPath() anyway. So where is the improvement, if fillPath() and strokePath don&apos;t use the currentPath?

IMO it would make the API less ambiguous - why have the concept of &quot;addPath&quot; when we&apos;re never actually adding multiple paths?

For Qt, there&apos;s the additional advantage that we don&apos;t have a &quot;platform beginPath()&quot; so setPath() means a little less work for us.

&gt; Btw, why doesn&apos;t fillPath or strokePath on Qt close the currentPath?

It does both, actually.

&gt; Nevertheless, it&apos;s ok to use setPath, but I&apos;d still let fillPath and strokePath use the currentPath, just make sure that we don&apos;t close/clear the path and do it manually instead.

I like this idea, though I&apos;m not sure what the best way to do that on CG is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301622</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 00:39:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I like this idea, though I&apos;m not sure what the best way to do that on CG is.
So CGContextStrokePath/CGContextFillPath clear the currentPath after the drawing operation and there is no way to prevent CG to do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301623</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-29 00:48:57 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I like this idea, though I&apos;m not sure what the best way to do that on CG is.
&gt; So CGContextStrokePath/CGContextFillPath clear the currentPath after the drawing operation and there is no way to prevent CG to do it?

For CGContextStrokePath: &quot;As a side effect when you call this function, Quartz clears the current path.&quot;

Nothing is said about it for CGContextFillPath, so I assume it doesn&apos;t happen.

Source:
http://edr.euro.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301625</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 00:54:06 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; I like this idea, though I&apos;m not sure what the best way to do that on CG is.
&gt; &gt; So CGContextStrokePath/CGContextFillPath clear the currentPath after the drawing operation and there is no way to prevent CG to do it?
&gt; 
&gt; For CGContextStrokePath: &quot;As a side effect when you call this function, Quartz clears the current path.&quot;
&gt; 
&gt; Nothing is said about it for CGContextFillPath, so I assume it doesn&apos;t happen.

Hm, not sure. A CG guy should comment on this. Nevertheless, SVG 2.0 will make it possible to change the order of drawing fill and stroke, so it would still be helpful if CGContextStrokePath wouldn&apos;t clear the path :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301646</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-29 02:36:22 -0700</bug_when>
    <thetext>I&apos;d like to share my opinion. Let&apos;s examine the users of the code, all do:

Path myPath;
path.doSomething();

context-&gt;beginPath();
context-&gt;addPath(myPath);
context-&gt;fillPath();

The problem we want to solve is to avoid multiples copies of the Path object. There are multiple options, like making it RefCounted, which I dislike though.

The point is that the path _has to be created_ and stored in the &quot;client code&quot; that wants to use GraphicsContext. So why storing it again the GraphicsContext?

We should really think about changing this concept, that means fillPath(const Path&amp;), strokePath(const Path&amp;) is a good option IMHO.

The reason why the current concept is as-is, is CoreGraphics cocept of a current path, added to the CGContext. We still satisfy CG by doing this from the fill/strokePath methods.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301648</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-29 02:38:39 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; I like this idea, though I&apos;m not sure what the best way to do that on CG is.
&gt; &gt; &gt; So CGContextStrokePath/CGContextFillPath clear the currentPath after the drawing operation and there is no way to prevent CG to do it?
&gt; &gt; 
&gt; &gt; For CGContextStrokePath: &quot;As a side effect when you call this function, Quartz clears the current path.&quot;
&gt; &gt; 
&gt; &gt; Nothing is said about it for CGContextFillPath, so I assume it doesn&apos;t happen.
&gt; 
&gt; Hm, not sure. A CG guy should comment on this. Nevertheless, SVG 2.0 will make it possible to change the order of drawing fill and stroke, so it would still be helpful if CGContextStrokePath wouldn&apos;t clear the path :-(
It&apos;s no problem that the stroke path is cleared, if strokePath would take a const Path&amp;, we could easily readd it after clearing. But I don&apos;t think there&apos;s any need to do that....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301649</commentid>
    <comment_count>12</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-29 02:42:39 -0700</bug_when>
    <thetext>Jumped the gun on renaming the bug, let&apos;s have some more discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301660</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 03:15:34 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; I like this idea, though I&apos;m not sure what the best way to do that on CG is.
&gt; &gt; &gt; &gt; So CGContextStrokePath/CGContextFillPath clear the currentPath after the drawing operation and there is no way to prevent CG to do it?
&gt; &gt; &gt; 
&gt; &gt; &gt; For CGContextStrokePath: &quot;As a side effect when you call this function, Quartz clears the current path.&quot;
&gt; &gt; &gt; 
&gt; &gt; &gt; Nothing is said about it for CGContextFillPath, so I assume it doesn&apos;t happen.
&gt; &gt; 
&gt; &gt; Hm, not sure. A CG guy should comment on this. Nevertheless, SVG 2.0 will make it possible to change the order of drawing fill and stroke, so it would still be helpful if CGContextStrokePath wouldn&apos;t clear the path :-(
&gt; It&apos;s no problem that the stroke path is cleared, if strokePath would take a const Path&amp;, we could easily readd it after clearing. But I don&apos;t think there&apos;s any need to do that....

If you call addPath, you do a copy anyway. Maybe just internally by the graphic library, but you have to add the path to the context again. This issue can be avoided on Qt and Cairo. And that was we were talking about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301661</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 03:22:09 -0700</bug_when>
    <thetext>Hm, looked at Cairo. The implementation really changed to a stored currentPath. That&apos;s a pity. This should really be removed. Under this premise it makes really a lot of sense to give a Path&amp;. Maybe not much for CG, since it has a different concept for current path, but definitely for other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301663</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-29 03:28:31 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; &gt; &gt; I like this idea, though I&apos;m not sure what the best way to do that on CG is.
&gt; &gt; &gt; &gt; &gt; So CGContextStrokePath/CGContextFillPath clear the currentPath after the drawing operation and there is no way to prevent CG to do it?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; For CGContextStrokePath: &quot;As a side effect when you call this function, Quartz clears the current path.&quot;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Nothing is said about it for CGContextFillPath, so I assume it doesn&apos;t happen.
&gt; &gt; &gt; 
&gt; &gt; &gt; Hm, not sure. A CG guy should comment on this. Nevertheless, SVG 2.0 will make it possible to change the order of drawing fill and stroke, so it would still be helpful if CGContextStrokePath wouldn&apos;t clear the path :-(
&gt; &gt; It&apos;s no problem that the stroke path is cleared, if strokePath would take a const Path&amp;, we could easily readd it after clearing. But I don&apos;t think there&apos;s any need to do that....
&gt; 
&gt; If you call addPath, you do a copy anyway. Maybe just internally by the graphic library, but you have to add the path to the context again. This issue can be avoided on Qt and Cairo. And that was we were talking about.

I&apos;m not talking about GraphicsContext::addPath. In cg Path wraps a CGPath object, and CGContextAddPath just takes a CGPathRef (handle to the CGPath). That is _not_ a copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301668</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 03:35:47 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I&apos;m not talking about GraphicsContext::addPath. In cg Path wraps a CGPath object, and CGContextAddPath just takes a CGPathRef (handle to the CGPath). That is _not_ a copy.

And I was more thinking about Cairo. And we do a lot of cairo_copy_path there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301669</commentid>
    <comment_count>17</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-29 03:40:04 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; I&apos;m not talking about GraphicsContext::addPath. In cg Path wraps a CGPath object, and CGContextAddPath just takes a CGPathRef (handle to the CGPath). That is _not_ a copy.
&gt; 
&gt; And I was more thinking about Cairo. And we do a lot of cairo_copy_path there.

I wanted to move the discussion towards _our_ API, and how we can avoid copying Path, and making the GraphicsContext API nicer. I&apos;d like to reach consensus about that first, then look at the individual graphic libraries.

Path foobar;
foobar.addRect(...);

context-&gt;fillPath(foobar);
context-&gt;strokePath(foobar);
seems like a nice API, where fill/strokePath take a const Path&amp;, to avoid a copy.

Do we all agree on that? If so, let&apos;s look at how we can implement that kind of API efficiently in CG/Qt/GTK/Skia. If we&apos;ll then reach the point, where we need changes in the design, we can continue discussing that, but I&apos;d like to see a nice API proposal first, and here&apos;s mine, which is I think exactly like Andreas (we discussed it before, btw.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301673</commentid>
    <comment_count>18</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-29 03:54:27 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Do we all agree on that? If so, let&apos;s look at how we can implement that kind of API efficiently in CG/Qt/GTK/Skia. If we&apos;ll then reach the point, where we need changes in the design, we can continue discussing that, but I&apos;d like to see a nice API proposal first, and here&apos;s mine, which is I think exactly like Andreas (we discussed it before, btw.)

Yes, this is what my patch implements, and I still think it&apos;s the most elegant API. Let&apos;s hear from some more people. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301674</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 04:00:48 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; I&apos;m not talking about GraphicsContext::addPath. In cg Path wraps a CGPath object, and CGContextAddPath just takes a CGPathRef (handle to the CGPath). That is _not_ a copy.
&gt; &gt; 
&gt; &gt; And I was more thinking about Cairo. And we do a lot of cairo_copy_path there.
&gt; 
&gt; I wanted to move the discussion towards _our_ API, and how we can avoid copying Path, and making the GraphicsContext API nicer. I&apos;d like to reach consensus about that first, then look at the individual graphic libraries.

haha. Before we can work on a &quot;nicer&quot; API for GraphicsContext we _have to_ discuss how we can implement it efficiently on platforms, not after we implemented it.
But I&apos;m really fine with the new headline of this bug. We really don&apos;t want current path on Cairo. And I guess Martin and Alex agree to me. I&apos;d like to have at least one comment of the Skia guys.

The work on WebKit does not really rely on this patch. So we should take the time now, instead of redesigning a few times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301677</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-29 04:08:00 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; &gt; I&apos;m not talking about GraphicsContext::addPath. In cg Path wraps a CGPath object, and CGContextAddPath just takes a CGPathRef (handle to the CGPath). That is _not_ a copy.
&gt; &gt; &gt; 
&gt; &gt; &gt; And I was more thinking about Cairo. And we do a lot of cairo_copy_path there.
&gt; &gt; 
&gt; &gt; I wanted to move the discussion towards _our_ API, and how we can avoid copying Path, and making the GraphicsContext API nicer. I&apos;d like to reach consensus about that first, then look at the individual graphic libraries.
&gt; 
&gt; haha. Before we can work on a &quot;nicer&quot; API for GraphicsContext we _have to_ discuss how we can implement it efficiently on platforms, not after we implemented it.
Would you please read more carefully, to not spread more confusion than needed?
I said we should _discuss_ how we like to have the API, I never said &quot;implement it&quot;.

We should reach consensus on how the API _should_ look like. Then we can look how _and if_ the new API can be implemented efficiently, then reevaluate the desired design if needed.

&gt; But I&apos;m really fine with the new headline of this bug. We really don&apos;t want current path on Cairo. And I guess Martin and Alex agree to me. I&apos;d like to have at least one comment of the Skia guys.
&gt; 
&gt; The work on WebKit does not really rely on this patch. So we should take the time now, instead of redesigning a few times.

*sigh* Dirk, please read more carefully, before replying. To restate: I never said, I want to implement the new design, but rather _think_ of a new design. If everybody agress the new design would be best, then let&apos;s see whether it can be implemented efficiently. If not, refine the design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301679</commentid>
    <comment_count>21</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2010-10-29 04:08:50 -0700</bug_when>
    <thetext>I find the proposed API a good idea. The current OpenVG branch has those methods in PainterOpenVG already, and automatic deletion of paths is unintuitive and confusing, in one place in our port I specifically used the platform context directly just to avoid the clumsy GraphicsContext API and its path copies. +1 from me, Andreas ftw!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301681</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 04:18:14 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; &gt; &gt; I&apos;m not talking about GraphicsContext::addPath. In cg Path wraps a CGPath object, and CGContextAddPath just takes a CGPathRef (handle to the CGPath). That is _not_ a copy.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; And I was more thinking about Cairo. And we do a lot of cairo_copy_path there.
&gt; &gt; &gt; 
&gt; &gt; &gt; I wanted to move the discussion towards _our_ API, and how we can avoid copying Path, and making the GraphicsContext API nicer. I&apos;d like to reach consensus about that first, then look at the individual graphic libraries.
&gt; &gt; 
&gt; &gt; haha. Before we can work on a &quot;nicer&quot; API for GraphicsContext we _have to_ discuss how we can implement it efficiently on platforms, not after we implemented it.
&gt; Would you please read more carefully, to not spread more confusion than needed?
&gt; I said we should _discuss_ how we like to have the API, I never said &quot;implement it&quot;.
&gt; 
&gt; We should reach consensus on how the API _should_ look like. Then we can look how _and if_ the new API can be implemented efficiently, then reevaluate the desired design if needed.
&gt; 
&gt; &gt; But I&apos;m really fine with the new headline of this bug. We really don&apos;t want current path on Cairo. And I guess Martin and Alex agree to me. I&apos;d like to have at least one comment of the Skia guys.
&gt; &gt; 
&gt; &gt; The work on WebKit does not really rely on this patch. So we should take the time now, instead of redesigning a few times.
&gt; 
&gt; *sigh* Dirk, please read more carefully, before replying. To restate: I never said, I want to implement the new design, but rather _think_ of a new design. If everybody agress the new design would be best, then let&apos;s see whether it can be implemented efficiently. If not, refine the design.

Great! So we agree to each other, fine. And I just wrote that from the Cairo point of few it is better to get rid of the current path concept, and therefor use to fillPath(Path&amp;)/strokePath(Path&amp;) is good. No need to be aggressive or irritated :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301684</commentid>
    <comment_count>23</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-29 04:27:10 -0700</bug_when>
    <thetext>(In reply to comment #22).
&gt; 
&gt; Great! So we agree to each other, fine. And I just wrote that from the Cairo point of few it is better to get rid of the current path concept, and therefor use to fillPath(Path&amp;)/strokePath(Path&amp;) is good. No need to be aggressive or irritated :-)

It shouldn&apos;t sounds aggressive, sorry if you felt so :-)
From a CG and Qt point of view, that design would also be possible.
I&apos;ve looked again through Andreas patch, and I think the CG side is fine, Qt as well.

The Skia code should probably be made smarter, before landing the patch as-is.
Needs some input from the Chromium team (James Robinsion?)
For WinCE we should talk to Patrick Gansterer, for Wx to Kevin Ollivier.

They&apos;re all CC&apos;ed we should wait for their comments...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301688</commentid>
    <comment_count>24</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-10-29 04:44:17 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; For WinCE we should talk to Patrick Gansterer, for Wx to Kevin Ollivier.
IMHO it&apos;s a good idea too, so +1. It shouldn&apos;t be a big difference for WinCE, because it only saves the paths as a Vector&lt;Path&gt; member in GraphicsContext and iterates of them in fillPath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301769</commentid>
    <comment_count>25</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-29 08:21:22 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Hm, looked at Cairo. The implementation really changed to a stored currentPath. That&apos;s a pity. This should really be removed. Under this premise it makes really a lot of sense to give a Path&amp;. Maybe not much for CG, since it has a different concept for current path, but definitely for other platforms.

Unsure yet if this affects the API discussion, but I made this change, so I&apos;ll explain it. GraphicsContext assumes that things like ::fillRect and ::strokeRect are not affected by or clear the current path. The solution was to wait until the last possible moment to actually apply the path to the Cairo context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301890</commentid>
    <comment_count>26</comment_count>
      <attachid>72179</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-10-29 11:11:35 -0700</bug_when>
    <thetext>Comment on attachment 72179
Proposed patch

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

This looks great.

I think the beginPath/addPath() functions could be removed from skia too.  There&apos;s nothing in skia itself that requires these semantics, AFAIK (the current path is stored in PlatformContextSkia::m_path, and reset in beginPath() -- which was wrong; it should probably have been reset in fillPath()/strokePath() to emulate the CG behaviour).  Anyway, you can either do this yourself, or I can do it after this patch lands.

&gt; WebCore/inspector/InspectorController.cpp:-1819
&gt; -        context.addPath(quadPath);

Out of curiosity, was this a bug?  It looks like the path was being added twice (before and after the clipOut).  Or did the semantics of clipOut() change in this patch too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301893</commentid>
    <comment_count>27</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-29 11:18:02 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; &gt; WebCore/inspector/InspectorController.cpp:-1819
&gt; &gt; -        context.addPath(quadPath);
&gt; 
&gt; Out of curiosity, was this a bug?  It looks like the path was being added twice (before and after the clipOut).  Or did the semantics of clipOut() change in this patch too?

Not a bug, merely redundant, since clipOut() takes a Path parameter rather than using the current context path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301895</commentid>
    <comment_count>28</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-10-29 11:20:56 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; &gt; WebCore/inspector/InspectorController.cpp:-1819
&gt; &gt; &gt; -        context.addPath(quadPath);
&gt; &gt; 
&gt; &gt; Out of curiosity, was this a bug?  It looks like the path was being added twice (before and after the clipOut).  Or did the semantics of clipOut() change in this patch too?
&gt; 
&gt; Not a bug, merely redundant, since clipOut() takes a Path parameter rather than using the current context path.

Right, but it looks like the path would have been added twice to the current path for the subsequent strokePath().  Anyway, no big deal, if it was a bug, your patch fixes it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301911</commentid>
    <comment_count>29</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-29 11:40:15 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt;
&gt; But I&apos;m really fine with the new headline of this bug. We really don&apos;t want current path on Cairo. And I guess Martin and Alex agree to me. I&apos;d like to have at least one comment of the Skia guys.

Yeah, I agree, I think we will save at least one cairo copy here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302450</commentid>
    <comment_count>30</comment_count>
      <attachid>72179</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-31 12:11:49 -0700</bug_when>
    <thetext>Comment on attachment 72179
Proposed patch

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

The design looks good. A CG guy should look at the code GraphicsContextCG changes. Kling will also run pixeltests with this patch, to make sure that we don&apos;t get regressions.

&gt; WebCore/platform/graphics/GraphicsContext.h:306
&gt;  

Add a fixme, that these functions are deprecated.

&gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:307
&gt; -    CGContextRef context = platformContext();
&gt; -    CGContextBeginPath(context);
&gt; -    float r = (float)rect.width() / 2;
&gt; -    CGContextAddArc(context, rect.x() + r, rect.y() + r, r, 0.0f, 2.0f * piFloat, 0);
&gt; -    CGContextClosePath(context);
&gt; -
&gt; -    drawPath();
&gt; +    Path path;
&gt; +    path.addEllipse(rect);
&gt; +    drawPath(path);

Not sure, if the code in PathCG looks identical, if not, this will change some pixel tests (maybe just visible with a tolerance of 0)

&gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:399
&gt; +static Path createConvexPolygonPath(size_t numPoints, const FloatPoint* points)

Doesn&apos;t this give back a copy of the created Path?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302451</commentid>
    <comment_count>31</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-31 12:14:06 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Add a fixme, that these functions are deprecated.
Hm, was talking about beginPath and addPath in GraphicsContext.h, not sure why the marked lines are not on the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302645</commentid>
    <comment_count>32</comment_count>
      <attachid>72503</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-01 06:55:51 -0700</bug_when>
    <thetext>Created attachment 72503
Proposed patch v2

Rebased and updated patch.

beginPath() -&gt; deprecatedBeginPath()
addPath() -&gt; deprecatedAddPath()

Layout test results on Snow Leopard (I don&apos;t think any of the failures are legit):
http://chaos.troll.no/~kling/48516/layout-test-results/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302823</commentid>
    <comment_count>33</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-01 11:53:46 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Created an attachment (id=72503) [details]
&gt; Proposed patch v2
&gt; 
&gt; Rebased and updated patch.
&gt; 
&gt; beginPath() -&gt; deprecatedBeginPath()
&gt; addPath() -&gt; deprecatedAddPath()
&gt; 
&gt; Layout test results on Snow Leopard (I don&apos;t think any of the failures are legit):
&gt; http://chaos.troll.no/~kling/48516/layout-test-results/results.html

Has this patch been performance tested?

I am slightly concerned by this patch as it seems to not gain us anything other than move from being more like one API to being more like another.  I certainly think we need a very good reason before making such a dramatic change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302829</commentid>
    <comment_count>34</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-01 12:01:02 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; Created an attachment (id=72503) [details] [details]
&gt; &gt; Proposed patch v2
&gt; &gt; 
&gt; &gt; Rebased and updated patch.
&gt; &gt; 
&gt; &gt; beginPath() -&gt; deprecatedBeginPath()
&gt; &gt; addPath() -&gt; deprecatedAddPath()
&gt; &gt; 
&gt; &gt; Layout test results on Snow Leopard (I don&apos;t think any of the failures are legit):
&gt; &gt; http://chaos.troll.no/~kling/48516/layout-test-results/results.html
&gt; 
&gt; Has this patch been performance tested?
&gt; 
&gt; I am slightly concerned by this patch as it seems to not gain us anything other than move from being more like one API to being more like another.  I certainly think we need a very good reason before making such a dramatic change.

Many posters above already talked about the benefits. The main benefit in my eyes is that most platforms don&apos;t support the currenPath concept of CG. Storing the currentPath is a performance and memory issue on those platforms. This is a very good reason to move to a new concept for me.
On the other hand, I don&apos;t see performance issues for CG, beside the one I blamed on my first review. If there are performance problems, they need to be fixed before this patch gets landed of course. Please help us to find them.
Is there a performance test on webkit for graphics?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302861</commentid>
    <comment_count>35</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-01 13:07:57 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; (In reply to comment #32)
&gt; &gt; &gt; Created an attachment (id=72503) [details] [details] [details]
&gt; &gt; &gt; Proposed patch v2
&gt; &gt; &gt; 
&gt; &gt; &gt; Rebased and updated patch.
&gt; &gt; &gt; 
&gt; &gt; &gt; beginPath() -&gt; deprecatedBeginPath()
&gt; &gt; &gt; addPath() -&gt; deprecatedAddPath()
&gt; &gt; &gt; 
&gt; &gt; &gt; Layout test results on Snow Leopard (I don&apos;t think any of the failures are legit):
&gt; &gt; &gt; http://chaos.troll.no/~kling/48516/layout-test-results/results.html
&gt; &gt; 
&gt; &gt; Has this patch been performance tested?
&gt; &gt; 
&gt; &gt; I am slightly concerned by this patch as it seems to not gain us anything other than move from being more like one API to being more like another.  I certainly think we need a very good reason before making such a dramatic change.

We should get some numbers, agreed. But certainly calling one method instead of three is better.

context-&gt;beginPath();
context-&gt;addPath(path);
context-&gt;fillPath()

vs. context-&gt;fillPath(path).

Dirk already said that we also save memory, as the current path concept is not giving us any benefits.
And I don&apos;t think this patch is anything but dramatic, it&apos;s rather simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312023</commentid>
    <comment_count>36</comment_count>
      <attachid>74492</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-20 19:10:38 -0800</bug_when>
    <thetext>Created attachment 74492
Proposed patch v3

Rebased on trunk. No code changes since last time.

&gt; Has this patch been performance tested?

Yes, on Qt. It improves performance for us (nothing to write home about, but a measurable progression), since we avoid a bunch of work maintaining transforms etc. The same should eventually be true for everyone but CG, since we&apos;re all emulating the &quot;current path&quot; concept.

People with port-specific knowledge may need to come in after this lands and tweak whatever&apos;s appropriate for their GraphicsContext implementation though. That will mostly consist of removing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312063</commentid>
    <comment_count>37</comment_count>
      <attachid>74492</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-20 23:36:18 -0800</bug_when>
    <thetext>Comment on attachment 74492
Proposed patch v3

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

&gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:399
&gt; +static Path createConvexPolygonPath(size_t numPoints, const FloatPoint* points)

Path&amp; not Path. Don&apos;t copy the created path.

&gt; WebCore/platform/graphics/qt/GraphicsContextQt.cpp:491
&gt; +void GraphicsContext::fillPath(const Path&amp; pathToFill)

Is fillPath better? Not sure.

&gt; WebCore/platform/graphics/qt/GraphicsContextQt.cpp:529
&gt; +void GraphicsContext::strokePath(const Path&amp; pathToStroke)

Ditto. strokePath?

&gt; WebCore/platform/graphics/qt/GraphicsContextQt.cpp:755
&gt; +void GraphicsContext::clipPath(const Path&amp; path, WindRule clipRule)

That is inconsistent, you name it pathToFill and pathToStroke above and name the new path just &apos;path&apos;, but here you call it &apos;path&apos; and the new path &apos;newPath&apos;. Could you use one schema? E.g. clipPath here?

&gt; WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:423
&gt; +void GraphicsContext::clipPath(const Path&amp; pathToClip, WindRule clipRule)

See above.

&gt; WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:730
&gt; +void GraphicsContext::fillPath(const Path&amp; pathToFill)

Ditto.

&gt; WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:1188
&gt; +void GraphicsContext::strokePath(const Path&amp; pathToStroke)

Ditto.

&gt; WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp:1332
&gt; +    // FIXME: Be smarter about this.
&gt; +    beginPath();
&gt; +    addPath(path);

You use this pattern multiple times, how would you make it smarter? What is wrong with it right now? Just that you use the GC functions instead of platform code? Can you add more details please?

&gt; WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp:1386
&gt; +    // FIXME: Be smarter about this.
&gt; +    beginPath();
&gt; +    addPath(path);
&gt; +

Ditto. And on other places as well.

&gt; WebCore/platform/graphics/wx/GraphicsContextWx.cpp:541
&gt; +    // FIXME: Be smarter about this.
&gt; +    beginPath();
&gt; +    addPath(path);

Ditto. Won&apos;t continue this on the bug.

&gt; WebCore/rendering/RenderObject.cpp:958
&gt; -        graphicsContext-&gt;addPath(borderPath);
&gt; -        graphicsContext-&gt;strokePath();
&gt; +        graphicsContext-&gt;strokePath(borderPath);

hm, Is this correct? We added a Path to the existing one before, with your patch you delete the existing one. Is it possible that an old Path still exist? If not, where is the beginPath()?

&gt; WebCore/rendering/svg/RenderSVGPath.cpp:186
&gt; -        context-&gt;addPath(m_path);
&gt; +        path = m_path;

this slows down the common case. Please don&apos;t copy the path here!

&gt; WebCore/rendering/svg/RenderSVGPath.cpp:189
&gt; +        strokePaintingResource-&gt;postApplyResource(this, context, ApplyToStrokeMode, path);

better to add something like nonScalingStroke ? path : m_path

&gt; WebCore/rendering/svg/RenderSVGPath.cpp:194
&gt; +            fallbackResource-&gt;postApplyResource(this, context, ApplyToStrokeMode, path);

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312111</commentid>
    <comment_count>38</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-11-21 08:28:17 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 74492 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74492&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:399
&gt; &gt; +static Path createConvexPolygonPath(size_t numPoints, const FloatPoint* points)
&gt; 
&gt; Path&amp; not Path. Don&apos;t copy the created path.

You can&apos;t return a reference here; the Path is being created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312113</commentid>
    <comment_count>39</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-21 08:34:02 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; &gt; (From update of attachment 74492 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74492&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:399
&gt; &gt; &gt; +static Path createConvexPolygonPath(size_t numPoints, const FloatPoint* points)
&gt; &gt; 
&gt; &gt; Path&amp; not Path. Don&apos;t copy the created path.
&gt; 
&gt; You can&apos;t return a reference here; the Path is being created.

Yes, but maybe if can be a void function and it gets a Path&amp;. Of course it will need the caller functions to create a Path first, but I think it is still better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312648</commentid>
    <comment_count>40</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-22 18:38:49 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; &gt; WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp:1386
&gt; &gt; +    // FIXME: Be smarter about this.
&gt; &gt; +    beginPath();
&gt; &gt; +    addPath(path);
&gt; &gt; +
&gt; You use this pattern multiple times, how would you make it smarter? What is wrong with it right now? Just that you use the GC functions instead of platform code? Can you add more details please?

I don&apos;t know what the best thing to do on each platform is. It looks like this could be done in nicer ways, but since I can&apos;t even build this code, I&apos;d rather not make any larger changes.

&gt; &gt; WebCore/rendering/RenderObject.cpp:958
&gt; &gt; -        graphicsContext-&gt;addPath(borderPath);
&gt; &gt; -        graphicsContext-&gt;strokePath();
&gt; &gt; +        graphicsContext-&gt;strokePath(borderPath);
&gt; 
&gt; hm, Is this correct? We added a Path to the existing one before, with your patch you delete the existing one. Is it possible that an old Path still exist? If not, where is the beginPath()?

I believe that&apos;s simply a bug in the current code. Though keep in mind that some GraphicsContext calls clear the path on completion, so a beginPath() may not be necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312652</commentid>
    <comment_count>41</comment_count>
      <attachid>74626</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-22 18:49:30 -0800</bug_when>
    <thetext>Created attachment 74626
Proposed patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312669</commentid>
    <comment_count>42</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-22 19:49:48 -0800</bug_when>
    <thetext>Attachment 74626 did not build on mac:
Build output: http://queues.webkit.org/results/6330010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312678</commentid>
    <comment_count>43</comment_count>
      <attachid>74629</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-22 20:25:33 -0800</bug_when>
    <thetext>Created attachment 74629
Proposed patch v5

D&apos;oh! Add missing semicolon in GraphicsContextCG.cpp..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312687</commentid>
    <comment_count>44</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-22 20:46:33 -0800</bug_when>
    <thetext>Attachment 74626 did not build on chromium:
Build output: http://queues.webkit.org/results/6419005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314521</commentid>
    <comment_count>45</comment_count>
      <attachid>74629</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-29 11:08:42 -0800</bug_when>
    <thetext>Comment on attachment 74629
Proposed patch v5

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

Looks great to me, still a nitpick though:

&gt; WebCore/platform/graphics/GraphicsContext.h:304
&gt; +#if !PLATFORM(QT) &amp;&amp; !PLATFORM(CAIRO) &amp;&amp; !PLATFORM(CG) &amp;&amp; !PLATFORM(HAIKU)

Could you only list the platforms that actually need begin/addPath here, instead of blacklisting those who don&apos;t?

&gt; WebCore/rendering/svg/SVGInlineTextBox.cpp:347
&gt; +    releasePaintingResource(context, Path());

Hm, this seems wrong to me. The text code path doesn&apos;t need any Path usage at all for painting text.
This implies that postApplyResource() should take a Path* pointer, so that we can avoid creating a temporary Path() object here. Agreed?

&gt; WebCore/rendering/svg/SVGInlineTextBox.cpp:505
&gt; +        releasePaintingResource(context, path);

You&apos;d just have to use &amp;path here then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315057</commentid>
    <comment_count>46</comment_count>
      <attachid>75150</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-30 08:02:11 -0800</bug_when>
    <thetext>Created attachment 75150
Proposed patch v6

Addressed Niko&apos;s comments- postApplyResource() now takes a Path* instead of a Path&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315125</commentid>
    <comment_count>47</comment_count>
      <attachid>75150</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-30 10:01:44 -0800</bug_when>
    <thetext>Comment on attachment 75150
Proposed patch v6

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

Looks great! Don&apos;t think that it needs another round. But would be great if you can fix the following snippets. r=me.

&gt; WebCore/ChangeLog:5
&gt; +        GraphicsContext: Remove &quot;current path&quot; and have strokePath, fillPath and clipPath take a Path argument.

I sometime make mistakes with english phrasing. Not sure, but have ... take sounds strange :-P

&gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:@
&gt;  void GraphicsContext::drawConvexPolygon(size_t npoints, const FloatPoint* points

Don&apos;t like the name npoints. Can you rename it to numPoints like in addConvexPolygonToPath? Or rename both to numberOfPoints?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315149</commentid>
    <comment_count>48</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-30 10:41:40 -0800</bug_when>
    <thetext>Retitled this based on Dirk’s comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315159</commentid>
    <comment_count>49</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-30 10:53:58 -0800</bug_when>
    <thetext>Committed r72926: &lt;http://trac.webkit.org/changeset/72926&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72179</attachid>
            <date>2010-10-28 06:14:19 -0700</date>
            <delta_ts>2010-11-01 06:55:51 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-48516.diff</filename>
            <type>text/plain</type>
            <size>55971</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODk0YjgzMi4uYTY1MDE2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDcgQEAKKzIwMTAtMTAtMjggIEFuZHJlYXMgS2xp
bmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDogUmVtb3ZlICJjdXJyZW50IHBhdGgiIGFu
ZCBoYXZlIHN0cm9rZVBhdGgsIGZpbGxQYXRoIGFuZCBjbGlwUGF0aCB0YWtlIGEgUGF0aCBhcmd1
bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1
MTYKKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgaXMgcmVmYWN0b3Jpbmcgb25seS4KKwor
ICAgICAgICBmaWxsUGF0aCgpIC0+IGZpbGxQYXRoKGNvbnN0IFBhdGgmKQorICAgICAgICBzdHJv
a2VQYXRoKCkgLT4gc3Ryb2tlUGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgY2xpcFBhdGgoV2lu
ZFJ1bGUpIC0+IGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkKKworICAgICAgICBkcmF3
UGF0aCgpIHdhcyBvbmx5IHVzZWQgYnkgQ0csIHNvIG1hZGUgaXQgUExBVEZPUk0oQ0cpIHNwZWNp
ZmljLgorCisgICAgICAgIFRoZSBRdCwgQ0cgYW5kIENhaXJvIGltcGxlbWVudGF0aW9ucyBhcmUg
YmVzdC1lZmZvcnQuCisgICAgICAgIEZvciB0aGUgcmVzdCwgSSd2ZSBwdXQgYmVnaW5QYXRoL2Fk
ZFBhdGggYW5kIEZJWE1FcyBpbiB0aGUgdGhyZWUgYWZmZWN0ZWQgbWV0aG9kcy4KKworICAgICAg
ICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmRyYXdPdXRsaW5lZFF1YWQpOgorICAgICAgICAqIG1hdGhtbC9SZW5k
ZXJNYXRoTUxSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OnBh
aW50KToKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb252ZXhQb2x5Z29u
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4
dE9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZHJhd0JveFNp
ZGVGcm9tUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6
OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHN2
Zy9TVkdGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdG
b250KToKKwogMjAxMC0xMC0yNyAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4gYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDM5ZTZiMzYuLmI4
OTA4NTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtMzU1LDkgKzM1NSw4IEBAIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0NGNsaXBFUktOU180UGF0aEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NGNs
aXBFUktOU185RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0c2F2ZUV2
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDVzY2FsZUVSS05TXzlGbG9hdFNpemVFCi1f
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDdhZGRQYXRoRVJLTlNfNFBhdGhFCiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDdyZXN0b3JlRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0OGZpbGxQYXRoRXYKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxQYXRo
RVJLTlNfNFBhdGhFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05T
XzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05T
XzlGbG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQ5c2V0U2hhZG93RVJLTlNfOUZsb2F0U2l6ZUVmUktOU181Q29sb3JFTlNf
MTBDb2xvclNwYWNlRQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCmluZGV4IGIxZDdiMjMuLmM2OWFhZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTgyMyw5ICs4MjMsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbCgpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBjLT5iZWdpblBhdGgoKTsK
LSAgICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjLT5maWxsUGF0aCgpOworICAg
ICAgICBjLT5maWxsUGF0aChtX3BhdGgpOwogICAgICAgICBkaWREcmF3KG1fcGF0aC5ib3VuZGlu
Z1JlY3QoKSk7CiAgICAgfQogCkBAIC04NDMsOSArODQxLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnN0cm9rZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9wYXRo
LmlzRW1wdHkoKSkgewotICAgICAgICBjLT5iZWdpblBhdGgoKTsKLSAgICAgICAgYy0+YWRkUGF0
aChtX3BhdGgpOwotCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIC8vIEZhc3QgYXBwcm94aW1h
dGlvbiBvZiB0aGUgc3Ryb2tlJ3MgYm91bmRpbmcgcmVjdC4KICAgICAgICAgLy8gVGhpcyB5aWVs
ZHMgYSBzbGlnaHRseSBvdmVyc2l6ZWQgcmVjdCBidXQgaXMgdmVyeSBmYXN0CkBAIC04NTYsNyAr
ODUxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZSgpCiAgICAgICAg
IENhbnZhc1N0cm9rZVN0eWxlQXBwbGllciBzdHJva2VBcHBsaWVyKHRoaXMpOwogICAgICAgICBG
bG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gbV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tl
QXBwbGllcik7CiAjZW5kaWYKLSAgICAgICAgYy0+c3Ryb2tlUGF0aCgpOworICAgICAgICBjLT5z
dHJva2VQYXRoKG1fcGF0aCk7CiAgICAgICAgIGRpZERyYXcoYm91bmRpbmdSZWN0KTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMzFmNDUw
NS4uOTllN2M4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
QEAgLTE4MTMsMjEgKzE4MTMsMTggQEAgc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY28KICAgICAvLyBv
ZiBvdXRsaW5lIChiZWNhdXNlIGluZmxhdGluZyBhIHF1YWQgaXMgaGFyZCkKICAgICB7CiAgICAg
ICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250ZXh0LmFkZFBhdGgocXVhZFBhdGgpOwog
ICAgICAgICBjb250ZXh0LmNsaXBPdXQocXVhZFBhdGgpOwogCi0gICAgICAgIGNvbnRleHQuYWRk
UGF0aChxdWFkUGF0aCk7CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxp
bmVUaGlja25lc3MpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aCgpOwor
ICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgocXVhZFBhdGgpOwogCiAgICAgICAgIGNvbnRleHQu
cmVzdG9yZSgpOwogICAgIH0KIAogICAgIC8vIE5vdyBkbyB0aGUgZmlsbAotICAgIGNvbnRleHQu
YWRkUGF0aChxdWFkUGF0aCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmZpbGxQYXRoKCk7CisgICAgY29udGV4
dC5maWxsUGF0aChxdWFkUGF0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1YWRX
aXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwg
Y29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwIGIvV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKaW5kZXggYmE2MGM5Zi4uZjBhN2FiYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKKysrIGIvV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKQEAgLTE2Nyw5ICsxNjcsNyBAQCB2b2lkIFJlbmRlck1h
dGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgLy8g
ZHJhdyB0byBlbmQKICAgICByb290LmFkZExpbmVUbyhsZWZ0RW5kKTsKICAgICAKLSAgICBpbmZv
LmNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChyb290KTsK
LSAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICBpbmZvLmNvbnRleHQtPnN0cm9r
ZVBhdGgocm9vdCk7CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgCkBAIC0x
ODEsOCArMTc5LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIGlu
Zm8sIGludCB0eCwgaW50IHR5KQogICAgIG1hc2suYWRkTGluZVRvKHRvcExlZnQpOwogICAgIG1h
c2suYWRkTGluZVRvKEZsb2F0UG9pbnQoMiAqIHRvcExlZnQueCgpIC0gbGVmdEVuZC54KCksIDIg
KiB0b3BMZWZ0LnkoKSAtIGxlZnRFbmQueSgpKSk7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5i
ZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgobWFzayk7CiAgICAgaW5mby5j
b250ZXh0LT5jbGlwKG1hc2spOwogICAgIAogICAgIC8vIERyYXcgdGhlIHRoaWNrIHBhcnQgb2Yg
dGhlIHJvb3QuCkBAIC0xOTMsOSArMTg5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWlu
dChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIGxpbmUubW92ZVRvKGJvdHRv
bUxlZnQpOwogICAgIGxpbmUuYWRkTGluZVRvKHRvcExlZnQpOwogCi0gICAgaW5mby5jb250ZXh0
LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgobGluZSk7Ci0gICAgaW5m
by5jb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKGxp
bmUpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgYi9XZWJDb3JlL21h
dGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAppbmRleCA4NjJkOGE0Li4xMjg1YWNkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAorKysg
Yi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcApAQCAtMTMyLDEwICsx
MzIsOCBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5m
bywgaW50IHR4LCBpbnQgdHkpCiAgICAgcm9vdC5hZGRMaW5lVG8odG9wTGVmdCk7CiAgICAgLy8g
ZHJhdyB0byBlbmQKICAgICByb290LmFkZExpbmVUbyhsZWZ0RW5kKTsKLSAgICAKLSAgICBpbmZv
LmNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChyb290KTsK
LSAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgoKTsKKworICAgIGluZm8uY29udGV4dC0+c3Ry
b2tlUGF0aChyb290KTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICAKQEAg
LTE0Nyw4ICsxNDUsNiBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50
SW5mbyYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7
CiAgICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5k
LngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKICAgICAKLSAgICBpbmZvLmNv
bnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChtYXNrKTsKICAg
ICBpbmZvLmNvbnRleHQtPmNsaXAobWFzayk7CiAgICAgCiAgICAgLy8gRHJhdyB0aGUgdGhpY2sg
cGFydCBvZiB0aGUgcm9vdC4KQEAgLTE1OSw5ICsxNTUsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFNx
dWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgbGlu
ZS5tb3ZlVG8oYm90dG9tTGVmdCk7CiAgICAgbGluZS5hZGRMaW5lVG8odG9wTGVmdCk7CiAgICAg
Ci0gICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBh
dGgobGluZSk7Ci0gICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgaW5mby5jb250
ZXh0LT5zdHJva2VQYXRoKGxpbmUpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgp
OwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5k
ZXggMjQ2NWE3Yy4uZDViYTkxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCkBAIC0xMjgsNyArMTI4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEdyYXBoaWNzQ29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAg
ICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBQYXRoOwogICAgIGNsYXNzIFBhdHRlcm47CiAgICAg
Y2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsKQEAgLTE5
Nyw2ICsxOTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAg
ICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0
dGVybigpOworICAgICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKICNlbmRpZgogCiAg
ICAgICAgIHZvaWQgc2F2ZSgpOwpAQCAtMjExLDkgKzIxMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZv
aWQgZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCos
IGJvb2wgc2hvdWxkQW50aWFsaWFzID0gZmFsc2UpOwogCi0gICAgICAgIHZvaWQgZHJhd1BhdGgo
KTsKLSAgICAgICAgdm9pZCBmaWxsUGF0aCgpOwotICAgICAgICB2b2lkIHN0cm9rZVBhdGgoKTsK
KyAgICAgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7CisgICAgICAgIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJik7CiAKICAgICAgICAgLy8gQXJjIGRyYXdpbmcgKHVzZWQgYnkgYm9y
ZGVyLXJhZGl1cyBpbiBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQgdGhlIG1vbWVudC4K
ICAgICAgICAgdm9pZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFuZ2xlLCBp
bnQgYW5nbGVTcGFuKTsKQEAgLTI1Niw3ICsyNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xpcE91
dEVsbGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBPdXRSb3Vu
ZGVkUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50
U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUm
IGJvdHRvbVJpZ2h0KTsKLSAgICAgICAgdm9pZCBjbGlwUGF0aChXaW5kUnVsZSk7CisgICAgICAg
IHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKICAgICAgICAgdm9pZCBjbGlw
Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBh
bnRpYWxpYXMgPSB0cnVlKTsKICAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYpOwogCkBAIC0zMDUsOCArMzA0LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvcik7CiAKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShDQUlSTykgJiYg
IVBMQVRGT1JNKENHKSAmJiAhUExBVEZPUk0oSEFJS1UpCiAgICAgICAgIHZvaWQgYmVnaW5QYXRo
KCk7CiAgICAgICAgIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJik7CisjZW5kaWYKIAogICAgICAg
ICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwogCkBAIC0zOTcsNyArMzk4LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIGJvb2wgaW5UcmFuc3BhcmVu
Y3lMYXllcigpIGNvbnN0OwotICAgICAgICBQbGF0Zm9ybVBhdGgqIGN1cnJlbnRQYXRoKCk7CiAg
ICAgICAgIHZvaWQgcHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3QgJnJl
Y3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhhTWFzayk7CiAgICAgICAgIFFQZW4gcGVu
KCk7CiAgICAgICAgIHN0YXRpYyBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlIHRvUXRDb21wb3Np
dGlvbk1vZGUoQ29tcG9zaXRlT3BlcmF0b3Igb3ApOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAppbmRleCA5ODVjYWQ5Li42OTY5MzJl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFBy
aXZhdGUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFBy
aXZhdGUuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzksOCAr
NzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM7CiAjaWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgIGZsb2F0IGdsb2JhbEFscGhh
OwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhdGhU
cmFuc2Zvcm07CiAjZW5kaWYKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDA4NDdkYTEu
LjVhMTA1MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC01MzEsNDQgKzUzMSwyNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3Qg
RmxvYXRQb2ludCogcG9pbgogICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHNhdmVkRmlsbFJ1
bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNyOwotCi0gICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBtX2RhdGEtPm1fcGVuZGluZ1Bh
dGguY29udGV4dCgpKTsKKyAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIHBhdGgucGxhdGZv
cm1QYXRoKCktPmNvbnRleHQoKSk7CiAgICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9j
b21tb24sIGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYWlyb190KiBj
ciA9IG1fZGF0YS0+Y3I7Ci0gICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBtX2RhdGEtPm1f
cGVuZGluZ1BhdGguY29udGV4dCgpKTsKKyAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIHBh
dGgucGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSk7CiAgICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0
aCh0aGlzLCBtX2NvbW1vbiwgY3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bh
dGgoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLQotICAgIHNldFBhdGhPbkNhaXJvQ29udGV4
dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQoKSk7Ci0KLSAgICBjYWlyb19zZXRf
ZmlsbF9ydWxlKGNyLCBmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVM
RV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsKLSAgICBkcmF3UGF0aFNoYWRv
dyh0aGlzLCBtX2NvbW1vbiwgRmlsbEFuZFN0cm9rZSk7Ci0KLSAgICBzZXRQbGF0Zm9ybUZpbGwo
dGhpcywgY3IsIG1fY29tbW9uKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZSh0aGlzLCBjciwgbV9j
b21tb24pOwotICAgIGNhaXJvX25ld19wYXRoKGNyKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQpAQCAtNjA3LDEyICs1ODksMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQo
Y3IsIHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSk7CiAgICAgY2Fpcm9fc2V0X2ZpbGxf
cnVsZShjciwgY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5f
T0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwogICAgIGNhaXJvX2NsaXAoY3IpOwogfQpA
QCAtMTAwMiwyNSArOTg1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKICAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9k
YXRhLT5jciwgdG9DYWlyb09wZXJhdG9yKG9wKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblBhdGgoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNhaXJvX25ld19wYXRoKG1fZGF0YS0+bV9wZW5kaW5nUGF0aC5jb250ZXh0
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNhaXJvX21hdHJpeF90IGN1cnJlbnRNYXRyaXg7Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChtX2Rh
dGEtPmNyLCAmY3VycmVudE1hdHJpeCk7Ci0gICAgY2Fpcm9fc2V0X21hdHJpeChtX2RhdGEtPm1f
cGVuZGluZ1BhdGguY29udGV4dCgpLCAmY3VycmVudE1hdHJpeCk7Ci0gICAgYXBwZW5kV2ViQ29y
ZVBhdGhUb0NhaXJvQ29udGV4dChtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpLCBwYXRo
KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVDYWlyby5oCmluZGV4IDUyN2NiNzIuLjQ5NGI0MGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fp
cm8uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAjaW5jbHVkZSAiQ29u
dGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAt
OTcsNyArOTYsNiBAQCBwdWJsaWM6CiAKICAgICBjYWlyb190KiBjcjsKICAgICBWZWN0b3I8Zmxv
YXQ+IGxheWVyczsKLSAgICBDYWlyb1BhdGggbV9wZW5kaW5nUGF0aDsKIAogICAgIENvbnRleHRT
aGFkb3cgc2hhZG93OwogICAgIFZlY3RvcjxDb250ZXh0U2hhZG93PiBzaGFkb3dTdGFjazsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
aW5kZXggOWUwYTJmNS4uOWM3MzgwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTI5OSwyMSArMjk5LDEyIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQyKQogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhl
IGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBGSVhNRTogQ0cgYWRkZWQg
Q0dDb250ZXh0QWRkRWxsaXBzZWluUmVjdCBpbiBUaWdlciwgc28gd2Ugc2hvdWxkIGJlIGFibGUg
dG8gcXVpdGUgZWFzaWx5IGRyYXcgYW4gZWxsaXBzZS4KLSAgICAvLyBUaGlzIGNvZGUgY2FuIG9u
bHkgaGFuZGxlIGNpcmNsZXMsIG5vdCBlbGxpcHNlcy4gQnV0IGtodG1sIG9ubHkKLSAgICAvLyB1
c2VzIGl0IGZvciBjaXJjbGVzLgotICAgIEFTU0VSVChyZWN0LndpZHRoKCkgPT0gcmVjdC5oZWln
aHQoKSk7Ci0KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIENHQ29u
dGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBmbG9hdCByID0gKGZsb2F0KXJlY3Qud2lkdGgo
KSAvIDI7Ci0gICAgQ0dDb250ZXh0QWRkQXJjKGNvbnRleHQsIHJlY3QueCgpICsgciwgcmVjdC55
KCkgKyByLCByLCAwLjBmLCAyLjBmICogcGlGbG9hdCwgMCk7Ci0gICAgQ0dDb250ZXh0Q2xvc2VQ
YXRoKGNvbnRleHQpOwotCi0gICAgZHJhd1BhdGgoKTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0
aC5hZGRFbGxpcHNlKHJlY3QpOworICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCiAKQEAgLTQwNSwx
MyArMzk2LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVj
dCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwCiAgICAgQ0dDb250ZXh0UmVzdG9y
ZUdTdGF0ZShjb250ZXh0KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkQ29udmV4UG9seWdvblRvQ29u
dGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQ
b2ludCogcG9pbnRzKQorc3RhdGljIFBhdGggY3JlYXRlQ29udmV4UG9seWdvblBhdGgoc2l6ZV90
IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQogewotICAgIENHQ29udGV4dEJl
Z2luUGF0aChjb250ZXh0KTsKLSAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBwb2lu
dHNbMF0ueCgpLCBwb2ludHNbMF0ueSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG51
bVBvaW50czsgaSsrKQotICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBw
b2ludHNbaV0ueCgpLCBwb2ludHNbaV0ueSgpKTsKLSAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29u
dGV4dCk7CisgICAgQVNTRVJUKG51bVBvaW50cyA+IDApOworCisgICAgUGF0aCBwYXRoOworICAg
IHBhdGgubW92ZVRvKHBvaW50c1swXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBudW1Q
b2ludHM7ICsraSkKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKKyAgICBwYXRo
LmNsb3NlU3VicGF0aCgpOworCisgICAgcmV0dXJuIHBhdGg7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2lu
dCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQpAQCAtNDI3LDggKzQyMiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgRmxv
YXRQb2ludCogcG9pbnRzCiAgICAgaWYgKGFudGlhbGlhc2VkICE9IHNob3VsZEFudGlhbGlhcygp
KQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgYW50aWFsaWFz
ZWQpOwogCi0gICAgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChjb250ZXh0LCBucG9pbnRzLCBw
b2ludHMpOwotICAgIGRyYXdQYXRoKCk7CisgICAgZHJhd1BhdGgoY3JlYXRlQ29udmV4UG9seWdv
blBhdGgobnBvaW50cywgcG9pbnRzKSk7CiAKICAgICBpZiAoYW50aWFsaWFzZWQgIT0gc2hvdWxk
QW50aWFsaWFzKCkpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0
LCBzaG91bGRBbnRpYWxpYXMoKSk7CkBAIC00NDYsOSArNDQwLDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9p
bnQqIHBvaW4KIAogICAgIGlmIChhbnRpYWxpYXMgIT0gc2hvdWxkQW50aWFsaWFzKCkpCiAgICAg
ICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBhbnRpYWxpYXMpOwotICAg
IAotICAgIGFkZENvbnZleFBvbHlnb25Ub0NvbnRleHQoY29udGV4dCwgbnVtUG9pbnRzLCBwb2lu
dHMpOwotICAgIGNsaXBQYXRoKFJVTEVfTk9OWkVSTyk7CisKKyAgICBjbGlwUGF0aChjcmVhdGVD
b252ZXhQb2x5Z29uUGF0aChudW1Qb2ludHMsIHBvaW50cyksIFJVTEVfTk9OWkVSTyk7CiAKICAg
ICBpZiAoYW50aWFsaWFzICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFzKCkpOwpAQCAtNTExLDcg
KzUwNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0CiAgICAgcmV0dXJuIHNob3VsZEZpbGwg
fHwgc2hvdWxkU3Ryb2tlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIxLDExICs1MTQs
MTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKIAogICAgIGlmIChzdGF0ZS5m
aWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAgICAgICAgLy8gV2UgZG9u
J3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEgcGF0aCB1c2luZyBn
cmFkaWVudHMKLSAgICAgICAgZmlsbFBhdGgoKTsKLSAgICAgICAgc3Ryb2tlUGF0aCgpOworICAg
ICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgICAgICBmaWxsUGF0aChw
YXRoKTsKKyAgICAgICAgc3Ryb2tlUGF0aChwYXRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworCiAgICAgaWYgKHN0YXRlLmZpbGxQYXR0
ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAgICAgaWYgKHN0YXRlLnN0cm9rZVBh
dHRlcm4pCkBAIC01NDQsMTMgKzU0MSwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFBhdGhX
aXRoRmlsbFJ1bGUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdpbmRSdWxlIGZpbGxSdWxlKQogICAg
ICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKKyAgICBD
R0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwogICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdy
YWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAg
IGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKQEAgLTU2OCwxMyArNTY4LDE2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgZmlsbFBhdGhXaXRoRmlsbFJ1bGUo
Y29udGV4dCwgZmlsbFJ1bGUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAorICAgIENHQ29udGV4
dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgu
cGxhdGZvcm1QYXRoKCkpOworCiAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVu
dCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0Nv
bnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKQEAgLTY0Myw4ICs2NDYs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGgu
YWRkUm91bmRlZFJlY3QocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRv
bVJpZ2h0KTsKLSAgICBhZGRQYXRoKHBhdGgpOwotICAgIGZpbGxQYXRoKCk7CisgICAgZmlsbFBh
dGgocGF0aCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3Bh
Y2UgIT0gY29sb3JTcGFjZSkKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmls
bENvbG9yLCBvbGRDb2xvclNwYWNlKTsKQEAgLTY4MCwxOSArNjgyLDIzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAg
IENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIUNHQ29udGV4dElzUGF0aEVtcHR5KGNvbnRl
eHQpKSB7Ci0gICAgICAgIGlmIChjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQpCi0gICAgICAgICAg
ICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENH
Q29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgfQorICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0
Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwg
cGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisKKyAgICBpZiAoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0RE
KQorICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CisgICAgZWxzZQorICAgICAgICBD
R0NvbnRleHRDbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKQEAg
LTg3NCwxNiArODgwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVK
b2luIGpvaW4pCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkK
LXsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIENHQ29u
dGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotfQot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCmluZGV4IDI1MmFiZDcuLjdlMjUy
MWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3ND
b250ZXh0SGFpa3UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
cGhpY3NDb250ZXh0SGFpa3UuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50
IGFuZ2xlU3AKICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUs
IGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29u
c3QgUGF0aCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTE5MSwxNyArMTkxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICAvLyBGaWxsUmVjdCBhbmQgRmlsbEFyYyBj
YWxscyBhcmUgbmVlZGVkLgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blBhdGgoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0aCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5W
Ry5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRP
cGVuVkcuY3BwCmluZGV4IDM3ZmQ4YWQuLjQ0NzBiNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcApA
QCAtMTM5LDI4ICsxMzksMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAgICBVTlVTRURf
UEFSQU0oc2hvdWxkQW50aWFsaWFzKTsgLy8gRklYTUUKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7
CisgICAgYWRkUGF0aChwYXRoKTsKKwogICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfRklMTF9QQVRI
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfU1RST0tFX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5m
aWxsUnVsZSk7Ci19CisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBi
ZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BhdGgoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfRklMTF9QQVRIIHwgVkdfU1RST0tFX1BBVEgs
IG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5kcmF3UGF0aChWR19TVFJP
S0VfUEFUSCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTIyMSwxMSArMjIxLDE1
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAg
ICBtX2RhdGEtPmludGVyc2VjdENsaXBSZWN0KHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IEJl
IHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgp
OworCiAgICAgbV9kYXRhLT5jbGlwUGF0aCgqKG1fZGF0YS0+Y3VycmVudFBhdGgoKSksIFBhaW50
ZXJPcGVuVkc6OkludGVyc2VjdENsaXAsIGNsaXBSdWxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA4YjM0ZjUx
Li42ODk2ZTFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcApAQCAtMTkzLDkgKzE5Myw2IEBAIHB1YmxpYzoKIAogICAgIEludGVy
cG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CiAKLSAgICAvLyBPbmx5
IHVzZWQgYnkgU1ZHIGZvciBub3cuCi0gICAgUVBhaW50ZXJQYXRoIGN1cnJlbnRQYXRoOwotCiAg
ICAgQ29udGV4dFNoYWRvdyBzaGFkb3c7CiAgICAgUVN0YWNrPENvbnRleHRTaGFkb3c+IHNoYWRv
d1N0YWNrOwogCkBAIC0yMDQsMTMgKzIwMSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNo
YWRvdy5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3c7CiAgICAgfQogCi0gICAgaW5s
aW5lIHZvaWQgY2xlYXJDdXJyZW50UGF0aCgpCi0gICAgewotICAgICAgICBpZiAoIWN1cnJlbnRQ
YXRoLmVsZW1lbnRDb3VudCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjdXJyZW50
UGF0aCA9IFFQYWludGVyUGF0aCgpOwotICAgIH0KLQogICAgIFFSZWN0RiBjbGlwQm91bmRpbmdS
ZWN0KCkgY29uc3QKICAgICB7CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQs
IDgsIDApCkBAIC0zMDAsMTEgKzI5MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
UGxhdGZvcm1TdGF0ZSgpCiAKICAgICBtX2RhdGEtPnAoKS0+cmVzdG9yZSgpOwogCi0gICAgaWYg
KCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSAmJiBtX2NvbW1vbi0+c3RhdGUucGF0aFRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkgewotICAgICAgICBRVHJhbnNmb3JtIG1hdHJpeCA9IG1f
Y29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtOwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRo
ID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJpeDsKLSAgICB9Ci0KICAgICBpZiAobV9kYXRh
LT5zaGFkb3dTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4
dFNoYWRvdygpOwogICAgIGVsc2UKQEAgLTUxNiwxMyArNTAxLDEzIEBAIFFQZW4gR3JhcGhpY3ND
b250ZXh0OjpwZW4oKQogICAgIHJldHVybiBwLT5wZW4oKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoVG9GaWxsKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7Ci0gICAgUVBhaW50ZXJQ
YXRoJiBwYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aDsgLy8gQXZvaWQgZGV0YWNoaW5nIHRoZSBR
UGFpbnRlclBhdGgKKyAgICBRUGFpbnRlclBhdGggcGF0aCA9IHBhdGhUb0ZpbGwucGxhdGZvcm1Q
YXRoKCk7CiAgICAgcGF0aC5zZXRGaWxsUnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwog
CiAgICAgaWYgKG1fZGF0YS0+aGFzU2hhZG93KCkpIHsKQEAgLTUzOSwxOCArNTI0LDE2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgs
IGJydXNoKTsKICAgICB9IGVsc2UKICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgcC0+YnJ1c2go
KSk7Ci0KLSAgICBtX2RhdGEtPmNsZWFyQ3VycmVudFBhdGgoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAgICAg
UVBlbiBwZW4ocC0+cGVuKCkpOwotICAgIFFQYWludGVyUGF0aCYgcGF0aCA9IG1fZGF0YS0+Y3Vy
cmVudFBhdGg7IC8vIEF2b2lkIGRldGFjaGluZyB0aGUgUVBhaW50ZXJQYXRoCisgICAgUVBhaW50
ZXJQYXRoIHBhdGggPSBwYXRoVG9TdHJva2UucGxhdGZvcm1QYXRoKCk7CiAgICAgcGF0aC5zZXRG
aWxsUnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKG1fZGF0YS0+aGFz
U2hhZG93KCkpIHsKQEAgLTU3Myw3ICs1NTYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCgpCiAgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgcGVuKTsKICAgICB9IGVsc2UK
ICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwotICAgIG1fZGF0YS0+Y2xlYXJDdXJy
ZW50UGF0aCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlcGVhdFBhdHRlcm4oUVBh
aW50ZXIqIHAsIFFQaXhtYXAqIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IGJv
b2wgcmVwZWF0WCwgY29uc3QgYm9vbCByZXBlYXRZKQpAQCAtNzQwLDMwICs3MjIsMTEgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgp
LCBRQ29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgp
Ci17Ci0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKCFtX2RhdGEtPmN1
cnJlbnRQYXRoLmVsZW1lbnRDb3VudCgpKSB7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGgg
PSBwYXRoLnBsYXRmb3JtUGF0aCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZGF0
YS0+Y3VycmVudFBhdGguYWRkUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLX0KLQogYm9vbCBH
cmFwaGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAogewogICAgIHJldHVy
biBtX2RhdGEtPmxheWVyQ291bnQ7CiB9CiAKLVBsYXRmb3JtUGF0aCogR3JhcGhpY3NDb250ZXh0
OjpjdXJyZW50UGF0aCgpCi17Ci0gICAgcmV0dXJuICZtX2RhdGEtPmN1cnJlbnRQYXRoOwotfQot
CiBDb250ZXh0U2hhZG93KiBHcmFwaGljc0NvbnRleHQ6OmNvbnRleHRTaGFkb3coKQogewogICAg
IHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CkBAIC03NzcsMTMgKzc0MCwxMyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9kYXRhLT5wKCkt
PnNldENsaXBSZWN0KHJlY3QsIFF0OjpJbnRlcnNlY3RDbGlwKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFQYWludGVy
KiBwID0gbV9kYXRhLT5wKCk7Ci0gICAgUVBhaW50ZXJQYXRoIG5ld1BhdGggPSBtX2RhdGEtPmN1
cnJlbnRQYXRoOworICAgIFFQYWludGVyUGF0aCBuZXdQYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgo
KTsKICAgICBuZXdQYXRoLnNldEZpbGxSdWxlKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCA/IFF0
OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5nRmlsbCk7CiAgICAgcC0+c2V0Q2xpcFBhdGgobmV3
UGF0aCwgUXQ6OkludGVyc2VjdENsaXApOwogfQpAQCAtOTk1LDEyICs5NTgsMTAgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3
aWR0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBRUGFpbnRlclBhdGggcGF0aDsKKyAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSZWN0KHJl
Y3QpOwogICAgIHNldFN0cm9rZVRoaWNrbmVzcyh3aWR0aCk7Ci0gICAgbV9kYXRhLT5jdXJyZW50
UGF0aCA9IHBhdGg7Ci0KLSAgICBzdHJva2VQYXRoKCk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsYykKQEAgLTEx
MjAsMTIgKzEwODEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+cCgpLT50cmFuc2xhdGUo
eCwgeSk7Ci0KLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFFUcmFuc2Zvcm0gbWF0cml4OwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9k
YXRhLT5jdXJyZW50UGF0aCAqIG1hdHJpeC50cmFuc2xhdGUoLXgsIC15KTsKLSAgICAgICAgbV9j
b21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0udHJhbnNsYXRlKHgsIHkpOwotICAgIH0KIH0KIAog
SW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQpAQCAtMTE0MiwxMiArMTA5Nyw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9kYXRhLT5wKCktPnJvdGF0ZSgxODAgLyBNX1BJKnJhZGlhbnMpOwotCi0g
ICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBRVHJhbnNm
b3JtIG1hdHJpeDsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IG1fZGF0YS0+Y3VycmVu
dFBhdGggKiBtYXRyaXgucm90YXRlKC0xODAgLyBNX1BJKnJhZGlhbnMpOwotICAgICAgICBtX2Nv
bW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybS5yb3RhdGUocmFkaWFucyk7Ci0gICAgfQogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzKQpAQCAtMTE1Niwx
MiArMTEwNSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHMpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+cCgpLT5zY2FsZShzLndpZHRoKCks
IHMuaGVpZ2h0KCkpOwotCi0gICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSkg
ewotICAgICAgICBRVHJhbnNmb3JtIG1hdHJpeDsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50UGF0
aCA9IG1fZGF0YS0+Y3VycmVudFBhdGggKiBtYXRyaXguc2NhbGUoMSAvIHMud2lkdGgoKSwgMSAv
IHMuaGVpZ2h0KCkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybS5zY2Fs
ZU5vblVuaWZvcm0ocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKLSAgICB9CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xMjQwLDE1ICsx
MTgzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhLT5wKCktPnNl
dFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJ1ZSk7Ci0KLSAgICAvLyBUcmFuc2Zvcm1hdGlv
bnMgdG8gdGhlIGNvbnRleHQgc2hvdWxkbid0IHRyYW5zZm9ybSB0aGUgY3VycmVudFBhdGguCi0g
ICAgLy8gV2UgaGF2ZSB0byB1bmRvIGV2ZXJ5IGNoYW5nZSBtYWRlIHRvIHRoZSBjb250ZXh0IGZy
b20gdGhlIGN1cnJlbnRQYXRoCi0gICAgLy8gdG8gYXZvaWQgd3JvbmcgZHJhd2luZ3MuCi0gICAg
aWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSAmJiB0cmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpIHsKLSAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXggPSB0cmFuc2Zvcm0uaW52ZXJzZSgp
OwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1h
dHJpeDsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0ubXVsdGlwbHkodHJh
bnNmb3JtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0gICAgfQogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiwgY29uc3QgSW50UmVjdCYpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAKaW5kZXggNGJjOThmYi4uODI0MjAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcApAQCAtNDM0LDEx
ICs0MzQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5jbGlw
UGF0aChwYXRoLCBTa1JlZ2lvbjo6a0RpZmZlcmVuY2VfT3ApOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvQ2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8g
RklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQ
YXRoKHBhdGhUb0NsaXApOworCiAgICAgU2tQYXRoIHBhdGggPSBwbGF0Zm9ybUNvbnRleHQoKS0+
Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAgICBpZiAoIWlzUGF0aFNraWFTYWZl
KGdldENUTSgpLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzM3LDExICs3NDEsMTUgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGhUb0ZpbGwpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBh
dGgoKTsKKyAgICBhZGRQYXRoKHBhdGhUb0ZpbGwpOworCiAgICAgU2tQYXRoIHBhdGggPSBwbGF0
Zm9ybUNvbnRleHQoKS0+Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAgICBpZiAo
IWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgIHJldHVybjsKQEAgLTExODYs
MTEgKzExOTQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRS
ZWN0JiByLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMu
CisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoVG9TdHJva2UpOworCiAgICAgU2tQ
YXRoIHBhdGggPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0
ZXMoKTsKICAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5DRS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dy
YXBoaWNzQ29udGV4dFdpbkNFLmNwcAppbmRleCBhMTFiOGQ4Li41NDcwZTA4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdp
bkNFLmNwcApAQCAtMTM0Miw4ICsxMzQyLDEyIEBAIENvbG9yIGdyYWRpZW50QXZlcmFnZUNvbG9y
KGNvbnN0IEdyYWRpZW50KiBncmFkaWVudCkKICAgICAgICAgLCAoc3RvcC5hbHBoYSArIGxhc3RT
dG9wLmFscGhhKSAqIDAuNWYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Cisg
ICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAg
ICBhZGRQYXRoKHBhdGgpOworCiAgICAgQ29sb3IgYyA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQKICAgICAgICAgPyBncmFkaWVudEF2ZXJhZ2VDb2xvcihtX2NvbW1vbi0+c3RhdGUuZmls
bEdyYWRpZW50LmdldCgpKQogICAgICAgICA6IGZpbGxDb2xvcigpOwpAQCAtMTM5Myw2ICsxMzk3
LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICBpZiAoIW1fZGF0
YS0+bV9kYykKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJv
dXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOworCiAgICAgT3du
UHRyPEhQRU4+IHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3Mo
KSwgc3Ryb2tlU3R5bGUoKSk7CiAKICAgICBpZiAobV9kYXRhLT5tX29wYWNpdHkgPCAxLjBmIHx8
IG1fZGF0YS0+aGFzQWxwaGEoKSkgewpAQCAtMTkxMSw3ICsxOTE5LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVs
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKaW5kZXggMzBkYWE2Ny4uYzY0MzhhZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVs
bGlwc2VJblJlY3QoY29uc3QgSW50UmVjdCYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQpAQCAtNTM4LDMwICs1MzgsMzIgQEAgSW50ZXJwb2xhdGlvblF1YWxpdHkgR3Jh
cGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKICAgICByZXR1
cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
IHsKICNpZiBVU0UoV1hHQykKKyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgor
ICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aCk7CisKICAgICB3eEdyYXBoaWNzQ29u
dGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOwogICAgIGlm
IChnYykKICAgICAgICAgZ2MtPkZpbGxQYXRoKG1fZGF0YS0+Y3VycmVudFBhdGgpOwogI2VuZGlm
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgVVNFKFdYR0MpCisg
ICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAg
ICBhZGRQYXRoKHBhdGgpOworCiAgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5j
b250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKICAgICBpZiAoZ2MpCiAgICAgICAgIGdjLT5T
dHJva2VQYXRoKG1fZGF0YS0+Y3VycmVudFBhdGgpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aCgpCi17Ci0gICAgZmlsbFBhdGgoKTsKLSAgICBzdHJva2VQYXRo
KCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBlMjZlOWY4Li5jZGQ3YWE0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMDg1LDcgKzEwODUs
NiBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91
dFJvdW5kZWRSZWN0KGlubmVyQm9yZGVyUmVjdCwgaW5uZXJUb3BMZWZ0LCBpbm5lclRvcFJpZ2h0
LCBpbm5lckJvdHRvbUxlZnQsIGlubmVyQm90dG9tUmlnaHQpOwogICAgICAgICAgICAgcm91bmRl
ZFBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUGF0
aChyb3VuZGVkUGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3OTksMTMgKzE3OTgsMTAg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludAogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgcGF0aC5hZGRSZWN0KGhvbGVSZWN0KTsKIAotICAgICAgICAgICAgY29udGV4dC0+YmVn
aW5QYXRoKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOwotCiAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShSVUxFX0VWRU5PREQpOwogICAgICAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0Nv
bG9yLCBzLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwogCiAgICAgICAgICAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcAppbmRleCAxNjYxM2E1Li5jMDk0MzY2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0xNjYsMTEgKzE2Niw5IEBAIHZvaWQgUmVu
ZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5KQogICAgIAogICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICBjb250ZXh0LT5j
bGlwKGNvbnRlbnRSZWN0KTsKLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0
LT5hZGRQYXRoKHBhdGgpOyAgCiAgICAgY29udGV4dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2lu
SW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0UHJlc3NlZFJvdW5kZWRSZWN0T3Bh
Y2l0eSA6IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0T3BhY2l0eSk7CiAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2Vt
ZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKCkgOiBDb2xvcjo6d2hpdGUsIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSk7Ci0gICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICBjb250ZXh0LT5m
aWxsUGF0aChwYXRoKTsKIAogICAgIGZsb2F0IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRl
eHRSZWN0LmxvY2F0aW9uKCkueCgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndpZHRo
KCkgLSB0ZXh0V2lkdGgpIC8gMik7CiAgICAgZmxvYXQgbGFiZWxZID0gcm91bmRmKHJlcGxhY2Vt
ZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCku
aGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAvIDIgKyBmb250LmFzY2VudCgpKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDE5NDFkMzEuLmMwMWMyM2EgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcApAQCAtOTQ4LDggKzk0OCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpk
cmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBJbnRS
ZWN0CiAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChwYXRXaWR0aCk7CiAgICAgICAgIGxpbmVEYXNo
LmFwcGVuZCh3aGl0ZVNwYWNlV2lkdGgpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldExp
bmVEYXNoKGxpbmVEYXNoLCBwYXRXaWR0aCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRk
UGF0aChib3JkZXJQYXRoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VQYXRoKCk7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIERPVUJMRTogewpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlLmgKaW5kZXggMDIzMGU5OC4uYWU3ZTM4YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZS5oCkBAIC00OCw2ICs0OCw3IEBAIGVudW0gUmVuZGVyU1ZHUmVzb3Vy
Y2VNb2RlIHsKIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworY2xhc3MgUGF0aDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0
eWxlOwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOwpAQCAtNjEsNyArNjIsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJP
YmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0LCBjb25z
dCBQYXRoJikgeyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSBy
ZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCBlN2I5ZmJiLi4yNWVkMWMzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE1MSw5ICsxNTEs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgLy8gVGhlIFNWRyBzcGVjaWZpY2F0aW9u
IHdhbnRzIHVzIHRvIGNsaXAgZXZlcnl0aGluZywgaWYgY2xpcC1wYXRoIGRvZXNuJ3QgaGF2ZSBh
IGNoaWxkLgogICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIGNsaXBQYXRoLmFk
ZFJlY3QoRmxvYXRSZWN0KCkpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRl
eHQtPmFkZFBhdGgoY2xpcFBhdGgpOwotICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBSdWxlKTsK
KyAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlwUGF0aCwgY2xpcFJ1bGUpOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCmluZGV4IGE3NTcxNDcuLjA4NDY2YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwg
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQor
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoJiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsK
ICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNjAs
OSArMjYwLDkgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3MKICNlbmRpZgogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAg
ICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0
aCk7CiAgICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQot
ICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+
c3Ryb2tlUGF0aChwYXRoKTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggYmMwYjg2
NC4uODhhNTYyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoJik7CiAgICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVy
biBGbG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCBkMmU0NTYzLi4zMWU2YTA2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTE4Miwx
NiArMTgyLDE2IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAogICAg
IGlmICghKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKICAgICAgICAgaWYgKHJl
c291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQ
YXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKTsKICAgICAgICAgZWxz
ZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBjb250
ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgp
OwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKaW5kZXggYmE0YWVjNC4uMmZjMTUyMiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCYpOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291
cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAog
ICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAppbmRleCAwYzA5NjUyLi4xMjIwYWFiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAg
LTc1LDI4ICs3NSwxNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bAogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RB
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBBU1NF
UlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1v
ZGUpOwogCiAgICAgaWYgKCEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAg
ICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwog
ICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN0cm9r
ZVBhdGgocGF0aCk7CiAgICAgfQotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICAvLyBGSVhNRTog
TW92ZSB0aGlzIGludG8gdGhlIEdyYXBoaWNzQ29udGV4dAotICAgIC8vIFdlYktpdCBpbXBsaWNp
dGx5IGV4cGVjdHMgdXMgdG8gcmVzZXQgdGhlIHBhdGguCi0gICAgLy8gRm9yIGV4YW1wbGUgaW4g
ZmlsbEFuZFN0cm9rZVBhdGgoKSBvZiBSZW5kZXJTVkdQYXRoLmNwcCB0aGUgcGF0aCBpcwotICAg
IC8vIGFkZGVkIGJhY2sgdG8gdGhlIGNvbnRleHQgYWZ0ZXIgZmlsbGluZy4gVGhpcyBpcyBiZWNh
dXNlIGludGVybmFsbHkgaXQKLSAgICAvLyBjYWxscyBDR0NvbnRleHRGaWxsUGF0aCgpIHdoaWNo
IGNsb3NlcyB0aGUgcGF0aC4KLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbFNoYWRlcigwKTsKLSAgICBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hhZGVyKDApOwotI2VuZGlmCiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggNDQx
MDlkYi4uZGNhNTRiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCA9IHRydWUpIHsgfQog
CiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CisgICAgdmlydHVhbCB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgmKTsKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVj
dCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUo
KSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwCmluZGV4IDQ4MzMwM2YuLjBlZGMzYWMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTE0OCwxOSArMTQ4LDE3IEBAIHZvaWQgUmVuZGVy
U1ZHUGF0aDo6bGF5b3V0KCkKIAogdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0
aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7
CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKIAogICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7CiAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aChtX3BhdGgpOwog
ICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5
bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICBmaWxsUGFpbnRpbmdS
ZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2Rl
KTsKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0
aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIG1fcGF0aCk7CiAgICAgICAgIGVsc2UgaWYg
KGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVk
U29saWRQYWludGluZ1Jlc291cmNlKCk7CiAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5z
ZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKICAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNl
LT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQot
ICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMs
IGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSk7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCBt
X3BhdGgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjksNiArMTY3LDggQEAgdm9pZCBSZW5k
ZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAg
ICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQogICAgICAgICByZXR1cm47CiAKKyAgICBQ
YXRoIHBhdGg7CisKICAgICBib29sIHJlc3RvcmVDb250ZXh0ID0gZmFsc2U7CiAgICAgaWYgKHN0
eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0Up
IHsKICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CkBAIC0xNzYs
MjMgKzE3NiwyMiBAQCB2b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKICAgICAgICAgaWYgKCFub25TY2FsaW5nU3Ryb2tlVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFBhdGgg
dHJhbnNmb3JtZWRQYXRoID0gbV9wYXRoOwotICAgICAgICB0cmFuc2Zvcm1lZFBhdGgudHJhbnNm
b3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOworICAgICAgICBwYXRoID0gbV9wYXRoOwor
ICAgICAgICBwYXRoLnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKIAogICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShub25TY2Fs
aW5nU3Ryb2tlVHJhbnNmb3JtLmludmVyc2UoKSk7Ci0gICAgICAgIGNvbnRleHQtPmFkZFBhdGgo
dHJhbnNmb3JtZWRQYXRoKTsKICAgICAgICAgcmVzdG9yZUNvbnRleHQgPSB0cnVlOwogICAgIH0g
ZWxzZQotICAgICAgICBjb250ZXh0LT5hZGRQYXRoKG1fcGF0aCk7CisgICAgICAgIHBhdGggPSBt
X3BhdGg7CiAKICAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0
aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpKQotICAgICAgICBzdHJva2VQ
YWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRv
U3Ryb2tlTW9kZSk7CisgICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9TdHJva2VNb2RlLCBwYXRoKTsKICAgICBlbHNl
IGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVk
U29saWRQYWludGluZ1Jlc291cmNlKCk7CiAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENv
bG9yKGZhbGxiYWNrQ29sb3IpOwogICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlS
ZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpKQotICAgICAg
ICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwg
QXBwbHlUb1N0cm9rZU1vZGUpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFw
cGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIHBhdGgpOwogICAg
IH0KIAogICAgIGlmIChyZXN0b3JlQ29udGV4dCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcAppbmRleCA3ZGQ3NzlhLi41ZmFiMzY0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0zMTgsMTQgKzMxOCwxNCBAQCBib29s
IFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIFJlbmRlcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQpCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgQVNTRVJUKG1f
cGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0g
cGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKIAotICAg
IG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyZXIsIGNv
bnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUpOworICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+
cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNv
dXJjZU1vZGUsIHBhdGgpOwogICAgIG1fcGFpbnRpbmdSZXNvdXJjZSA9IDA7CiB9CiAKQEAgLTM0
NCw3ICszNDQsNyBAQCBib29sIFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFwaGljc0NvbnRl
eHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgYwogCiB2b2lkIFNWR0lubGluZVRl
eHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCBUZXh0UnVuJiB0ZXh0UnVuKQogewotICAgIHJlbGVhc2VQYWludGlu
Z1Jlc291cmNlKGNvbnRleHQpOworICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQs
IFBhdGgoKSk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIHRleHRSdW4uc2V0QWN0aXZl
UGFpbnRpbmdSZXNvdXJjZSgwKTsKQEAgLTUwMCwxMSArNTAwLDkgQEAgdm9pZCBTVkdJbmxpbmVU
ZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBFVGV4dEQKICAgICBwYXRoLmFkZFJlY3QoRmxvYXRSZWN0KGZyYWdtZW50LngsIHksIGZyYWdt
ZW50LndpZHRoLCB0aGlja25lc3MpKTsKIAogICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBjb250
ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOwogCiAgICAgaWYg
KGFjcXVpcmVQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIGRlY29yYXRpb25SZW5kZXJlciwgZGVj
b3JhdGlvblN0eWxlKSkKLSAgICAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCk7
CisgICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIHBhdGgpOwogCiAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guaCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmgKaW5kZXggOGU4MmRkYS4uNDYyZmVmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5oCkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgVGV4dFJ1biBj
b25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29u
c3Q7CiAKICAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dCom
LCBSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgcmVsZWFzZVBhaW50aW5n
UmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYpOworICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFBhdGgmKTsKIAogICAgIGJvb2wgcHJlcGFy
ZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1
biYsIFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJU
ZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYsIFRleHRSdW4mKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3ZnL1NWR0ZvbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKaW5kZXggODk4
YzI1OS4uMDA1ZmUwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKKysrIGIv
V2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKQEAgLTUzNCwxMiArNTM0LDkgQEAgdm9pZCBGb250Ojpk
cmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwKICAgICAgICAgICAgICAgICAgICAgUGF0aCBnbHlwaFBhdGggPSBpZGVudGlmaWVy
LnBhdGhEYXRhOwogICAgICAgICAgICAgICAgICAgICBnbHlwaFBhdGgudHJhbnNmb3JtKGdseXBo
UGF0aFRyYW5zZm9ybSk7CiAKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+YmVnaW5QYXRo
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgoZ2x5cGhQYXRoKTsKLQog
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBydW4ucmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3QoKSA/IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpLT5zdHlsZSgpIDog
MDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5
UmVzb3VyY2UocnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCksIHN0eWxlLCBjb250ZXh0LCBy
ZXNvdXJjZU1vZGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCksIGNv
bnRleHQsIHJlc291cmNlTW9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVQYWlu
dGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3QoKSwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCBnbHlwaFBhdGgpOwogCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9XZWJLaXQyL0NoYW5nZUxvZyBiL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDZhZGM3MjguLjk0
NDkwNzUgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTAtMjggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDogUmVtb3ZlICJjdXJyZW50IHBhdGgiIGFuZCBoYXZlIHN0cm9r
ZVBhdGgsIGZpbGxQYXRoIGFuZCBjbGlwUGF0aCB0YWtlIGEgUGF0aCBhcmd1bWVudAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTYKKworICAgICAg
ICAqIFVJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZElu
ZGljYXRvcjo6ZHJhdyk6CisKIDIwMTAtMTAtMjggIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5r
aW5udW5lbkBub2tpYS5jb20+CiAKICAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUg
Q2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRv
ci5jcHAgYi9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAppbmRleCA1OWQ1NTQ2
Li40ZGZiZmJmIDEwMDY0NAotLS0gYS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNw
cAorKysgYi9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcApAQCAtMTQ5LDkgKzE0
OSw4IEBAIHZvaWQgRmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
YXZlKCk7CiAgICAgICAgIEZsb2F0UmVjdCBvdXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4
dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIsIHZlcnRpY2FsT3V0
c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNo
YWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJS
YWRpdXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LmFkZFBhdGgocGF0aFdpdGhSb3VuZGVkUmVjdChvdXRlclBhdGhSZWN0LCBjb3JuZXJS
YWRpdXMpKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihsaWdodEJvcmRl
ckNvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBncmFwaGljc0NvbnRleHQu
ZmlsbFBhdGgoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRoKHBhdGhXaXRoUm91
bmRlZFJlY3Qob3V0ZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7CiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5yZXN0b3JlKCk7CiAKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72503</attachid>
            <date>2010-11-01 06:55:51 -0700</date>
            <delta_ts>2010-11-20 19:10:38 -0800</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-48516-v2-real.diff</filename>
            <type>text/plain</type>
            <size>59233</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmZiNDk5NC4uMDc2OTU2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjAgQEAKKzIwMTAtMTEtMDEgIEFuZHJlYXMgS2xp
bmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDogUmVtb3ZlICJjdXJyZW50IHBhdGgiIGFu
ZCBoYXZlIHN0cm9rZVBhdGgsIGZpbGxQYXRoIGFuZCBjbGlwUGF0aCB0YWtlIGEgUGF0aCBhcmd1
bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1
MTYKKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgaXMgcmVmYWN0b3Jpbmcgb25seS4KKwor
ICAgICAgICBmaWxsUGF0aCgpIC0+IGZpbGxQYXRoKGNvbnN0IFBhdGgmKQorICAgICAgICBzdHJv
a2VQYXRoKCkgLT4gc3Ryb2tlUGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgY2xpcFBhdGgoV2lu
ZFJ1bGUpIC0+IGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkKKworICAgICAgICBkcmF3
UGF0aCgpIHdhcyBvbmx5IHVzZWQgYnkgQ0csIHNvIG1hZGUgaXQgUExBVEZPUk0oQ0cpIHNwZWNp
ZmljLgorCisgICAgICAgIGJlZ2luUGF0aChjb25zdCBQYXRoJikgLT4gZGVwcmVjYXRlZEJlZ2lu
UGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgYWRkUGF0aChjb25zdCBQYXRoJikgLT4gZGVwcmVj
YXRlZEFkZFBhdGgoY29uc3QgUGF0aCYpCisKKyAgICAgICAgVGhlIFF0LCBDRyBhbmQgQ2Fpcm8g
aW1wbGVtZW50YXRpb25zIGFyZSBiZXN0LWVmZm9ydC4KKyAgICAgICAgRm9yIHRoZSByZXN0LCBJ
J3ZlIHB1dCBkZXByZWNhdGVkQmVnaW5QYXRoL2RlcHJlY2F0ZWRBZGRQYXRoIGFuZCBGSVhNRXMg
aW4gdGhlIHRocmVlIGFmZmVjdGVkIG1ldGhvZHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5p
bjoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3T3V0bGluZWRRdWFkKToKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290OjpwYWludCk6CisgICAgICAgICog
bWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGVDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udmV4UG9seWdvblBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0
aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFp
a3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkZXByZWNhdGVkQmVnaW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZEFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkQWRkUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRlcHJlY2F0ZWRCZWdpblBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VC
b3VuZGluZ1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZGVw
cmVjYXRlZEJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRl
cHJlY2F0ZWRBZGRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkZXByZWNhdGVkQmVnaW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZEFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3Jk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hh
ZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlOjpw
b3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OnBhdGhPbmx5Q2xpcHBpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQ6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RB
cHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RB
cHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xp
ZENvbG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4
dFBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50RGVj
b3JhdGlvbldpdGhTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQpOgorCiAyMDEwLTExLTAxICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZDogc2ltcGxpZnkg
aW5zcGVjdG9yIHN0eWxlcyB0ZXN0IHRvIG1ha2UgYWxsIGJvdHMgaGFwcHkuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBh
NGQ1ZGJjLi42NmZjOTY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTM1NSw5ICszNTUsOCBAQCBfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfNFBhdGhFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDRjbGlwRVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0NHNhdmVFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ1c2NhbGVFUktOU185Rmxv
YXRTaXplRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ3YWRkUGF0aEVSS05TXzRQYXRo
RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ3cmVzdG9yZUV2Ci1fX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDhmaWxsUGF0aEV2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUGF0aEVSS05TXzRQYXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4Zmls
bFJlY3RFUktOU185RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4Zmls
bFJlY3RFUktOU185RmxvYXRSZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKIF9fWk43
V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNf
NUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCBhMmQ5ZTk4Li45NWFjYzI0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC04MjMs
OSArODIzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYy0+YmVn
aW5QYXRoKCk7Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAgICAgYy0+ZmlsbFBh
dGgoKTsKKyAgICAgICAgYy0+ZmlsbFBhdGgobV9wYXRoKTsKICAgICAgICAgZGlkRHJhdyhtX3Bh
dGguYm91bmRpbmdSZWN0KCkpOwogICAgIH0KIApAQCAtODQzLDkgKzg0MSw2IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UoKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYy0+YmVnaW5QYXRoKCk7Ci0gICAgICAg
IGMtPmFkZFBhdGgobV9wYXRoKTsKLQogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAvLyBGYXN0
IGFwcHJveGltYXRpb24gb2YgdGhlIHN0cm9rZSdzIGJvdW5kaW5nIHJlY3QuCiAgICAgICAgIC8v
IFRoaXMgeWllbGRzIGEgc2xpZ2h0bHkgb3ZlcnNpemVkIHJlY3QgYnV0IGlzIHZlcnkgZmFzdApA
QCAtODU2LDcgKzg1MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2Uo
KQogICAgICAgICBDYW52YXNTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlQXBwbGllcih0aGlzKTsK
ICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IG1fcGF0aC5zdHJva2VCb3VuZGluZ1Jl
Y3QoJnN0cm9rZUFwcGxpZXIpOwogI2VuZGlmCi0gICAgICAgIGMtPnN0cm9rZVBhdGgoKTsKKyAg
ICAgICAgYy0+c3Ryb2tlUGF0aChtX3BhdGgpOwogICAgICAgICBkaWREcmF3KGJvdW5kaW5nUmVj
dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDFiYjM5MTkuLjg2YTdlNzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCkBAIC0xODgwLDIxICsxODgwLDE4IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5l
ZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNv
CiAgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcgYSBxdWFkIGlzIGhhcmQpCiAg
ICAgewogICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC5hZGRQYXRoKHF1
YWRQYXRoKTsKICAgICAgICAgY29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKIAotICAgICAgICBj
b250ZXh0LmFkZFBhdGgocXVhZFBhdGgpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihv
dXRsaW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjb250ZXh0LnN0cm9r
ZVBhdGgoKTsKKyAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKIAogICAgICAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICB9CiAKICAgICAvLyBOb3cgZG8gdGhlIGZpbGwKLSAg
ICBjb250ZXh0LmFkZFBhdGgocXVhZFBhdGgpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZp
bGxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5maWxsUGF0aCgpOwor
ICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1
YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29s
b3IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1dl
YkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCmluZGV4IGJhNjBjOWYuLmYwYTdhYmIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCisrKyBiL1dl
YkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCkBAIC0xNjcsOSArMTY3LDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5
KQogICAgIC8vIGRyYXcgdG8gZW5kCiAgICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7CiAgICAg
Ci0gICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBh
dGgocm9vdCk7Ci0gICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgaW5mby5jb250
ZXh0LT5zdHJva2VQYXRoKHJvb3QpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOwog
ICAgIApAQCAtMTgxLDggKzE3OSw2IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFp
bnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBtYXNrLmFkZExpbmVUbyh0b3BMZWZ0
KTsKICAgICBtYXNrLmFkZExpbmVUbyhGbG9hdFBvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRF
bmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAotICAgIGluZm8u
Y29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKG1hc2spOwog
ICAgIGluZm8uY29udGV4dC0+Y2xpcChtYXNrKTsKICAgICAKICAgICAvLyBEcmF3IHRoZSB0aGlj
ayBwYXJ0IG9mIHRoZSByb290LgpAQCAtMTkzLDkgKzE4OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1M
Um9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBsaW5lLm1v
dmVUbyhib3R0b21MZWZ0KTsKICAgICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0KTsKIAotICAgIGlu
Zm8uY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKGxpbmUp
OwotICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgIGluZm8uY29udGV4dC0+c3Ry
b2tlUGF0aChsaW5lKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwIGIv
V2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKaW5kZXggODYyZDhhNC4u
MTI4NWFjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9v
dC5jcHAKKysrIGIvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKQEAg
LTEzMiwxMCArMTMyLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWlu
dEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIHJvb3QuYWRkTGluZVRvKHRvcExlZnQp
OwogICAgIC8vIGRyYXcgdG8gZW5kCiAgICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7Ci0gICAg
Ci0gICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBh
dGgocm9vdCk7Ci0gICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CisKKyAgICBpbmZvLmNv
bnRleHQtPnN0cm9rZVBhdGgocm9vdCk7CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7
CiAgICAgCkBAIC0xNDcsOCArMTQ1LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290Ojpw
YWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIG1hc2suYWRkTGluZVRv
KHRvcExlZnQpOwogICAgIG1hc2suYWRkTGluZVRvKEZsb2F0UG9pbnQoMiAqIHRvcExlZnQueCgp
IC0gbGVmdEVuZC54KCksIDIgKiB0b3BMZWZ0LnkoKSAtIGxlZnRFbmQueSgpKSk7CiAgICAgCi0g
ICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgo
bWFzayk7CiAgICAgaW5mby5jb250ZXh0LT5jbGlwKG1hc2spOwogICAgIAogICAgIC8vIERyYXcg
dGhlIHRoaWNrIHBhcnQgb2YgdGhlIHJvb3QuCkBAIC0xNTksOSArMTU1LDcgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5
KQogICAgIGxpbmUubW92ZVRvKGJvdHRvbUxlZnQpOwogICAgIGxpbmUuYWRkTGluZVRvKHRvcExl
ZnQpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgaW5mby5jb250
ZXh0LT5hZGRQYXRoKGxpbmUpOwotICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAg
IGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aChsaW5lKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCmluZGV4IGYyNjA2YTMuLjk5ZTFjZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTI4LDcgKzEyOCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEltYWdl
QnVmZmVyOwogICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUGF0aDsKICAgICBjbGFzcyBQYXR0
ZXJuOwogICAgIGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRS
dW47CkBAIC0xOTcsNiArMTk2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JN
KENHKQogICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogICAgICAgICB2b2lkIGFw
cGx5RmlsbFBhdHRlcm4oKTsKKyAgICAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAj
ZW5kaWYKIAogICAgICAgICB2b2lkIHNhdmUoKTsKQEAgLTIxMSw5ICsyMTEsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYpOwog
ICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZs
b2F0UG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKIAotICAgICAgICB2b2lk
IGRyYXdQYXRoKCk7Ci0gICAgICAgIHZvaWQgZmlsbFBhdGgoKTsKLSAgICAgICAgdm9pZCBzdHJv
a2VQYXRoKCk7CisgICAgICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOworICAgICAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgICAgIC8vIEFyYyBkcmF3aW5nICh1
c2VkIGJ5IGJvcmRlci1yYWRpdXMgaW4gQ1NTKSBqdXN0IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRo
ZSBtb21lbnQuCiAgICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmLCBpbnQgc3Rh
cnRBbmdsZSwgaW50IGFuZ2xlU3Bhbik7CkBAIC0yNTQsNyArMjUzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJl
Y3QmLCBpbnQgdGhpY2tuZXNzKTsKICAgICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEludFJlY3Qm
KTsKICAgICAgICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXpl
JiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCk7Ci0gICAgICAgIHZvaWQg
Y2xpcFBhdGgoV2luZFJ1bGUpOworICAgICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBX
aW5kUnVsZSk7CiAgICAgICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50
cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzID0gdHJ1ZSk7CiAgICAgICAgIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmKTsKIApA
QCAtMzAzLDggKzMwMiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgICAgIHZvaWQg
YmVnaW5QYXRoKCk7Ci0gICAgICAgIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJik7CisjaWYgUExB
VEZPUk0oU0tJQSkgfHwgUExBVEZPUk0oV1gpIHx8IFBMQVRGT1JNKE9QRU5WRykgfHwgT1MoV0lO
Q0UpCisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2Ugb25jZSBub2JvZHkgaXMgdXNpbmcg
dGhlbS4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ4NTE2PgorICAgICAgICB2b2lkIGRlcHJl
Y2F0ZWRCZWdpblBhdGgoKTsKKyAgICAgICAgdm9pZCBkZXByZWNhdGVkQWRkUGF0aChjb25zdCBQ
YXRoJik7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwogCkBAIC0z
OTQsNyArMzk2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oUVQpCiAg
ICAgICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0OwotICAgICAgICBQbGF0Zm9y
bVBhdGgqIGN1cnJlbnRQYXRoKCk7CiAgICAgICAgIHZvaWQgcHVzaFRyYW5zcGFyZW5jeUxheWVy
SW50ZXJuYWwoY29uc3QgUVJlY3QgJnJlY3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhh
TWFzayk7CiAgICAgICAgIHN0YXRpYyBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlIHRvUXRDb21w
b3NpdGlvbk1vZGUoQ29tcG9zaXRlT3BlcmF0b3Igb3ApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCmluZGV4IDk4NWNh
ZDkuLjY5NjkzMmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZS5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiR3JhZGllbnQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCi0j
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC03OSw4ICs3OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsKICNpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgZmxvYXQg
Z2xvYmFsQWxwaGE7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggcGF0aFRyYW5zZm9ybTsKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggN2ViMDFiOS4uZmJiZDI2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTUzMSw0NCArNTMxLDI2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9p
bnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2luCiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwg
c2F2ZWRGaWxsUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYWlyb190KiBj
ciA9IG1fZGF0YS0+Y3I7Ci0KLSAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIG1fZGF0YS0+
bV9wZW5kaW5nUGF0aC5jb250ZXh0KCkpOworICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwg
cGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKICAgICBmaWxsQ3VycmVudENhaXJvUGF0
aCh0aGlzLCBtX2NvbW1vbiwgY3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLSAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3Is
IG1fZGF0YS0+bV9wZW5kaW5nUGF0aC5jb250ZXh0KCkpOworICAgIHNldFBhdGhPbkNhaXJvQ29u
dGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKICAgICBzdHJva2VDdXJy
ZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBjcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0aCgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwotCi0gICAgc2V0UGF0aE9u
Q2Fpcm9Db250ZXh0KGNyLCBtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpKTsKLQotICAg
IGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REID8gQ0FJ
Uk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwotICAgIGRy
YXdQYXRoU2hhZG93KHRoaXMsIG1fY29tbW9uLCBGaWxsQW5kU3Ryb2tlKTsKLQotICAgIHNldFBs
YXRmb3JtRmlsbCh0aGlzLCBjciwgbV9jb21tb24pOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlKHRo
aXMsIGNyLCBtX2NvbW1vbik7Ci0gICAgY2Fpcm9fbmV3X3BhdGgoY3IpOwotfQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC02MDcsMTIgKzU4OSwxMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9kYXRhLT5jbGlwKHJl
Y3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUgY2xpcFJ1
bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgY2xpcFJ1bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworICAgIHNldFBhdGhPbkNh
aXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKICAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLCBjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxM
X1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CiAgICAgY2Fpcm9fY2xp
cChjcik7CiB9CkBAIC05OTQsMjUgKzk3Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiAgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKG1fZGF0YS0+Y3IsIHRvQ2Fpcm9PcGVyYXRvcihvcCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb19uZXdfcGF0aChtX2RhdGEtPm1fcGVuZGluZ1Bh
dGguY29udGV4dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjYWlyb19tYXRyaXhfdCBjdXJyZW50TWF0cml4OwotICAgIGNhaXJvX2dldF9t
YXRyaXgobV9kYXRhLT5jciwgJmN1cnJlbnRNYXRyaXgpOwotICAgIGNhaXJvX3NldF9tYXRyaXgo
bV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQoKSwgJmN1cnJlbnRNYXRyaXgpOwotICAgIGFw
cGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQobV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRl
eHQoKSwgcGF0aCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgm
IHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q2Fpcm8uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAppbmRleCA1MjdjYjcyLi40OTRiNDBkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNhaXJvLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCkBAIC0yNyw3ICsyNyw2IEBACiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAotI2luY2x1ZGUgIkNhaXJvUGF0aC5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPG1h
dGguaD4KQEAgLTk3LDcgKzk2LDYgQEAgcHVibGljOgogCiAgICAgY2Fpcm9fdCogY3I7CiAgICAg
VmVjdG9yPGZsb2F0PiBsYXllcnM7Ci0gICAgQ2Fpcm9QYXRoIG1fcGVuZGluZ1BhdGg7CiAKICAg
ICBDb250ZXh0U2hhZG93IHNoYWRvdzsKICAgICBWZWN0b3I8Q29udGV4dFNoYWRvdz4gc2hhZG93
U3RhY2s7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCmluZGV4IDhkNzJiODUuLmMxMGEyMWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0yOTksMjEgKzI5OSwx
MiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50
MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0
byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgLy8gRklYTUU6
IENHIGFkZGVkIENHQ29udGV4dEFkZEVsbGlwc2VpblJlY3QgaW4gVGlnZXIsIHNvIHdlIHNob3Vs
ZCBiZSBhYmxlIHRvIHF1aXRlIGVhc2lseSBkcmF3IGFuIGVsbGlwc2UuCi0gICAgLy8gVGhpcyBj
b2RlIGNhbiBvbmx5IGhhbmRsZSBjaXJjbGVzLCBub3QgZWxsaXBzZXMuIEJ1dCBraHRtbCBvbmx5
Ci0gICAgLy8gdXNlcyBpdCBmb3IgY2lyY2xlcy4KLSAgICBBU1NFUlQocmVjdC53aWR0aCgpID09
IHJlY3QuaGVpZ2h0KCkpOwotCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAgZmxvYXQgciA9IChmbG9hdCly
ZWN0LndpZHRoKCkgLyAyOwotICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCByZWN0LngoKSAr
IHIsIHJlY3QueSgpICsgciwgciwgMC4wZiwgMi4wZiAqIHBpRmxvYXQsIDApOwotICAgIENHQ29u
dGV4dENsb3NlUGF0aChjb250ZXh0KTsKLQotICAgIGRyYXdQYXRoKCk7CisgICAgUGF0aCBwYXRo
OworICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKKyAgICBkcmF3UGF0aChwYXRoKTsKIH0KIAog
CkBAIC00MDUsMTMgKzM5NiwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNv
bnN0IEludFJlY3QmIHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcAogICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZENvbnZleFBv
bHlnb25Ub0NvbnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBudW1Qb2ludHMsIGNv
bnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3N0YXRpYyBQYXRoIGNyZWF0ZUNvbnZleFBvbHlnb25Q
YXRoKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKIHsKLSAgICBD
R0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0TW92ZVRvUG9pbnQoY29u
dGV4dCwgcG9pbnRzWzBdLngoKSwgcG9pbnRzWzBdLnkoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDE7IGkgPCBudW1Qb2ludHM7IGkrKykKLSAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQo
Y29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7Ci0gICAgQ0dDb250ZXh0Q2xv
c2VQYXRoKGNvbnRleHQpOworICAgIEFTU0VSVChudW1Qb2ludHMgPiAwKTsKKworICAgIFBhdGgg
cGF0aDsKKyAgICBwYXRoLm1vdmVUbyhwb2ludHNbMF0pOworICAgIGZvciAoc2l6ZV90IGkgPSAx
OyBpIDwgbnVtUG9pbnRzOyArK2kpCisgICAgICAgIHBhdGguYWRkTGluZVRvKHBvaW50c1tpXSk7
CisgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKKworICAgIHJldHVybiBwYXRoOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0
IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKQEAgLTQyNyw4ICs0MjIsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMs
IGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cwogICAgIGlmIChhbnRpYWxpYXNlZCAhPSBzaG91bGRB
bnRpYWxpYXMoKSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQs
IGFudGlhbGlhc2VkKTsKIAotICAgIGFkZENvbnZleFBvbHlnb25Ub0NvbnRleHQoY29udGV4dCwg
bnBvaW50cywgcG9pbnRzKTsKLSAgICBkcmF3UGF0aCgpOworICAgIGRyYXdQYXRoKGNyZWF0ZUNv
bnZleFBvbHlnb25QYXRoKG5wb2ludHMsIHBvaW50cykpOwogCiAgICAgaWYgKGFudGlhbGlhc2Vk
ICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxp
YXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFzKCkpOwpAQCAtNDQ2LDkgKzQ0MCw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25z
dCBGbG9hdFBvaW50KiBwb2luCiAKICAgICBpZiAoYW50aWFsaWFzICE9IHNob3VsZEFudGlhbGlh
cygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgYW50aWFs
aWFzKTsKLSAgICAKLSAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNvbnRleHQsIG51bVBv
aW50cywgcG9pbnRzKTsKLSAgICBjbGlwUGF0aChSVUxFX05PTlpFUk8pOworCisgICAgY2xpcFBh
dGgoY3JlYXRlQ29udmV4UG9seWdvblBhdGgobnVtUG9pbnRzLCBwb2ludHMpLCBSVUxFX05PTlpF
Uk8pOwogCiAgICAgaWYgKGFudGlhbGlhcyAhPSBzaG91bGRBbnRpYWxpYXMoKSkKICAgICAgICAg
Q0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHNob3VsZEFudGlhbGlhcygpKTsK
QEAgLTUxMSw3ICs1MDQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01v
ZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDR1BhdAogICAgIHJldHVybiBz
aG91bGRGaWxsIHx8IHNob3VsZFN0cm9rZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUy
MSwxMSArNTE0LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCiAKICAgICBp
ZiAoc3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBhIHBh
dGggdXNpbmcgZ3JhZGllbnRzCi0gICAgICAgIGZpbGxQYXRoKCk7Ci0gICAgICAgIHN0cm9rZVBh
dGgoKTsKKyAgICAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICAgICAg
ZmlsbFBhdGgocGF0aCk7CisgICAgICAgIHN0cm9rZVBhdGgocGF0aCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250
ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwogICAgIGlmIChzdGF0
ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAgIGlmIChzdGF0
ZS5zdHJva2VQYXR0ZXJuKQpAQCAtNTQ0LDEzICs1NDEsMTYgQEAgc3RhdGljIGlubGluZSB2b2lk
IGZpbGxQYXRoV2l0aEZpbGxSdWxlKENHQ29udGV4dFJlZiBjb250ZXh0LCBXaW5kUnVsZSBmaWxs
UnVsZSkKICAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogCisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4dEFkZFBh
dGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisKICAgICBpZiAobV9jb21tb24tPnN0
YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQp
OwogICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCkBAIC01NjgsMTMgKzU2
OCwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgIGZpbGxQYXRoV2l0
aEZpbGxSdWxlKGNvbnRleHQsIGZpbGxSdWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKKyAg
ICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChjb250
ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwogICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAg
ICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CkBAIC02
NDMsOCArNjQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKIAogICAgIFBhdGggcGF0aDsK
ICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21M
ZWZ0LCBib3R0b21SaWdodCk7Ci0gICAgYWRkUGF0aChwYXRoKTsKLSAgICBmaWxsUGF0aCgpOwor
ICAgIGZpbGxQYXRoKHBhdGgpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvciB8fCBv
bGRDb2xvclNwYWNlICE9IGNvbG9yU3BhY2UpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRl
eHQsIG9sZEZpbGxDb2xvciwgb2xkQ29sb3JTcGFjZSk7CkBAIC02NjksMTkgKzY3MSwyMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIENH
Q29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAocGF0aC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIUNHQ29udGV4dElzUGF0aEVtcHR5KGNvbnRleHQp
KSB7Ci0gICAgICAgIGlmIChjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQpCi0gICAgICAgICAgICBD
R0NvbnRleHRFT0NsaXAoY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENHQ29u
dGV4dENsaXAoY29udGV4dCk7Ci0gICAgfQorICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0
aC5wbGF0Zm9ybVBhdGgoKSk7CisKKyAgICBpZiAoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REKQor
ICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CisgICAgZWxzZQorICAgICAgICBDR0Nv
bnRleHRDbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJS
b3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKQEAgLTg2
MywxNiArODY5LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2lu
IGpvaW4pCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKLXsK
LSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIENHQ29udGV4
dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotfQotCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCmluZGV4IDI0ZTkyNmYuLjA5MWVlYjAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250
ZXh0SGFpa3UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhp
Y3NDb250ZXh0SGFpa3UuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFu
Z2xlU3AKICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUsIGFu
Z2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTE5MSwxNyArMTkxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICAvLyBGaWxsUmVjdCBhbmQgRmlsbEFyYyBjYWxs
cyBhcmUgbmVlZGVkLgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBh
dGgoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoY29uc3QgUGF0aCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVu
VkcuY3BwCmluZGV4IDBkMTZkNGQuLjYzMDM2Y2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcApAQCAt
MTM5LDI4ICsxMzksMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29u
KHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAgICBVTlVTRURfUEFS
QU0oc2hvdWxkQW50aWFsaWFzKTsgLy8gRklYTUUKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGRlcHJlY2F0ZWRCZWdpblBhdGgoKTsKKyAgICBkZXByZWNhdGVkQWRkUGF0aChwYXRoKTsK
KwogICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfRklMTF9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmls
bFJ1bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+ZHJhd1Bh
dGgoVkdfU1RST0tFX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7Ci19CisgICAgZGVw
cmVjYXRlZEJlZ2luUGF0aCgpOworICAgIGRlcHJlY2F0ZWRBZGRQYXRoKHBhdGgpOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfRklMTF9QQVRI
IHwgVkdfU1RST0tFX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRh
LT5kcmF3UGF0aChWR19TVFJPS0VfUEFUSCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
QEAgLTE5Nyw3ICsxOTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIFVOVVNFRF9Q
QVJBTShjb2xvclNwYWNlKTsgLy8gRklYTUUKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJl
Z2luUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZEJlZ2luUGF0aCgpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjA1LDcg
KzIwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogICAgIG1fZGF0YS0+
YmVnaW5QYXRoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZEFkZFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC0yMjEsMTEgKzIxOSwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9kYXRhLT5pbnRlcnNlY3RDbGlwUmVjdChyZWN0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IGNsaXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGRlcHJlY2F0ZWRCZWdpblBhdGgoKTsKKyAgICBkZXByZWNhdGVkQWRkUGF0aChw
YXRoKTsKKwogICAgIG1fZGF0YS0+Y2xpcFBhdGgoKihtX2RhdGEtPmN1cnJlbnRQYXRoKCkpLCBQ
YWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBjbGlwUnVsZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggMjVi
M2U4ZC4uYmJjYmFmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTE5Myw5ICsxOTMsNiBAQCBwdWJsaWM6CiAKICAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwogCi0gICAgLy8g
T25seSB1c2VkIGJ5IFNWRyBmb3Igbm93LgotICAgIFFQYWludGVyUGF0aCBjdXJyZW50UGF0aDsK
LQogICAgIENvbnRleHRTaGFkb3cgc2hhZG93OwogICAgIFFTdGFjazxDb250ZXh0U2hhZG93PiBz
aGFkb3dTdGFjazsKIApAQCAtMjA0LDEzICsyMDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzaGFkb3cubV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93OwogICAgIH0KIAotICAg
IGlubGluZSB2b2lkIGNsZWFyQ3VycmVudFBhdGgoKQotICAgIHsKLSAgICAgICAgaWYgKCFjdXJy
ZW50UGF0aC5lbGVtZW50Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY3Vy
cmVudFBhdGggPSBRUGFpbnRlclBhdGgoKTsKLSAgICB9Ci0KICAgICBRUmVjdEYgY2xpcEJvdW5k
aW5nUmVjdCgpIGNvbnN0CiAgICAgewogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVD
Syg0LCA4LCAwKQpAQCAtMzAwLDExICsyOTAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZVBsYXRmb3JtU3RhdGUoKQogCiAgICAgbV9kYXRhLT5wKCktPnJlc3RvcmUoKTsKIAotICAg
IGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkgJiYgbV9jb21tb24tPnN0YXRlLnBh
dGhUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKLSAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXgg
PSBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybTsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50
UGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGggKiBtYXRyaXg7Ci0gICAgfQotCiAgICAgaWYgKG1f
ZGF0YS0+c2hhZG93U3RhY2suaXNFbXB0eSgpKQogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENv
bnRleHRTaGFkb3coKTsKICAgICBlbHNlCkBAIC01MTgsMTMgKzUwMywxMyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxv
YXRQb2ludCogcG9pbgogICAgICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxp
YXNpbmcsIHBhaW50ZXJXYXNBbnRpYWxpYXNlZCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aFRvRmlsbCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwotICAgIFFQYWludGVyUGF0aCYg
cGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGg7IC8vIEF2b2lkIGRldGFjaGluZyB0aGUgUVBhaW50
ZXJQYXRoCisgICAgUVBhaW50ZXJQYXRoIHBhdGggPSBwYXRoVG9GaWxsLnBsYXRmb3JtUGF0aCgp
OwogICAgIHBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAg
IGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7CkBAIC01NDEsMTggKzUyNiwxNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBicnVz
aCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIHAtPmJydXNoKCkpOwot
Ci0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGhUb1N0cm9rZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwogICAgIFFQZW4g
cGVuKHAtPnBlbigpKTsKLSAgICBRUGFpbnRlclBhdGgmIHBhdGggPSBtX2RhdGEtPmN1cnJlbnRQ
YXRoOyAvLyBBdm9pZCBkZXRhY2hpbmcgdGhlIFFQYWludGVyUGF0aAorICAgIFFQYWludGVyUGF0
aCBwYXRoID0gcGF0aFRvU3Ryb2tlLnBsYXRmb3JtUGF0aCgpOwogICAgIHBhdGguc2V0RmlsbFJ1
bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRv
dygpKSB7CkBAIC01NzUsNyArNTU4LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgoKQogICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHBlbik7CiAgICAgfSBlbHNlCiAgICAg
ICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgcGVuKTsKLSAgICBtX2RhdGEtPmNsZWFyQ3VycmVudFBh
dGgoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRyYXdSZXBlYXRQYXR0ZXJuKFFQYWludGVy
KiBwLCBRUGl4bWFwKiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBib29sIHJl
cGVhdFgsIGNvbnN0IGJvb2wgcmVwZWF0WSkKQEAgLTc0MiwzMCArNzI0LDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
SW50U2l6ZSYgdG9wTGVmCiAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNv
bG9yKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQotewot
ICAgIG1fZGF0YS0+Y2xlYXJDdXJyZW50UGF0aCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmICghbV9kYXRhLT5jdXJyZW50
UGF0aC5lbGVtZW50Q291bnQoKSkgewotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gcGF0
aC5wbGF0Zm9ybVBhdGgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2RhdGEtPmN1
cnJlbnRQYXRoLmFkZFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci19Ci0KIGJvb2wgR3JhcGhp
Y3NDb250ZXh0OjppblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9k
YXRhLT5sYXllckNvdW50OwogfQogCi1QbGF0Zm9ybVBhdGgqIEdyYXBoaWNzQ29udGV4dDo6Y3Vy
cmVudFBhdGgoKQotewotICAgIHJldHVybiAmbV9kYXRhLT5jdXJyZW50UGF0aDsKLX0KLQogQ29u
dGV4dFNoYWRvdyogR3JhcGhpY3NDb250ZXh0Ojpjb250ZXh0U2hhZG93KCkKIHsKICAgICByZXR1
cm4gJm1fZGF0YS0+c2hhZG93OwpAQCAtNzc5LDEzICs3NDIsMTMgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIG1fZGF0YS0+cCgpLT5zZXRD
bGlwUmVjdChyZWN0LCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBRUGFpbnRlciogcCA9
IG1fZGF0YS0+cCgpOwotICAgIFFQYWludGVyUGF0aCBuZXdQYXRoID0gbV9kYXRhLT5jdXJyZW50
UGF0aDsKKyAgICBRUGFpbnRlclBhdGggbmV3UGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CiAg
ICAgbmV3UGF0aC5zZXRGaWxsUnVsZShjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQgPyBRdDo6T2Rk
RXZlbkZpbGwgOiBRdDo6V2luZGluZ0ZpbGwpOwogICAgIHAtPnNldENsaXBQYXRoKG5ld1BhdGgs
IFF0OjpJbnRlcnNlY3RDbGlwKTsKIH0KQEAgLTk5NywxMiArOTYwLDEwIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgp
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUVBh
aW50ZXJQYXRoIHBhdGg7CisgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsK
ICAgICBzZXRTdHJva2VUaGlja25lc3Mod2lkdGgpOwotICAgIG1fZGF0YS0+Y3VycmVudFBhdGgg
PSBwYXRoOwotCi0gICAgc3Ryb2tlUGF0aCgpOworICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGMpCkBAIC0xMTIyLDEy
ICsxMDgzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAoKS0+dHJhbnNsYXRlKHgsIHkp
OwotCi0gICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBR
VHJhbnNmb3JtIG1hdHJpeDsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IG1fZGF0YS0+
Y3VycmVudFBhdGggKiBtYXRyaXgudHJhbnNsYXRlKC14LCAteSk7Ci0gICAgICAgIG1fY29tbW9u
LT5zdGF0ZS5wYXRoVHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsKLSAgICB9CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKQEAgLTExMzYsMTIgKzEwOTEs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fZGF0YS0+cCgpLT5yb3RhdGUoMTgwIC8gTV9QSSpyYWRpYW5zKTsK
LQotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUVRy
YW5zZm9ybSBtYXRyaXg7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1
cnJlbnRQYXRoICogbWF0cml4LnJvdGF0ZSgtMTgwIC8gTV9QSSpyYWRpYW5zKTsKLSAgICAgICAg
bV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0ucm90YXRlKHJhZGlhbnMpOwotICAgIH0KIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgcykKQEAgLTEx
NTAsMTIgKzEwOTksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAoKS0+c2NhbGUocy53aWR0
aCgpLCBzLmhlaWdodCgpKTsKLQotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVu
dFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4LnNjYWxlKDEgLyBzLndpZHRoKCks
IDEgLyBzLmhlaWdodCgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0u
c2NhbGVOb25Vbmlmb3JtKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Ci0gICAgfQogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMTIxMiwx
NSArMTE1NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+cCgp
LT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRydWUpOwotCi0gICAgLy8gVHJhbnNmb3Jt
YXRpb25zIHRvIHRoZSBjb250ZXh0IHNob3VsZG4ndCB0cmFuc2Zvcm0gdGhlIGN1cnJlbnRQYXRo
LgotICAgIC8vIFdlIGhhdmUgdG8gdW5kbyBldmVyeSBjaGFuZ2UgbWFkZSB0byB0aGUgY29udGV4
dCBmcm9tIHRoZSBjdXJyZW50UGF0aAotICAgIC8vIHRvIGF2b2lkIHdyb25nIGRyYXdpbmdzLgot
ICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkgJiYgdHJhbnNmb3JtLmlzSW52
ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zvcm0gbWF0cml4ID0gdHJhbnNmb3JtLmludmVy
c2UoKTsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGgg
KiBtYXRyaXg7Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLm11bHRpcGx5
KHRyYW5zZm9ybS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwotICAgIH0KIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IEludFJlY3Qm
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwCmluZGV4IDRiZDQ0OTIuLjQ2ZmE3YTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKQEAgLTMx
MiwxNCArMzEyLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0
Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzCiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmNsaXBQYXRoQW50aUFsaWFzZWQocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVw
cmVjYXRlZEFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmFkZFBhdGgo
KnBhdGgucGxhdGZvcm1QYXRoKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5Q
YXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkQmVnaW5QYXRoKCkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MjAsMTEgKzQy
MCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwKQogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Y2xpcFBhdGgocGF0aCwgU2tSZWdpb246OmtE
aWZmZXJlbmNlX09wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRS
dWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGhUb0NsaXAsIFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGRlcHJlY2F0ZWRCZWdpblBhdGgoKTsKKyAg
ICBkZXByZWNhdGVkQWRkUGF0aChwYXRoVG9DbGlwKTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxh
dGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYg
KCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcy
MywxMSArNzI2LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UmVjdChyKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aChjb25zdCBQYXRoJiBwYXRoVG9GaWxsKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGRlcHJlY2F0ZWRCZWdpblBhdGgoKTsKKyAgICBk
ZXByZWNhdGVkQWRkUGF0aChwYXRoVG9GaWxsKTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZv
cm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFp
c1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICByZXR1cm47CkBAIC0xMTcyLDEx
ICsxMTc4LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVj
dCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGhUb1N0cm9rZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBkZXByZWNhdGVkQmVnaW5QYXRoKCk7CisgICAgZGVwcmVj
YXRlZEFkZFBhdGgocGF0aFRvU3Ryb2tlKTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZvcm1D
b250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFpc1Bh
dGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCmluZGV4IDg5MzIzYzQuLjBlZmE4ZmIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdGhTa2lhLmNwcApAQCAtMjQy
LDggKzI0Miw4IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5
bGVBcHBsaWVyKiBhcHBsaWVyKQogewogICAgIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaCA9IHNj
cmF0Y2hDb250ZXh0KCk7CiAgICAgc2NyYXRjaC0+c2F2ZSgpOwotICAgIHNjcmF0Y2gtPmJlZ2lu
UGF0aCgpOwotICAgIHNjcmF0Y2gtPmFkZFBhdGgoKnRoaXMpOworICAgIHNjcmF0Y2gtPmRlcHJl
Y2F0ZWRCZWdpblBhdGgoKTsKKyAgICBzY3JhdGNoLT5kZXByZWNhdGVkQWRkUGF0aCgqdGhpcyk7
CiAKICAgICBpZiAoYXBwbGllcikKICAgICAgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoc2NyYXRj
aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhp
Y3NDb250ZXh0V2luQ0UuY3BwCmluZGV4IDg1MTkyZTUuLjQyMDNmMDMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0Uu
Y3BwCkBAIC0xMTg0LDEyICsxMTg0LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZGVwcmVjYXRlZEJlZ2luUGF0aCgpCiB7CiAgICAgbV9kYXRhLT5tX3BhdGhzLmNs
ZWFyKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZEFkZFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKICAgICBtX2RhdGEtPm1fcGF0aHMuYXBwZW5kKHBhdGgpOwogfQpAQCAtMTMyNyw4
ICsxMzI3LDExIEBAIENvbG9yIGdyYWRpZW50QXZlcmFnZUNvbG9yKGNvbnN0IEdyYWRpZW50KiBn
cmFkaWVudCkKICAgICAgICAgLCAoc3RvcC5hbHBoYSArIGxhc3RTdG9wLmFscGhhKSAqIDAuNWYp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CisgICAgZGVwcmVjYXRlZEJlZ2lu
UGF0aCgpOworICAgIGRlcHJlY2F0ZWRBZGRQYXRoKHBhdGgpOworCiAgICAgQ29sb3IgYyA9IG1f
Y29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQKICAgICAgICAgPyBncmFkaWVudEF2ZXJhZ2VDb2xv
cihtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKQogICAgICAgICA6IGZpbGxDb2xv
cigpOwpAQCAtMTM3OCw2ICsxMzgxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgoKQogICAgIGlmICghbV9kYXRhLT5tX2RjKQogICAgICAgICByZXR1cm47CiAKKyAgICBkZXBy
ZWNhdGVkQmVnaW5QYXRoKCk7CisgICAgZGVwcmVjYXRlZEFkZFBhdGgocGF0aCk7CisKICAgICBP
d25QdHI8SFBFTj4gcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVz
cygpLCBzdHJva2VTdHlsZSgpKTsKIAogICAgIGlmIChtX2RhdGEtPm1fb3BhY2l0eSA8IDEuMGYg
fHwgbV9kYXRhLT5oYXNBbHBoYSgpKSB7CkBAIC0xODk2LDcgKzE5MDIsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRS
dWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAppbmRleCA1M2E5Y2NkLi5kOWJjNzJh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4
dFd4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4
dFd4LmNwcApAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
KGNvbnN0IEludFJlY3QmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
QEAgLTQ1OSw3ICs0NTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZEJlZ2lu
UGF0aCgpCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9k
YXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKQEAgLTQ2OCw3ICs0NjgsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKICNlbmRpZgogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRlcHJlY2F0ZWRBZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgVVNFKFdYR0Mp
CiAgICAgaWYgKHBhdGgucGxhdGZvcm1QYXRoKCkpCkBAIC01MzMsMzAgKzUzMywzMCBAQCBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSBjb25zdAogICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewogI2lmIFVTRShXWEdDKQorICAgIGRlcHJlY2F0ZWRCZWdp
blBhdGgoKTsKKyAgICBkZXByZWNhdGVkQWRkUGF0aChwYXRoKTsKKwogICAgIHd4R3JhcGhpY3ND
b250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CiAgICAg
aWYgKGdjKQogICAgICAgICBnYy0+RmlsbFBhdGgobV9kYXRhLT5jdXJyZW50UGF0aCk7CiAjZW5k
aWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICNpZiBVU0UoV1hHQykK
KyAgICBkZXByZWNhdGVkQmVnaW5QYXRoKCk7CisgICAgZGVwcmVjYXRlZEFkZFBhdGgocGF0aCk7
CisKICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBo
aWNzQ29udGV4dCgpOwogICAgIGlmIChnYykKICAgICAgICAgZ2MtPlN0cm9rZVBhdGgobV9kYXRh
LT5jdXJyZW50UGF0aCk7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKCkKLXsKLSAgICBmaWxsUGF0aCgpOwotICAgIHN0cm9rZVBhdGgoKTsKLX0KLQogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCmluZGV4IGU4M2I3MDkuLmE5NGVmYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEwOTgsNyArMTA5OCw2IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBpbnQgdHgsCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0
Q2xpcChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmln
aHQpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0Um91bmRlZFJlY3QoaW5u
ZXJCb3JkZXJSZWN0LCBpbm5lclRvcExlZnQsIGlubmVyVG9wUmlnaHQsIGlubmVyQm90dG9tTGVm
dCwgaW5uZXJCb3R0b21SaWdodCk7CiAgICAgICAgICAgICByb3VuZGVkUGF0aC5hZGRSb3VuZGVk
UmVjdChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmln
aHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKHJvdW5kZWRQYXRoKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTgzOSwxMyArMTgzOCwxMCBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGlu
dCB0eCwgaW50CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXRoLmFkZFJl
Y3QoaG9sZVJlY3QpOwogCi0gICAgICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7Ci0KICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxSdWxlKFJVTEVfRVZFTk9ERCk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IoZmlsbENvbG9yLCBzLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHMtPmNvbG9yU3Bh
Y2UoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFBhdGgocGF0aCk7CiAKICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCmlu
ZGV4IDE2NjEzYTUuLmMwOTQzNjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAKQEAgLTE2NiwxMSArMTY2LDkgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVj
dDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiAg
ICAgCiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPmNsaXAoY29udGVudFJlY3Qp
OwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7
ICAKICAgICBjb250ZXh0LT5zZXRBbHBoYShtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNz
ZWQgPyByZXBsYWNlbWVudFRleHRQcmVzc2VkUm91bmRlZFJlY3RPcGFjaXR5IDogcmVwbGFjZW1l
bnRUZXh0Um91bmRlZFJlY3RPcGFjaXR5KTsKICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IobV9t
aXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJl
Y3RQcmVzc2VkQ29sb3IoKSA6IENvbG9yOjp3aGl0ZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsK
LSAgICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwog
CiAgICAgZmxvYXQgbGFiZWxYID0gcm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24o
KS54KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAtIHRleHRXaWR0aCkg
LyAyKTsKICAgICBmbG9hdCBsYWJlbFkgPSByb3VuZGYocmVwbGFjZW1lbnRUZXh0UmVjdC5sb2Nh
dGlvbigpLnkoKSArIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAtIGZvbnQu
aGVpZ2h0KCkpIC8gMiArIGZvbnQuYXNjZW50KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKaW5kZXggMTk0MWQzMS4uYzAxYzIzYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC05NDgsOCArOTQ4LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBh
dGgoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIEludFJlY3QKICAgICAgICAgbGlu
ZURhc2guYXBwZW5kKHBhdFdpZHRoKTsKICAgICAgICAgbGluZURhc2guYXBwZW5kKHdoaXRlU3Bh
Y2VXaWR0aCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0TGluZURhc2gobGluZURhc2gs
IHBhdFdpZHRoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKGJvcmRlclBhdGgp
OwotICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGNhc2UgRE9VQkxFOiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaApp
bmRleCAwMjMwZTk4Li5hZTdlMzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
LmgKQEAgLTQ4LDYgKzQ4LDcgQEAgZW51bSBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgewogY2xhc3Mg
Q29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBQ
YXRoOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I7CkBAIC02MSw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgmKSB7IH0KICAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopID0g
MDsKIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNv
bnN0ID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwCmluZGV4IGU3YjlmYmIuLjI1ZWQxYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTUxLDkgKzE1MSw3IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QKICAgICAvLyBUaGUgU1ZHIHNwZWNpZmljYXRpb24gd2FudHMgdXMgdG8gY2xp
cCBldmVyeXRoaW5nLCBpZiBjbGlwLXBhdGggZG9lc24ndCBoYXZlIGEgY2hpbGQuCiAgICAgaWYg
KGNsaXBQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgY2xpcFBhdGguYWRkUmVjdChGbG9hdFJlY3Qo
KSk7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29udGV4dC0+YWRkUGF0aChjbGlw
UGF0aCk7Ci0gICAgY29udGV4dC0+Y2xpcFBhdGgoY2xpcFJ1bGUpOworICAgIGNvbnRleHQtPmNs
aXBQYXRoKGNsaXBQYXRoLCBjbGlwUnVsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggYTc1
NzE0Ny4uMDg0NjZhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0eWxl
KgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6
OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQq
JiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCit2b2lkIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBH
cmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNv
dXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKQEAgLTI2MCw5ICsyNjAsOSBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCogb2JqZWN0LCBHcmFwaGljcwogI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJl
c291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQ
YXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKTsKICAgICAgICAgZWxz
ZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBjb250
ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgp
OwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAppbmRleCBiYzBiODY0Li44OGE1NjJlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC01MSw3
ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAg
dmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RB
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgmKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9
CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlUGF0dGVybi5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm4uY3BwCmluZGV4IGQyZTQ1NjMuLjMxZTZhMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtMTgyLDE2ICsxODIsMTYgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNW
R1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQordm9pZCBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwg
Y29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJl
c291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCiAgICAgaWYgKCEocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwogICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgo
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgocGF0aCk7CiAgICAgfQogCiAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uaAppbmRleCBiYTRhZWM0Li4yZmMxNTIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29s
IG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoJik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5k
ZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJj
ZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
U29saWRDb2xvci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IuY3BwCmluZGV4IDBjMDk2NTIuLjEyMjBhYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApAQCAtNzUsMjggKzc1LDE3IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCogb2JqZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUp
Cit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVu
ZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoJiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAg
ICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKICAgICBpZiAo
IShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7CiAgICAgICAgIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgp
OworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0aCk7CiAgICAgICAgIGVsc2UgaWYg
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+
c3Ryb2tlUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKTsKICAg
ICB9Ci0KLSNpZiBQTEFURk9STShTS0lBKQotICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgaW50byB0
aGUgR3JhcGhpY3NDb250ZXh0Ci0gICAgLy8gV2ViS2l0IGltcGxpY2l0bHkgZXhwZWN0cyB1cyB0
byByZXNldCB0aGUgcGF0aC4KLSAgICAvLyBGb3IgZXhhbXBsZSBpbiBmaWxsQW5kU3Ryb2tlUGF0
aCgpIG9mIFJlbmRlclNWR1BhdGguY3BwIHRoZSBwYXRoIGlzCi0gICAgLy8gYWRkZWQgYmFjayB0
byB0aGUgY29udGV4dCBhZnRlciBmaWxsaW5nLiBUaGlzIGlzIGJlY2F1c2UgaW50ZXJuYWxseSBp
dAotICAgIC8vIGNhbGxzIENHQ29udGV4dEZpbGxQYXRoKCkgd2hpY2ggY2xvc2VzIHRoZSBwYXRo
LgotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5zZXRGaWxsU2hhZGVyKDApOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRTdHJva2VTaGFkZXIoMCk7Ci0jZW5kaWYKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAppbmRleCA0NDEwOWRiLi5kY2E1NGIzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaApA
QCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZy
b21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sID0gdHJ1ZSkgeyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSwgY29uc3QgUGF0aCYpOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91
bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZp
cnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAK
aW5kZXggNDgzMzAzZi4uMGVkYzNhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmNwcApAQCAtMTQ4LDE5ICsxNDgsMTcgQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpsYXlvdXQo
KQogCiB2b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKICAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogCiAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKICAg
ICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZH
UmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9y
KSkgewotICAgICAgICBjb250ZXh0LT5hZGRQYXRoKG1fcGF0aCk7CiAgICAgICAgIGlmIChmaWxs
UGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBw
bHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpOworICAgICAgICAgICAg
ZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFw
cGx5VG9GaWxsTW9kZSwgbV9wYXRoKTsKICAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5p
c1ZhbGlkKCkpIHsKICAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFs
bGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVz
b3VyY2UoKTsKICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNr
Q29sb3IpOwogICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2Uo
dGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICAgICAg
ZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlU
b0ZpbGxNb2RlKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIG1fcGF0aCk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTE2OSw2ICsxNjcsOCBAQCB2b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxB
bmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAgICBpZiAoIXN0cm9rZVBh
aW50aW5nUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIFBhdGggcGF0aDsKKwogICAg
IGJvb2wgcmVzdG9yZUNvbnRleHQgPSBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCkt
PnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRSkgewogICAgICAgICBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKQEAgLTE3NiwyMyArMTc2LDIyIEBAIHZv
aWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQogICAgICAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUGF0aCB0cmFuc2Zvcm1lZFBhdGgg
PSBtX3BhdGg7Ci0gICAgICAgIHRyYW5zZm9ybWVkUGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0
cm9rZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdGggPSBtX3BhdGg7CisgICAgICAgIHBhdGgudHJh
bnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOwogCiAgICAgICAgIGNvbnRleHQtPnNh
dmUoKTsKICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zv
cm0uaW52ZXJzZSgpKTsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aCh0cmFuc2Zvcm1lZFBhdGgp
OwogICAgICAgICByZXN0b3JlQ29udGV4dCA9IHRydWU7CiAgICAgfSBlbHNlCi0gICAgICAgIGNv
bnRleHQtPmFkZFBhdGgobV9wYXRoKTsKKyAgICAgICAgcGF0aCA9IG1fcGF0aDsKIAogICAgIGlm
IChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250
ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9TdHJva2VNb2RlKTsKKyAg
ICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29u
dGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIHBhdGgpOwogICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29s
b3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFs
bGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVz
b3VyY2UoKTsKICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xv
cik7CiAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0
eWxlLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSkpCi0gICAgICAgICAgICBmYWxsYmFja1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9k
ZSk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlz
LCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSwgcGF0aCk7CiAgICAgfQogCiAgICAgaWYgKHJl
c3RvcmVDb250ZXh0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
CmluZGV4IDdkZDc3OWEuLjVmYWIzNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAKQEAgLTMxOCwxNCArMzE4LDE0IEBAIGJvb2wgU1ZHSW5saW5lVGV4dEJv
eDo6YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgUmVu
ZGVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFz
ZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCkKK3ZvaWQgU1ZHSW5s
aW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBBU1NFUlQobV9wYWludGluZ1Jlc291cmNl
KTsKIAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVy
ZXIoKTsKICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi0gICAgbV9wYWludGluZ1Jlc291
cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGlu
Z1Jlc291cmNlTW9kZSk7CisgICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJj
ZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwgcGF0aCk7
CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBAIGJv
b2wgU1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGlu
ZyhHcmFwaGljc0NvbnRleHQqJiBjCiAKIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVzdG9yZUdy
YXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IFRleHRSdW4mIHRleHRSdW4pCiB7Ci0gICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4
dCk7CisgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgUGF0aCgpKTsKIAogI2lm
IEVOQUJMRShTVkdfRk9OVFMpCiAgICAgdGV4dFJ1bi5zZXRBY3RpdmVQYWludGluZ1Jlc291cmNl
KDApOwpAQCAtNTAwLDExICs1MDAsOSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVj
b3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEVUZXh0RAogICAgIHBh
dGguYWRkUmVjdChGbG9hdFJlY3QoZnJhZ21lbnQueCwgeSwgZnJhZ21lbnQud2lkdGgsIHRoaWNr
bmVzcykpOwogCiAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgp
OwotICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7CiAKICAgICBpZiAoYWNxdWlyZVBhaW50aW5n
UmVzb3VyY2UoY29udGV4dCwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0aW9uU3R5bGUpKQot
ICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0KTsKKyAgICAgICAgcmVsZWFz
ZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgcGF0aCk7CiAKICAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAppbmRleCA4ZTgy
ZGRhLi40NjJmZWYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgK
QEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4o
UmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKIAogICAgIGJvb2wg
YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKik7Ci0gICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGlj
c0NvbnRleHQqJik7CisgICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0Nv
bnRleHQqJiwgY29uc3QgUGF0aCYpOwogCiAgICAgYm9vbCBwcmVwYXJlR3JhcGhpY3NDb250ZXh0
Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBUZXh0UnVuJiwgUmVuZGVyU3R5bGUq
KTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhHcmFw
aGljc0NvbnRleHQqJiwgVGV4dFJ1biYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRm9u
dC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAppbmRleCA4OThjMjU5Li4wMDVmZTA1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdG
b250LmNwcApAQCAtNTM0LDEyICs1MzQsOSBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdG
b250KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAg
ICAgICAgICAgICAgICBQYXRoIGdseXBoUGF0aCA9IGlkZW50aWZpZXIucGF0aERhdGE7CiAgICAg
ICAgICAgICAgICAgICAgIGdseXBoUGF0aC50cmFuc2Zvcm0oZ2x5cGhQYXRoVHJhbnNmb3JtKTsK
IAotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+YWRkUGF0aChnbHlwaFBhdGgpOwotCiAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpID8g
cnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCktPnN0eWxlKCkgOiAwOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShydW4ucmVm
ZXJlbmNpbmdSZW5kZXJPYmplY3QoKSwgc3R5bGUsIGNvbnRleHQsIHJlc291cmNlTW9kZSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZShydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSwgY29udGV4dCwgcmVzb3VyY2VN
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBv
c3RBcHBseVJlc291cmNlKHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpLCBjb250ZXh0LCBy
ZXNvdXJjZU1vZGUsIGdseXBoUGF0aCk7CiAKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVzdG9yZSgpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdl
TG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjBkYmU0OS4uOTI1MTA2YiAxMDA2NDQKLS0t
IGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxMC0xMC0yOCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0OiBSZW1vdmUgImN1cnJlbnQgcGF0aCIgYW5kIGhhdmUgc3Ryb2tlUGF0aCwgZmlsbFBhdGgg
YW5kIGNsaXBQYXRoIHRha2UgYSBQYXRoIGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxNgorCisgICAgICAgICogVUlQcm9jZXNzL0Zp
bmRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yOjpkcmF3KToK
KwogMjAxMC0xMC0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1dlYktpdDIvVUlQcm9jZXNz
L0ZpbmRJbmRpY2F0b3IuY3BwIGIvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAK
aW5kZXggNTlkNTU0Ni4uNGRmYmZiZiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9VSVByb2Nlc3MvRmlu
ZEluZGljYXRvci5jcHAKKysrIGIvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAK
QEAgLTE0OSw5ICsxNDksOCBAQCB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UgogICAgICAgICBncmFw
aGljc0NvbnRleHQuc2F2ZSgpOwogICAgICAgICBGbG9hdFJlY3Qgb3V0ZXJQYXRoUmVjdCA9IGlu
ZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVy
LCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlcik7CiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkp
LCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5hZGRQYXRoKHBhdGhXaXRoUm91bmRlZFJlY3Qob3V0ZXJQYXRo
UmVjdCwgY29ybmVyUmFkaXVzKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29s
b3IobGlnaHRCb3JkZXJDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LmZpbGxQYXRoKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0
aChwYXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwogICAg
ICAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwogCiAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5zYXZlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74492</attachid>
            <date>2010-11-20 19:10:38 -0800</date>
            <delta_ts>2010-11-22 18:49:30 -0800</delta_ts>
            <desc>Proposed patch v3</desc>
            <filename>bug-48516-v3.diff</filename>
            <type>text/plain</type>
            <size>56218</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDc4NTVhZS4uMzM4N2Y5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTAtMTEtMjAgIEFuZHJlYXMgS2xp
bmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDogUmVtb3ZlICJjdXJyZW50IHBhdGgiIGFu
ZCBoYXZlIHN0cm9rZVBhdGgsIGZpbGxQYXRoIGFuZCBjbGlwUGF0aCB0YWtlIGEgUGF0aCBhcmd1
bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1
MTYKKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgaXMgcmVmYWN0b3Jpbmcgb25seS4KKwor
ICAgICAgICBmaWxsUGF0aCgpIC0+IGZpbGxQYXRoKGNvbnN0IFBhdGgmKQorICAgICAgICBzdHJv
a2VQYXRoKCkgLT4gc3Ryb2tlUGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgY2xpcFBhdGgoV2lu
ZFJ1bGUpIC0+IGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkKKworICAgICAgICBkcmF3
UGF0aCgpIHdhcyBvbmx5IHVzZWQgYnkgQ0csIHNvIG1hZGUgaXQgUExBVEZPUk0oQ0cpIHNwZWNp
ZmljLgorCisgICAgICAgIGJlZ2luUGF0aChjb25zdCBQYXRoJikgLT4gZGVwcmVjYXRlZEJlZ2lu
UGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgYWRkUGF0aChjb25zdCBQYXRoJikgLT4gZGVwcmVj
YXRlZEFkZFBhdGgoY29uc3QgUGF0aCYpCisKKyAgICAgICAgVGhlIFF0LCBDRyBhbmQgQ2Fpcm8g
aW1wbGVtZW50YXRpb25zIGFyZSBiZXN0LWVmZm9ydC4KKyAgICAgICAgRm9yIHRoZSByZXN0LCBJ
J3ZlIHB1dCBkZXByZWNhdGVkQmVnaW5QYXRoL2RlcHJlY2F0ZWRBZGRQYXRoIGFuZCBGSVhNRXMg
aW4gdGhlIHRocmVlIGFmZmVjdGVkIG1ldGhvZHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5p
bjoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3T3V0bGluZWRRdWFkKToKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290OjpwYWludCk6CisgICAgICAgICog
bWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGVDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udmV4UG9seWdvblBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0
aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFp
a3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0
V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6
cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2U6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jl
c291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6ZmlsbEFu
ZFN0cm9rZVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3JlR3Jh
cGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udCk6CisKIDIwMTAtMTEt
MjAgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXZpZCBLaWx6ZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAzMjQ2ZTBhLi5jNjRiNzFjIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
QEAgLTM1OCw5ICszNTgsOCBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJL
TlNfNFBhdGhFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfOUZsb2F0
UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NHNhdmVFdgogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQ1c2NhbGVFUktOU185RmxvYXRTaXplRQotX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQ3YWRkUGF0aEVSS05TXzRQYXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQ3cmVzdG9yZUV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUGF0
aEV2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUGF0aEVSS05TXzRQYXRoRQog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0RQog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0RVJL
TlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0
OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApp
bmRleCBiOWY4NmNlLi5lYjU1MmM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC04MTMsOSArODEzLDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1f
cGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYy0+YmVnaW5QYXRoKCk7Ci0gICAgICAgIGMtPmFk
ZFBhdGgobV9wYXRoKTsKLSAgICAgICAgYy0+ZmlsbFBhdGgoKTsKKyAgICAgICAgYy0+ZmlsbFBh
dGgobV9wYXRoKTsKICAgICAgICAgZGlkRHJhdyhtX3BhdGguYm91bmRpbmdSZWN0KCkpOwogICAg
IH0KIApAQCAtODMzLDkgKzgzMSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2UoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgYy0+YmVnaW5QYXRoKCk7Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLQog
I2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAvLyBGYXN0IGFwcHJveGltYXRpb24gb2YgdGhlIHN0
cm9rZSdzIGJvdW5kaW5nIHJlY3QuCiAgICAgICAgIC8vIFRoaXMgeWllbGRzIGEgc2xpZ2h0bHkg
b3ZlcnNpemVkIHJlY3QgYnV0IGlzIHZlcnkgZmFzdApAQCAtODQ2LDcgKzg0MSw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UoKQogICAgICAgICBDYW52YXNTdHJva2VT
dHlsZUFwcGxpZXIgc3Ryb2tlQXBwbGllcih0aGlzKTsKICAgICAgICAgRmxvYXRSZWN0IGJvdW5k
aW5nUmVjdCA9IG1fcGF0aC5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZUFwcGxpZXIpOwogI2Vu
ZGlmCi0gICAgICAgIGMtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgYy0+c3Ryb2tlUGF0aChtX3Bh
dGgpOwogICAgICAgICBkaWREcmF3KGJvdW5kaW5nUmVjdCk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGM0NzY5OWYuLjcyYjBmN2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNTM3LDIxICsx
NTM3LDE4IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvCiAgICAgLy8gb2Ygb3V0bGluZSAoYmVj
YXVzZSBpbmZsYXRpbmcgYSBxdWFkIGlzIGhhcmQpCiAgICAgewogICAgICAgICBjb250ZXh0LnNh
dmUoKTsKLSAgICAgICAgY29udGV4dC5hZGRQYXRoKHF1YWRQYXRoKTsKICAgICAgICAgY29udGV4
dC5jbGlwT3V0KHF1YWRQYXRoKTsKIAotICAgICAgICBjb250ZXh0LmFkZFBhdGgocXVhZFBhdGgp
OwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsK
ICAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihvdXRsaW5lQ29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwotICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgoKTsKKyAgICAgICAgY29udGV4
dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKIAogICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAg
ICB9CiAKICAgICAvLyBOb3cgZG8gdGhlIGZpbGwKLSAgICBjb250ZXh0LmFkZFBhdGgocXVhZFBh
dGgpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci0gICAgY29udGV4dC5maWxsUGF0aCgpOworICAgIGNvbnRleHQuZmlsbFBhdGgocXVh
ZFBhdGgpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVh
ZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCmluZGV4IGJhNjBjOWYuLmYwYTdhYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbWF0
aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCisrKyBiL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCkBAIC0xNjcsOSArMTY3LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWlu
dChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIC8vIGRyYXcgdG8gZW5kCiAg
ICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5iZWdp
blBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgocm9vdCk7Ci0gICAgaW5mby5jb250
ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKHJvb3QpOwog
ICAgIAogICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIApAQCAtMTgxLDggKzE3OSw2IEBA
IHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGlu
dCB0eSkKICAgICBtYXNrLmFkZExpbmVUbyh0b3BMZWZ0KTsKICAgICBtYXNrLmFkZExpbmVUbyhG
bG9hdFBvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkg
LSBsZWZ0RW5kLnkoKSkpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0g
ICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKG1hc2spOwogICAgIGluZm8uY29udGV4dC0+Y2xpcCht
YXNrKTsKICAgICAKICAgICAvLyBEcmF3IHRoZSB0aGljayBwYXJ0IG9mIHRoZSByb290LgpAQCAt
MTkzLDkgKzE4OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBp
bmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBsaW5lLm1vdmVUbyhib3R0b21MZWZ0KTsKICAgICBs
aW5lLmFkZExpbmVUbyh0b3BMZWZ0KTsKIAotICAgIGluZm8uY29udGV4dC0+YmVnaW5QYXRoKCk7
Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKGxpbmUpOwotICAgIGluZm8uY29udGV4dC0+c3Ry
b2tlUGF0aCgpOworICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aChsaW5lKTsKICAgICAKICAg
ICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbWF0
aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwIGIvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0
aE1MU3F1YXJlUm9vdC5jcHAKaW5kZXggODYyZDhhNC4uMTI4NWFjZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKKysrIGIvV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKQEAgLTEzMiwxMCArMTMyLDggQEAgdm9pZCBS
ZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50
IHR5KQogICAgIHJvb3QuYWRkTGluZVRvKHRvcExlZnQpOwogICAgIC8vIGRyYXcgdG8gZW5kCiAg
ICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7Ci0gICAgCi0gICAgaW5mby5jb250ZXh0LT5iZWdp
blBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgocm9vdCk7Ci0gICAgaW5mby5jb250
ZXh0LT5zdHJva2VQYXRoKCk7CisKKyAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgocm9vdCk7
CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgCkBAIC0xNDcsOCArMTQ1LDYg
QEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGlu
dCB0eCwgaW50IHR5KQogICAgIG1hc2suYWRkTGluZVRvKHRvcExlZnQpOwogICAgIG1hc2suYWRk
TGluZVRvKEZsb2F0UG9pbnQoMiAqIHRvcExlZnQueCgpIC0gbGVmdEVuZC54KCksIDIgKiB0b3BM
ZWZ0LnkoKSAtIGxlZnRFbmQueSgpKSk7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5iZWdpblBh
dGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgobWFzayk7CiAgICAgaW5mby5jb250ZXh0
LT5jbGlwKG1hc2spOwogICAgIAogICAgIC8vIERyYXcgdGhlIHRoaWNrIHBhcnQgb2YgdGhlIHJv
b3QuCkBAIC0xNTksOSArMTU1LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWlu
dChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIGxpbmUubW92ZVRvKGJvdHRv
bUxlZnQpOwogICAgIGxpbmUuYWRkTGluZVRvKHRvcExlZnQpOwogICAgIAotICAgIGluZm8uY29u
dGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKGxpbmUpOwotICAg
IGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0
aChsaW5lKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDcxYTRjNDguLjUx
MTJlMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApA
QCAtMTI3LDcgKzEyNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGlj
c0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEltYWdlQnVmZmVyOwogICAgIGNsYXNzIEtVUkw7
Ci0gICAgY2xhc3MgUGF0aDsKICAgICBjbGFzcyBQYXR0ZXJuOwogICAgIGNsYXNzIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CkBAIC0xOTYsNiArMTk1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpOwogICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICAg
ICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIHNh
dmUoKTsKQEAgLTIxMCw5ICsyMTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGRyYXdDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIHNob3VsZEFu
dGlhbGlhcyA9IGZhbHNlKTsKIAotICAgICAgICB2b2lkIGRyYXdQYXRoKCk7Ci0gICAgICAgIHZv
aWQgZmlsbFBhdGgoKTsKLSAgICAgICAgdm9pZCBzdHJva2VQYXRoKCk7CisgICAgICAgIHZvaWQg
ZmlsbFBhdGgoY29uc3QgUGF0aCYpOworICAgICAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0
aCYpOwogCiAgICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5IGJvcmRlci1yYWRpdXMgaW4g
Q1NTKSBqdXN0IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21lbnQuCiAgICAgICAgIHZvaWQg
c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3Bhbik7
CkBAIC0yNTMsNyArMjUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmLCBpbnQgdGhpY2tuZXNzKTsKICAg
ICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBjbGlwT3V0
Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0
IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRT
aXplJiBib3R0b21SaWdodCk7Ci0gICAgICAgIHZvaWQgY2xpcFBhdGgoV2luZFJ1bGUpOworICAg
ICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7CiAgICAgICAgIHZvaWQg
Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJv
b2wgYW50aWFsaWFzID0gdHJ1ZSk7CiAgICAgICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmKTsKIApAQCAtMzAyLDggKzMwMSwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0b3IpOwogCisjaWYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oQ0FJUk8p
ICYmICFQTEFURk9STShDRykgJiYgIVBMQVRGT1JNKEhBSUtVKQogICAgICAgICB2b2lkIGJlZ2lu
UGF0aCgpOwogICAgICAgICB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOworI2VuZGlmCiAKICAg
ICAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKIApAQCAtMzkzLDcgKzM5NCw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBib29sIGluVHJhbnNw
YXJlbmN5TGF5ZXIoKSBjb25zdDsKLSAgICAgICAgUGxhdGZvcm1QYXRoKiBjdXJyZW50UGF0aCgp
OwogICAgICAgICB2b2lkIHB1c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0
ICZyZWN0LCBxcmVhbCBvcGFjaXR5LCBRUGl4bWFwJiBhbHBoYU1hc2spOwogICAgICAgICB2b2lk
IHRha2VPd25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICBzdGF0aWMgUVBhaW50
ZXI6OkNvbXBvc2l0aW9uTW9kZSB0b1F0Q29tcG9zaXRpb25Nb2RlKENvbXBvc2l0ZU9wZXJhdG9y
IG9wKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQ
cml2YXRlLmgKaW5kZXggOTg1Y2FkOS4uNjk2OTMyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc5LDggKzc4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogI2lmIFBMQVRGT1JNKENB
SVJPKQogICAgICAgICBmbG9hdCBnbG9iYWxBbHBoYTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXRoVHJhbnNmb3JtOwogI2VuZGlmCiAgICAgfTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAppbmRleCA3NTVhZGZmLi45NzQyOGRhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cApAQCAtNTMxLDQ0ICs1MzEsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLQotICAgIHNldFBhdGhPbkNhaXJv
Q29udGV4dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQoKSk7CisgICAgc2V0UGF0
aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwogICAg
IGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBjcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwotICAgIHNldFBh
dGhPbkNhaXJvQ29udGV4dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQoKSk7Cisg
ICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0
KCkpOwogICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNyKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y3I7Ci0KLSAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIG1fZGF0YS0+bV9wZW5kaW5nUGF0
aC5jb250ZXh0KCkpOwotCi0gICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgZmlsbFJ1bGUoKSA9
PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JV
TEVfV0lORElORyk7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIEZpbGxBbmRT
dHJva2UpOwotCi0gICAgc2V0UGxhdGZvcm1GaWxsKHRoaXMsIGNyLCBtX2NvbW1vbik7Ci0gICAg
c2V0UGxhdGZvcm1TdHJva2UodGhpcywgY3IsIG1fY29tbW9uKTsKLSAgICBjYWlyb19uZXdfcGF0
aChjcik7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTYwNywxMiArNTg5
LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
UGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y3I7CisgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5j
b250ZXh0KCkpOwogICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIGNsaXBSdWxlID09IFJVTEVf
RVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5E
SU5HKTsKICAgICBjYWlyb19jbGlwKGNyKTsKIH0KQEAgLTk5NCwyNSArOTc3LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBv
cCkKICAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9kYXRhLT5jciwgdG9DYWlyb09wZXJhdG9yKG9w
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX25ld19wYXRo
KG1fZGF0YS0+bV9wZW5kaW5nUGF0aC5jb250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX21hdHJpeF90IGN1cnJlbnRNYXRy
aXg7Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChtX2RhdGEtPmNyLCAmY3VycmVudE1hdHJpeCk7Ci0g
ICAgY2Fpcm9fc2V0X21hdHJpeChtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpLCAmY3Vy
cmVudE1hdHJpeCk7Ci0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChtX2RhdGEt
Pm1fcGVuZGluZ1BhdGguY29udGV4dCgpLCBwYXRoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCmluZGV4IDUyN2NiNzIu
LjQ5NGI0MGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgKQEAg
LTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW5jbHVk
ZSAiQ2Fpcm9QYXRoLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgPGNh
aXJvLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtOTcsNyArOTYsNiBAQCBwdWJsaWM6CiAKICAg
ICBjYWlyb190KiBjcjsKICAgICBWZWN0b3I8ZmxvYXQ+IGxheWVyczsKLSAgICBDYWlyb1BhdGgg
bV9wZW5kaW5nUGF0aDsKIAogICAgIENvbnRleHRTaGFkb3cgc2hhZG93OwogICAgIFZlY3RvcjxD
b250ZXh0U2hhZG93PiBzaGFkb3dTdGFjazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggOGQ3MmI4NS4uYzEwYTIxZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKQEAgLTI5OSwyMSArMjk5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShj
b25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogLy8gVGhpcyBt
ZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlz
dHMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICAvLyBGSVhNRTogQ0cgYWRkZWQgQ0dDb250ZXh0QWRkRWxsaXBzZWluUmVjdCBp
biBUaWdlciwgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gcXVpdGUgZWFzaWx5IGRyYXcgYW4gZWxs
aXBzZS4KLSAgICAvLyBUaGlzIGNvZGUgY2FuIG9ubHkgaGFuZGxlIGNpcmNsZXMsIG5vdCBlbGxp
cHNlcy4gQnV0IGtodG1sIG9ubHkKLSAgICAvLyB1c2VzIGl0IGZvciBjaXJjbGVzLgotICAgIEFT
U0VSVChyZWN0LndpZHRoKCkgPT0gcmVjdC5oZWlnaHQoKSk7Ci0KICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAg
ICBmbG9hdCByID0gKGZsb2F0KXJlY3Qud2lkdGgoKSAvIDI7Ci0gICAgQ0dDb250ZXh0QWRkQXJj
KGNvbnRleHQsIHJlY3QueCgpICsgciwgcmVjdC55KCkgKyByLCByLCAwLjBmLCAyLjBmICogcGlG
bG9hdCwgMCk7Ci0gICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwotCi0gICAgZHJhd1Bh
dGgoKTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOworICAgIGRy
YXdQYXRoKHBhdGgpOwogfQogCiAKQEAgLTQwNSwxMyArMzk2LDE3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGlu
dCBhbmdsZVNwCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAotc3Rh
dGljIHZvaWQgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwg
c2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorc3RhdGljIFBhdGgg
Y3JlYXRlQ29udmV4UG9seWdvblBhdGgoc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2lu
dCogcG9pbnRzKQogewotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBDR0Nv
bnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBwb2ludHNbMF0ueCgpLCBwb2ludHNbMF0ueSgpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG51bVBvaW50czsgaSsrKQotICAgICAgICBDR0Nv
bnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0ueCgpLCBwb2ludHNbaV0ueSgp
KTsKLSAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7CisgICAgQVNTRVJUKG51bVBvaW50
cyA+IDApOworCisgICAgUGF0aCBwYXRoOworICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkKKyAgICAgICAgcGF0aC5h
ZGRMaW5lVG8ocG9pbnRzW2ldKTsKKyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOworCisgICAgcmV0
dXJuIHBhdGg7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihz
aXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2Vk
KQpAQCAtNDI3LDggKzQyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9s
eWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzCiAgICAgaWYgKGFu
dGlhbGlhc2VkICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXMoY29udGV4dCwgYW50aWFsaWFzZWQpOwogCi0gICAgYWRkQ29udmV4UG9seWdv
blRvQ29udGV4dChjb250ZXh0LCBucG9pbnRzLCBwb2ludHMpOwotICAgIGRyYXdQYXRoKCk7Cisg
ICAgZHJhd1BhdGgoY3JlYXRlQ29udmV4UG9seWdvblBhdGgobnBvaW50cywgcG9pbnRzKSk7CiAK
ICAgICBpZiAoYW50aWFsaWFzZWQgIT0gc2hvdWxkQW50aWFsaWFzKCkpCiAgICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzaG91bGRBbnRpYWxpYXMoKSk7CkBAIC00
NDYsOSArNDQwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KIAogICAgIGlmIChhbnRpYWxp
YXMgIT0gc2hvdWxkQW50aWFsaWFzKCkpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhjb250ZXh0LCBhbnRpYWxpYXMpOwotICAgIAotICAgIGFkZENvbnZleFBvbHlnb25Ub0Nv
bnRleHQoY29udGV4dCwgbnVtUG9pbnRzLCBwb2ludHMpOwotICAgIGNsaXBQYXRoKFJVTEVfTk9O
WkVSTyk7CisKKyAgICBjbGlwUGF0aChjcmVhdGVDb252ZXhQb2x5Z29uUGF0aChudW1Qb2ludHMs
IHBvaW50cyksIFJVTEVfTk9OWkVSTyk7CiAKICAgICBpZiAoYW50aWFsaWFzICE9IHNob3VsZEFu
dGlhbGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwg
c2hvdWxkQW50aWFsaWFzKCkpOwpAQCAtNTExLDcgKzUwNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IENHUGF0CiAgICAgcmV0dXJuIHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTIxLDExICs1MTQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdQYXRoKCkKIAogICAgIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tl
R3JhZGllbnQpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0
byBmaWxsICYgc3Ryb2tlIGEgcGF0aCB1c2luZyBncmFkaWVudHMKLSAgICAgICAgZmlsbFBhdGgo
KTsKLSAgICAgICAgc3Ryb2tlUGF0aCgpOworICAgICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBh
Ym91dCB0aGlzLgorICAgICAgICBmaWxsUGF0aChwYXRoKTsKKyAgICAgICAgc3Ryb2tlUGF0aChw
YXRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChj
b250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRo
KCkpOworCiAgICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0
ZXJuKCk7CiAgICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCkBAIC01NDQsMTMgKzU0MSwxNiBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoQ0dDb250ZXh0UmVmIGNv
bnRleHQsIFdpbmRSdWxlIGZpbGxSdWxlKQogICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250
ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7
CisgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwog
ICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZF
Tk9ERCkKQEAgLTU2OCwxMyArNTY4LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCgpCiAgICAgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoY29udGV4dCwgZmlsbFJ1bGUoKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBD
R0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworCiAgICAgaWYg
KG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2Vk
UGF0aChjb250ZXh0KTsKQEAgLTY0Myw4ICs2NDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExl
ZgogCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgdG9wTGVm
dCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICBhZGRQYXRoKHBhdGgp
OwotICAgIGZpbGxQYXRoKCk7CisgICAgZmlsbFBhdGgocGF0aCk7CiAKICAgICBpZiAob2xkRmls
bENvbG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKICAgICAgICAg
c2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yLCBvbGRDb2xvclNwYWNlKTsKQEAg
LTY2OSwxOSArNjcxLDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNs
aXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmICghQ0dDb250ZXh0
SXNQYXRoRW1wdHkoY29udGV4dCkpIHsKLSAgICAgICAgaWYgKGNsaXBSdWxlID09IFJVTEVfRVZF
Tk9ERCkKLSAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICB9CisgICAgQ0dDb250
ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRBZGRQYXRoKHBs
YXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKworICAgIGlmIChjbGlwUnVs
ZSA9PSBSVUxFX0VWRU5PREQpCisgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKKyAg
ICBlbHNlCisgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBp
bnQgdGhpY2tuZXNzKQpAQCAtODYzLDE2ICs4NjksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblBhdGgoKQotewotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRl
eHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0
Zm9ybVBhdGgoKSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgm
IHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKaW5k
ZXggNjkxMWIzMS4uNjdkMzY0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKQEAgLTEzMiw3ICsxMzIsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHJlY3QsIGlu
dCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcAogICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VBcmMo
cmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVTcGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpA
QCAtMTkxLDE3ICsxOTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIC8vIEZpbGxS
ZWN0IGFuZCBGaWxsQXJjIGNhbGxzIGFyZSBuZWVkZWQuCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3Jh
cGhpY3NDb250ZXh0T3BlblZHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAKaW5kZXggMGQxNmQ0ZC4uMDRhNWUyNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3Bl
blZHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0Nv
bnRleHRPcGVuVkcuY3BwCkBAIC0xMzksMjggKzEzOSwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCog
cG9pbgogICAgIFVOVVNFRF9QQVJBTShzaG91bGRBbnRpYWxpYXMpOyAvLyBGSVhNRQogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4K
KyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOworCiAgICAgbV9kYXRhLT5kcmF3
UGF0aChWR19GSUxMX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UGF0aChWR19TVFJPS0VfUEFUSCwg
bV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKLX0KKyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBh
Ym91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aCk7CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5kcmF3UGF0aChWR19GSUxMX1BBVEgg
fCBWR19TVFJPS0VfUEFUSCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEt
PmRyYXdQYXRoKFZHX1NUUk9LRV9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpA
QCAtMjIxLDExICsyMjEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgIG1fZGF0YS0+aW50ZXJzZWN0Q2xpcFJlY3QocmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
KyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOwor
ICAgIGFkZFBhdGgocGF0aCk7CisKICAgICBtX2RhdGEtPmNsaXBQYXRoKCoobV9kYXRhLT5jdXJy
ZW50UGF0aCgpKSwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgY2xpcFJ1bGUpOwogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQu
Y3BwCmluZGV4IGZjNTdiMTQuLmIwY2VhZjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC0xOTMsOSArMTkzLDYgQEAgcHVi
bGljOgogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsKIAotICAgIC8vIE9ubHkgdXNlZCBieSBTVkcgZm9yIG5vdy4KLSAgICBRUGFpbnRlclBhdGgg
Y3VycmVudFBhdGg7Ci0KICAgICBDb250ZXh0U2hhZG93IHNoYWRvdzsKICAgICBRU3RhY2s8Q29u
dGV4dFNoYWRvdz4gc2hhZG93U3RhY2s7CiAKQEAgLTIwNCwxMyArMjAxLDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc2hhZG93Lm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdzsK
ICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBjbGVhckN1cnJlbnRQYXRoKCkKLSAgICB7Ci0gICAg
ICAgIGlmICghY3VycmVudFBhdGguZWxlbWVudENvdW50KCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGN1cnJlbnRQYXRoID0gUVBhaW50ZXJQYXRoKCk7Ci0gICAgfQotCiAgICAgUVJl
Y3RGIGNsaXBCb3VuZGluZ1JlY3QoKSBjb25zdAogICAgIHsKICNpZiBRVF9WRVJTSU9OID49IFFU
X1ZFUlNJT05fQ0hFQ0soNCwgOCwgMCkKQEAgLTMxMSwxMSArMzAxLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKIAogICAgIG1fZGF0YS0+cCgpLT5yZXN0
b3JlKCk7CiAKLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpICYmIG1fY29t
bW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIFFUcmFu
c2Zvcm0gbWF0cml4ID0gbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm07Ci0gICAgICAgIG1f
ZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4OwotICAgIH0K
LQogICAgIGlmIChtX2RhdGEtPnNoYWRvd1N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgbV9kYXRh
LT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KCk7CiAgICAgZWxzZQpAQCAtNTAzLDEzICs0ODgsMTMg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2lu
dHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAgICAgICAgcC0+c2V0UmVuZGVySGludChRUGFp
bnRlcjo6QW50aWFsaWFzaW5nLCBwYWludGVyV2FzQW50aWFsaWFzZWQpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGhUb0ZpbGwpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKLSAgICBR
UGFpbnRlclBhdGgmIHBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoOyAvLyBBdm9pZCBkZXRhY2hp
bmcgdGhlIFFQYWludGVyUGF0aAorICAgIFFQYWludGVyUGF0aCBwYXRoID0gcGF0aFRvRmlsbC5w
bGF0Zm9ybVBhdGgoKTsKICAgICBwYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVs
ZSgpKSk7CiAKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewpAQCAtNTM5LDE4ICs1MjQs
MTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICAgICAgcC0+ZmlsbFBh
dGgocGF0aCwgYnJ1c2gpOwogICAgIH0gZWxzZQogICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBw
LT5icnVzaCgpKTsKLQotICAgIG1fZGF0YS0+Y2xlYXJDdXJyZW50UGF0aCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAo
KTsKICAgICBRUGVuIHBlbihwLT5wZW4oKSk7Ci0gICAgUVBhaW50ZXJQYXRoJiBwYXRoID0gbV9k
YXRhLT5jdXJyZW50UGF0aDsgLy8gQXZvaWQgZGV0YWNoaW5nIHRoZSBRUGFpbnRlclBhdGgKKyAg
ICBRUGFpbnRlclBhdGggcGF0aCA9IHBhdGhUb1N0cm9rZS5wbGF0Zm9ybVBhdGgoKTsKICAgICBw
YXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAgICBpZiAobV9k
YXRhLT5oYXNTaGFkb3coKSkgewpAQCAtNTczLDcgKzU1Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKCkKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOwogICAg
IH0gZWxzZQogICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHBlbik7Ci0gICAgbV9kYXRhLT5j
bGVhckN1cnJlbnRQYXRoKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVwZWF0UGF0
dGVybihRUGFpbnRlciogcCwgUVBpeG1hcCogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgYm9vbCByZXBlYXRYLCBjb25zdCBib29sIHJlcGVhdFkpCkBAIC03NTIsMzAgKzczNCwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZv
cm1QYXRoKCksIFFDb2xvcihjb2xvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5QYXRoKCkKLXsKLSAgICBtX2RhdGEtPmNsZWFyQ3VycmVudFBhdGgoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAoIW1f
ZGF0YS0+Y3VycmVudFBhdGguZWxlbWVudENvdW50KCkpIHsKLSAgICAgICAgbV9kYXRhLT5jdXJy
ZW50UGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgbV9kYXRhLT5jdXJyZW50UGF0aC5hZGRQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCkpOwotfQot
CiBib29sIEdyYXBoaWNzQ29udGV4dDo6aW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fZGF0YS0+bGF5ZXJDb3VudDsKIH0KIAotUGxhdGZvcm1QYXRoKiBHcmFwaGlj
c0NvbnRleHQ6OmN1cnJlbnRQYXRoKCkKLXsKLSAgICByZXR1cm4gJm1fZGF0YS0+Y3VycmVudFBh
dGg7Ci19Ci0KIENvbnRleHRTaGFkb3cqIEdyYXBoaWNzQ29udGV4dDo6Y29udGV4dFNoYWRvdygp
CiB7CiAgICAgcmV0dXJuICZtX2RhdGEtPnNoYWRvdzsKQEAgLTc4OSwxMyArNzUyLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBtX2Rh
dGEtPnAoKS0+c2V0Q2xpcFJlY3QocmVjdCwgUXQ6OkludGVyc2VjdENsaXApOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKLSAgICBRUGFpbnRlclBhdGggbmV3UGF0aCA9IG1f
ZGF0YS0+Y3VycmVudFBhdGg7CisgICAgUVBhaW50ZXJQYXRoIG5ld1BhdGggPSBwYXRoLnBsYXRm
b3JtUGF0aCgpOwogICAgIG5ld1BhdGguc2V0RmlsbFJ1bGUoY2xpcFJ1bGUgPT0gUlVMRV9FVkVO
T0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKICAgICBwLT5zZXRDbGlw
UGF0aChuZXdQYXRoLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CkBAIC0xMDM3LDEyICsxMDAwLDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgd2lkdGgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUVBhaW50ZXJQYXRoIHBhdGg7CisgICAgUGF0aCBwYXRoOwogICAgIHBhdGgu
YWRkUmVjdChyZWN0KTsKICAgICBzZXRTdHJva2VUaGlja25lc3Mod2lkdGgpOwotICAgIG1fZGF0
YS0+Y3VycmVudFBhdGggPSBwYXRoOwotCi0gICAgc3Ryb2tlUGF0aCgpOworICAgIHN0cm9rZVBh
dGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAg
bGMpCkBAIC0xMTYyLDEyICsxMTIzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAoKS0+
dHJhbnNsYXRlKHgsIHkpOwotCi0gICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmlzRW1wdHko
KSkgewotICAgICAgICBRVHJhbnNmb3JtIG1hdHJpeDsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50
UGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGggKiBtYXRyaXgudHJhbnNsYXRlKC14LCAteSk7Ci0g
ICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsKLSAg
ICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKQEAg
LTExNzYsMTIgKzExMzEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJh
ZGlhbnMpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+cCgpLT5yb3RhdGUoMTgwIC8g
TV9QSSpyYWRpYW5zKTsKLQotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBh
dGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4LnJvdGF0ZSgtMTgwIC8gTV9QSSpyYWRp
YW5zKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm0ucm90YXRlKHJhZGlh
bnMpOwotICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgcykKQEAgLTExOTAsMTIgKzExMzksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAo
KS0+c2NhbGUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKLQotICAgIGlmICghbV9kYXRhLT5jdXJy
ZW50UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgICAg
IG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4LnNjYWxl
KDEgLyBzLndpZHRoKCksIDEgLyBzLmhlaWdodCgpKTsKLSAgICAgICAgbV9jb21tb24tPnN0YXRl
LnBhdGhUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Ci0g
ICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiBy
ZWN0KQpAQCAtMTI1MiwxNSArMTE5NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fZGF0YS0+cCgpLT5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRydWUpOwotCi0g
ICAgLy8gVHJhbnNmb3JtYXRpb25zIHRvIHRoZSBjb250ZXh0IHNob3VsZG4ndCB0cmFuc2Zvcm0g
dGhlIGN1cnJlbnRQYXRoLgotICAgIC8vIFdlIGhhdmUgdG8gdW5kbyBldmVyeSBjaGFuZ2UgbWFk
ZSB0byB0aGUgY29udGV4dCBmcm9tIHRoZSBjdXJyZW50UGF0aAotICAgIC8vIHRvIGF2b2lkIHdy
b25nIGRyYXdpbmdzLgotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkgJiYg
dHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zvcm0gbWF0cml4ID0g
dHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICAgICAgbV9kYXRhLT5jdXJyZW50UGF0aCA9IG1fZGF0
YS0+Y3VycmVudFBhdGggKiBtYXRyaXg7Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJh
bnNmb3JtLm11bHRpcGx5KHRyYW5zZm9ybS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwotICAg
IH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYs
IGNvbnN0IEludFJlY3QmKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4IGU1MDZlNWQuLjc5ZDdkMGEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lh
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAKQEAgLTQyMCwxMSArNDIwLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHApCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5jbGlw
UGF0aChwYXRoLCBTa1JlZ2lvbjo6a0RpZmZlcmVuY2VfT3ApOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvQ2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8g
RklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQ
YXRoKHBhdGhUb0NsaXApOworCiAgICAgU2tQYXRoIHBhdGggPSBwbGF0Zm9ybUNvbnRleHQoKS0+
Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAgICBpZiAoIWlzUGF0aFNraWFTYWZl
KGdldENUTSgpLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzIzLDExICs3MjcsMTUgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGhUb0ZpbGwpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBh
dGgoKTsKKyAgICBhZGRQYXRoKHBhdGhUb0ZpbGwpOworCiAgICAgU2tQYXRoIHBhdGggPSBwbGF0
Zm9ybUNvbnRleHQoKS0+Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAgICBpZiAo
IWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgIHJldHVybjsKQEAgLTExNzcs
MTEgKzExODUsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRS
ZWN0JiByLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMu
CisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoVG9TdHJva2UpOworCiAgICAgU2tQ
YXRoIHBhdGggPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0
ZXMoKTsKICAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5DRS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dy
YXBoaWNzQ29udGV4dFdpbkNFLmNwcAppbmRleCA4YWY2ZWY3Li4xZmRlYjZlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdp
bkNFLmNwcApAQCAtMTMyNSw4ICsxMzI1LDEyIEBAIENvbG9yIGdyYWRpZW50QXZlcmFnZUNvbG9y
KGNvbnN0IEdyYWRpZW50KiBncmFkaWVudCkKICAgICAgICAgLCAoc3RvcC5hbHBoYSArIGxhc3RT
dG9wLmFscGhhKSAqIDAuNWYpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Cisg
ICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAg
ICBhZGRQYXRoKHBhdGgpOworCiAgICAgQ29sb3IgYyA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQKICAgICAgICAgPyBncmFkaWVudEF2ZXJhZ2VDb2xvcihtX2NvbW1vbi0+c3RhdGUuZmls
bEdyYWRpZW50LmdldCgpKQogICAgICAgICA6IGZpbGxDb2xvcigpOwpAQCAtMTM3Niw2ICsxMzgw
LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICBpZiAoIW1fZGF0
YS0+bV9kYykKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJv
dXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOworCiAgICAgT3du
UHRyPEhQRU4+IHBlbiA9IGNyZWF0ZVBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3Mo
KSwgc3Ryb2tlU3R5bGUoKSk7CiAKICAgICBpZiAobV9kYXRhLT5tX29wYWNpdHkgPCAxLjBmIHx8
IG1fZGF0YS0+aGFzQWxwaGEoKSkgewpAQCAtMTkwMCw3ICsxOTA4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVs
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKaW5kZXggNTNhOWNjZC4uNTdmNWRlMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBJbnRSZWN0JikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBA
IC01MzMsMzAgKzUzMywzMiBAQCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6
OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAogICAgIHJldHVybiBJbnRlcnBvbGF0
aW9uRGVmYXVsdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogI2lmIFVTRShX
WEdDKQorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRo
KCk7CisgICAgYWRkUGF0aChwYXRoKTsKKwogICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1f
ZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7CiAgICAgaWYgKGdjKQogICAgICAg
ICBnYy0+RmlsbFBhdGgobV9kYXRhLT5jdXJyZW50UGF0aCk7CiAjZW5kaWYKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICNpZiBVU0UoV1hHQykKKyAgICAvLyBGSVhNRTog
QmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0
aCk7CisKICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdy
YXBoaWNzQ29udGV4dCgpOwogICAgIGlmIChnYykKICAgICAgICAgZ2MtPlN0cm9rZVBhdGgobV9k
YXRhLT5jdXJyZW50UGF0aCk7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKCkKLXsKLSAgICBmaWxsUGF0aCgpOwotICAgIHN0cm9rZVBhdGgoKTsKLX0KLQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCmluZGV4IDE0M2M3MmMuLmJkMTkxNjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTEwNjQsNyArMTA2NCw2IEBAIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBpbnQgdHgsCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRS
ZWN0Q2xpcChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9t
UmlnaHQpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0Um91bmRlZFJlY3Qo
aW5uZXJCb3JkZXJSZWN0LCBpbm5lclRvcExlZnQsIGlubmVyVG9wUmlnaHQsIGlubmVyQm90dG9t
TGVmdCwgaW5uZXJCb3R0b21SaWdodCk7CiAgICAgICAgICAgICByb3VuZGVkUGF0aC5hZGRSb3Vu
ZGVkUmVjdChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9t
UmlnaHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKHJvdW5kZWRQYXRo
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTgwNSwxMyArMTgwNCwxMCBAQCB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGludCB0eCwgaW50CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXRoLmFk
ZFJlY3QoaG9sZVJlY3QpOwogCi0gICAgICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7Ci0KICAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxSdWxlKFJVTEVfRVZFTk9ERCk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxs
Q29sb3IoZmlsbENvbG9yLCBzLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHMtPmNvbG9y
U3BhY2UoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgICAgICAgICAg
Y29udGV4dC0+ZmlsbFBhdGgocGF0aCk7CiAKICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CmluZGV4IDE2NjEzYTUuLmMwOTQzNjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAKQEAgLTE2NiwxMSArMTY2LDkgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
CiAgICAgCiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPmNsaXAoY29udGVudFJl
Y3QpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPmFkZFBhdGgocGF0
aCk7ICAKICAgICBjb250ZXh0LT5zZXRBbHBoYShtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1By
ZXNzZWQgPyByZXBsYWNlbWVudFRleHRQcmVzc2VkUm91bmRlZFJlY3RPcGFjaXR5IDogcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RPcGFjaXR5KTsKICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Io
bV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0Um91bmRl
ZFJlY3RQcmVzc2VkQ29sb3IoKSA6IENvbG9yOjp3aGl0ZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgp
KTsKLSAgICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgp
OwogCiAgICAgZmxvYXQgbGFiZWxYID0gcm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRp
b24oKS54KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAtIHRleHRXaWR0
aCkgLyAyKTsKICAgICBmbG9hdCBsYWJlbFkgPSByb3VuZGYocmVwbGFjZW1lbnRUZXh0UmVjdC5s
b2NhdGlvbigpLnkoKSArIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAtIGZv
bnQuaGVpZ2h0KCkpIC8gMiArIGZvbnQuYXNjZW50KCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKaW5kZXggZTEzYjFmOS4uZTk5NjdkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC05NTUsOCArOTU1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3hTaWRlRnJv
bVBhdGgoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIEludFJlY3QKICAgICAgICAg
bGluZURhc2guYXBwZW5kKHBhdFdpZHRoKTsKICAgICAgICAgbGluZURhc2guYXBwZW5kKHdoaXRl
U3BhY2VXaWR0aCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0TGluZURhc2gobGluZURh
c2gsIHBhdFdpZHRoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKGJvcmRlclBh
dGgpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgRE9VQkxFOiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
aAppbmRleCAwMjMwZTk4Li5hZTdlMzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgZW51bSBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgewogY2xh
c3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFz
cyBQYXRoOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I7CkBAIC02MSw3ICs2Miw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wg
bWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQg
c2hvcnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQsIGNvbnN0IFBhdGgmKSB7IH0K
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
ID0gMDsKIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgp
IGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwCmluZGV4IGU3YjlmYmIuLjI1ZWQxYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTUxLDkgKzE1MSw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QKICAgICAvLyBUaGUgU1ZHIHNwZWNpZmljYXRpb24gd2FudHMgdXMgdG8g
Y2xpcCBldmVyeXRoaW5nLCBpZiBjbGlwLXBhdGggZG9lc24ndCBoYXZlIGEgY2hpbGQuCiAgICAg
aWYgKGNsaXBQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgY2xpcFBhdGguYWRkUmVjdChGbG9hdFJl
Y3QoKSk7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29udGV4dC0+YWRkUGF0aChj
bGlwUGF0aCk7Ci0gICAgY29udGV4dC0+Y2xpcFBhdGgoY2xpcFJ1bGUpOworICAgIGNvbnRleHQt
PmNsaXBQYXRoKGNsaXBQYXRoLCBjbGlwUnVsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXgg
YTc1NzE0Ny4uMDg0NjZhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQ6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlclN0
eWxlKgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpCit2b2lkIFJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0
LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUs
IGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChy
ZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKQEAgLTI2MCw5ICsyNjAsOSBAQCB2
b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCogb2JqZWN0LCBHcmFwaGljcwogI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZp
bGxQYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKTsKICAgICAgICAg
ZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBj
b250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBh
dGgpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAppbmRleCBiYzBiODY0Li44OGE1NjJlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNh
Y2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAg
ICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUq
LCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250
ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIHBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgmKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm4uY3BwCmluZGV4IGQyZTQ1NjMuLjMxZTZhMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApAQCAtMTgyLDE2ICsxODIsMTYgQEAg
Ym9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRl
clNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSwgY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJU
KHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCiAgICAgaWYgKCEocmVzb3Vy
Y2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYg
QXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwogICAgICAgICBlbHNlIGlmIChyZXNvdXJj
ZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBh
dGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgocGF0aCk7CiAgICAgfQogCiAg
ICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uaAppbmRleCBiYTRhZWM0Li4yZmMxNTIyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBi
b29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYs
IHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBs
eVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
LCBjb25zdCBQYXRoJik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0Jv
eChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBS
ZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNv
dXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuY3BwCmluZGV4IDBjMDk2NTIuLjEyMjBhYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApAQCAtNzUsMjggKzc1LDE3
IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjphcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1v
ZGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoJiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsK
ICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKICAgICBp
ZiAoIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7CiAgICAgICAgIGlmIChyZXNv
dXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0
aCgpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0aCk7CiAgICAgICAgIGVsc2Ug
aWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4
dC0+c3Ryb2tlUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKTsK
ICAgICB9Ci0KLSNpZiBQTEFURk9STShTS0lBKQotICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgaW50
byB0aGUgR3JhcGhpY3NDb250ZXh0Ci0gICAgLy8gV2ViS2l0IGltcGxpY2l0bHkgZXhwZWN0cyB1
cyB0byByZXNldCB0aGUgcGF0aC4KLSAgICAvLyBGb3IgZXhhbXBsZSBpbiBmaWxsQW5kU3Ryb2tl
UGF0aCgpIG9mIFJlbmRlclNWR1BhdGguY3BwIHRoZSBwYXRoIGlzCi0gICAgLy8gYWRkZWQgYmFj
ayB0byB0aGUgY29udGV4dCBhZnRlciBmaWxsaW5nLiBUaGlzIGlzIGJlY2F1c2UgaW50ZXJuYWxs
eSBpdAotICAgIC8vIGNhbGxzIENHQ29udGV4dEZpbGxQYXRoKCkgd2hpY2ggY2xvc2VzIHRoZSBw
YXRoLgotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5zZXRGaWxsU2hhZGVyKDApOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5zZXRTdHJva2VTaGFkZXIoMCk7Ci0jZW5kaWYKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmggYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAppbmRleCA0NDEwOWRiLi5kY2E1NGIz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVu
dEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sID0gdHJ1ZSkgeyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSwgY29uc3QgUGF0aCYpOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNl
Qm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAg
IHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKaW5kZXggNDgzMzAzZi4uMGVkYzNhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcApAQCAtMTQ4LDE5ICsxNDgsMTcgQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpsYXlv
dXQoKQogCiB2b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKIHsKLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogCiAgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsK
ICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGluZ1Jlc291cmNlID0gUmVuZGVy
U1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0Nv
bG9yKSkgewotICAgICAgICBjb250ZXh0LT5hZGRQYXRoKG1fcGF0aCk7CiAgICAgICAgIGlmIChm
aWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwg
QXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0
QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpOworICAgICAgICAg
ICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQs
IEFwcGx5VG9GaWxsTW9kZSwgbV9wYXRoKTsKICAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xv
ci5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciog
ZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5n
UmVzb3VyY2UoKTsKICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxi
YWNrQ29sb3IpOwogICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICAg
ICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBw
bHlUb0ZpbGxNb2RlKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIG1fcGF0aCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTE2OSw2ICsxNjcsOCBAQCB2b2lkIFJlbmRlclNWR1BhdGg6OmZp
bGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAgICBpZiAoIXN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIFBhdGggcGF0aDsKKwog
ICAgIGJvb2wgcmVzdG9yZUNvbnRleHQgPSBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnN2Z1N0eWxl
KCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRSkgewogICAgICAgICBT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obm9kZSgpKTsKQEAgLTE3NiwyMyArMTc2LDIyIEBA
IHZvaWQgUmVuZGVyU1ZHUGF0aDo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQogICAgICAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUGF0aCB0cmFuc2Zvcm1lZFBh
dGggPSBtX3BhdGg7Ci0gICAgICAgIHRyYW5zZm9ybWVkUGF0aC50cmFuc2Zvcm0obm9uU2NhbGlu
Z1N0cm9rZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdGggPSBtX3BhdGg7CisgICAgICAgIHBhdGgu
dHJhbnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOwogCiAgICAgICAgIGNvbnRleHQt
PnNhdmUoKTsKICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0uaW52ZXJzZSgpKTsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aCh0cmFuc2Zvcm1lZFBh
dGgpOwogICAgICAgICByZXN0b3JlQ29udGV4dCA9IHRydWU7CiAgICAgfSBlbHNlCi0gICAgICAg
IGNvbnRleHQtPmFkZFBhdGgobV9wYXRoKTsKKyAgICAgICAgcGF0aCA9IG1fcGF0aDsKIAogICAg
IGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBj
b250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9TdHJva2VNb2RlKTsK
KyAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywg
Y29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIHBhdGgpOwogICAgIGVsc2UgaWYgKGZhbGxiYWNr
Q29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciog
ZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5n
UmVzb3VyY2UoKTsKICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tD
b2xvcik7CiAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMs
IHN0eWxlLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSkpCi0gICAgICAgICAgICBmYWxsYmFj
a1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tl
TW9kZSk7CisgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0
aGlzLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSwgcGF0aCk7CiAgICAgfQogCiAgICAgaWYg
KHJlc3RvcmVDb250ZXh0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCmluZGV4IGQxZjY2MGEuLmY3ZmM1MzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAKQEAgLTMxOCwxNCArMzE4LDE0IEBAIGJvb2wgU1ZHSW5saW5lVGV4
dEJveDo6YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
UmVuZGVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVs
ZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCkKK3ZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYg
Y29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBBU1NFUlQobV9wYWludGluZ1Jlc291
cmNlKTsKIAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVu
ZGVyZXIoKTsKICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwogCi0gICAgbV9wYWludGluZ1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWlu
dGluZ1Jlc291cmNlTW9kZSk7CisgICAgbV9wYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNv
dXJjZShwYXJlbnRSZW5kZXJlciwgY29udGV4dCwgbV9wYWludGluZ1Jlc291cmNlTW9kZSwgcGF0
aCk7CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gMDsKIH0KIApAQCAtMzQ0LDcgKzM0NCw3IEBA
IGJvb2wgU1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQqJiBjCiAKIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVzdG9y
ZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIFRleHRSdW4mIHRleHRSdW4pCiB7Ci0gICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29u
dGV4dCk7CisgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgUGF0aCgpKTsKIAog
I2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgdGV4dFJ1bi5zZXRBY3RpdmVQYWludGluZ1Jlc291
cmNlKDApOwpAQCAtNTAwLDExICs1MDAsOSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEVUZXh0RAogICAg
IHBhdGguYWRkUmVjdChGbG9hdFJlY3QoZnJhZ21lbnQueCwgeSwgZnJhZ21lbnQud2lkdGgsIHRo
aWNrbmVzcykpOwogCiAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0
aCgpOwotICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7CiAKICAgICBpZiAoYWNxdWlyZVBhaW50
aW5nUmVzb3VyY2UoY29udGV4dCwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0aW9uU3R5bGUp
KQotICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0KTsKKyAgICAgICAgcmVs
ZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgcGF0aCk7CiAKICAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAppbmRleCA4
ZTgyZGRhLi40NjJmZWYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmgKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKIAogICAgIGJv
b2wgYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIFJlbmRlck9iamVj
dCosIFJlbmRlclN0eWxlKik7Ci0gICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFw
aGljc0NvbnRleHQqJik7CisgICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGlj
c0NvbnRleHQqJiwgY29uc3QgUGF0aCYpOwogCiAgICAgYm9vbCBwcmVwYXJlR3JhcGhpY3NDb250
ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBUZXh0UnVuJiwgUmVuZGVyU3R5
bGUqKTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhH
cmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1biYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZH
Rm9udC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAppbmRleCA4OThjMjU5Li4wMDVmZTA1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9T
VkdGb250LmNwcApAQCAtNTM0LDEyICs1MzQsOSBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdT
VkdGb250KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAg
ICAgICAgICAgICAgICAgICBQYXRoIGdseXBoUGF0aCA9IGlkZW50aWZpZXIucGF0aERhdGE7CiAg
ICAgICAgICAgICAgICAgICAgIGdseXBoUGF0aC50cmFuc2Zvcm0oZ2x5cGhQYXRoVHJhbnNmb3Jt
KTsKIAotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+YWRkUGF0aChnbHlwaFBhdGgpOwotCiAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgp
ID8gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCktPnN0eWxlKCkgOiAwOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShydW4u
cmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSwgc3R5bGUsIGNvbnRleHQsIHJlc291cmNlTW9kZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZShydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSwgY29udGV4dCwgcmVzb3Vy
Y2VNb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpLCBjb250ZXh0
LCByZXNvdXJjZU1vZGUsIGdseXBoUGF0aCk7CiAKICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hh
bmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYmE2YjNiZi4uMzcyNjc3NiAxMDA2NDQK
LS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMC0xMS0yMCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0OiBSZW1vdmUgImN1cnJlbnQgcGF0aCIgYW5kIGhhdmUgc3Ryb2tlUGF0aCwgZmlsbFBh
dGggYW5kIGNsaXBQYXRoIHRha2UgYSBQYXRoIGFyZ3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxNgorCisgICAgICAgICogVUlQcm9jZXNz
L0ZpbmRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yOjpkcmF3
KToKKwogMjAxMC0xMS0xOSAgWmFsYW4gQnVqdGFzICA8emJ1anRhc0BnbWFpbC5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBhL1dlYktpdDIvVUlQ
cm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwIGIvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRv
ci5jcHAKaW5kZXggMTU5ZTNmMC4uMWJhYjg2MSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9VSVByb2Nl
c3MvRmluZEluZGljYXRvci5jcHAKKysrIGIvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRv
ci5jcHAKQEAgLTE0OSw5ICsxNDksOCBAQCB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UgogICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwogICAgICAgICBGbG9hdFJlY3Qgb3V0ZXJQYXRoUmVj
dCA9IGluZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0
Qm9yZGVyLCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlcik7CiAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09m
ZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7
Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5hZGRQYXRoKHBhdGhXaXRoUm91bmRlZFJlY3Qob3V0
ZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRG
aWxsQ29sb3IobGlnaHRCb3JkZXJDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRoKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5m
aWxsUGF0aChwYXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykp
OwogICAgICAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwogCiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zYXZlKCk7Cg==
</data>
<flag name="review"
          id="65105"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74626</attachid>
            <date>2010-11-22 18:49:30 -0800</date>
            <delta_ts>2010-11-22 20:25:33 -0800</delta_ts>
            <desc>Proposed patch v4</desc>
            <filename>bug-48516-v4.diff</filename>
            <type>text/plain</type>
            <size>59888</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWJlMjU2Ni4uMjc5ZTgzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDcgQEAKKzIwMTAtMTEtMjIgIEFuZHJlYXMgS2xp
bmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDogUmVtb3ZlICJjdXJyZW50IHBhdGgiIGFu
ZCBoYXZlIHN0cm9rZVBhdGgsIGZpbGxQYXRoIGFuZCBjbGlwUGF0aCB0YWtlIGEgUGF0aCBhcmd1
bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
NTE2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIHJlZmFjdG9yaW5nIG9ubHkuCisK
KyAgICAgICAgZmlsbFBhdGgoKSAtPiBmaWxsUGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgc3Ry
b2tlUGF0aCgpIC0+IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpCisgICAgICAgIGNsaXBQYXRoKFdp
bmRSdWxlKSAtPiBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpCisKKyAgICAgICAgZHJh
d1BhdGgoKSB3YXMgb25seSB1c2VkIGJ5IENHLCBzbyBtYWRlIGl0IFBMQVRGT1JNKENHKSBzcGVj
aWZpYy4KKworICAgICAgICBUaGUgUXQsIENHIGFuZCBDYWlybyBpbXBsZW1lbnRhdGlvbnMgYXJl
IGJlc3QtZWZmb3J0LgorICAgICAgICBGb3IgdGhlIHJlc3QsIEkndmUgcHV0IGJlZ2luUGF0aC9h
ZGRQYXRoIGFuZCBGSVhNRXMgaW4gdGhlIHRocmVlIGFmZmVjdGVkIG1ldGhvZHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpmaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c3Ryb2tlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkKToKKyAgICAgICAgKiBtYXRobWwvUmVu
ZGVyTWF0aE1MUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290Ojpw
YWludCk6CisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ29udmV4UG9seWdvblRv
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4
dE9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZHJhd0JveFNp
ZGVGcm9tUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6
OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHN2
Zy9TVkdGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdG
b250KToKKwogMjAxMC0xMS0yMiAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAzMjQ2ZTBhLi5j
NjRiNzFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KQEAgLTM1OCw5ICszNTgsOCBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDRjbGlwRVJLTlNfNFBhdGhFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRj
bGlwRVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NHNhdmVF
dgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ1c2NhbGVFUktOU185RmxvYXRTaXplRQot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ3YWRkUGF0aEVSS05TXzRQYXRoRQogX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ3cmVzdG9yZUV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDhmaWxsUGF0aEV2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUGF0
aEVSS05TXzRQYXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktO
U185RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktO
U185RmxvYXRSZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKIF9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5T
XzEwQ29sb3JTcGFjZUUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAppbmRleCBiOWY4NmNlLi5lYjU1MmM2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC04MTMsOSArODEzLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwoKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYy0+YmVnaW5QYXRoKCk7
Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAgICAgYy0+ZmlsbFBhdGgoKTsKKyAg
ICAgICAgYy0+ZmlsbFBhdGgobV9wYXRoKTsKICAgICAgICAgZGlkRHJhdyhtX3BhdGguYm91bmRp
bmdSZWN0KCkpOwogICAgIH0KIApAQCAtODMzLDkgKzgzMSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzdHJva2UoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fcGF0
aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYy0+YmVnaW5QYXRoKCk7Ci0gICAgICAgIGMtPmFkZFBh
dGgobV9wYXRoKTsKLQogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAvLyBGYXN0IGFwcHJveGlt
YXRpb24gb2YgdGhlIHN0cm9rZSdzIGJvdW5kaW5nIHJlY3QuCiAgICAgICAgIC8vIFRoaXMgeWll
bGRzIGEgc2xpZ2h0bHkgb3ZlcnNpemVkIHJlY3QgYnV0IGlzIHZlcnkgZmFzdApAQCAtODQ2LDcg
Kzg0MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UoKQogICAgICAg
ICBDYW52YXNTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlQXBwbGllcih0aGlzKTsKICAgICAgICAg
RmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IG1fcGF0aC5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9r
ZUFwcGxpZXIpOwogI2VuZGlmCi0gICAgICAgIGMtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgYy0+
c3Ryb2tlUGF0aChtX3BhdGgpOwogICAgICAgICBkaWREcmF3KGJvdW5kaW5nUmVjdCk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGM0NzY5
OWYuLjcyYjBmN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CkBAIC0xNTM3LDIxICsxNTM3LDE4IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1YWQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvCiAgICAgLy8g
b2Ygb3V0bGluZSAoYmVjYXVzZSBpbmZsYXRpbmcgYSBxdWFkIGlzIGhhcmQpCiAgICAgewogICAg
ICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC5hZGRQYXRoKHF1YWRQYXRoKTsK
ICAgICAgICAgY29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKIAotICAgICAgICBjb250ZXh0LmFk
ZFBhdGgocXVhZFBhdGgpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhvdXRs
aW5lVGhpY2tuZXNzKTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihvdXRsaW5lQ29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgoKTsK
KyAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKIAogICAgICAgICBjb250ZXh0
LnJlc3RvcmUoKTsKICAgICB9CiAKICAgICAvLyBOb3cgZG8gdGhlIGZpbGwKLSAgICBjb250ZXh0
LmFkZFBhdGgocXVhZFBhdGgpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5maWxsUGF0aCgpOworICAgIGNvbnRl
eHQuZmlsbFBhdGgocXVhZFBhdGgpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFk
V2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQs
IGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcCBiL1dlYkNvcmUvbWF0
aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCmluZGV4IGJhNjBjOWYuLmYwYTdhYmIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCisrKyBiL1dlYkNvcmUvbWF0
aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCkBAIC0xNjcsOSArMTY3LDcgQEAgdm9pZCBSZW5kZXJN
YXRoTUxSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIC8v
IGRyYXcgdG8gZW5kCiAgICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7CiAgICAgCi0gICAgaW5m
by5jb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgocm9vdCk7
Ci0gICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgaW5mby5jb250ZXh0LT5zdHJv
a2VQYXRoKHJvb3QpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIApAQCAt
MTgxLDggKzE3OSw2IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBp
bmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBtYXNrLmFkZExpbmVUbyh0b3BMZWZ0KTsKICAgICBt
YXNrLmFkZExpbmVUbyhGbG9hdFBvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAy
ICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+
YmVnaW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKG1hc2spOwogICAgIGluZm8u
Y29udGV4dC0+Y2xpcChtYXNrKTsKICAgICAKICAgICAvLyBEcmF3IHRoZSB0aGljayBwYXJ0IG9m
IHRoZSByb290LgpAQCAtMTkzLDkgKzE4OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFp
bnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBsaW5lLm1vdmVUbyhib3R0
b21MZWZ0KTsKICAgICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0KTsKIAotICAgIGluZm8uY29udGV4
dC0+YmVnaW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKGxpbmUpOwotICAgIGlu
Zm8uY29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aChs
aW5lKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwIGIvV2ViQ29yZS9t
YXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKaW5kZXggODYyZDhhNC4uMTI4NWFjZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKKysr
IGIvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKQEAgLTEzMiwxMCAr
MTMyLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGlu
Zm8sIGludCB0eCwgaW50IHR5KQogICAgIHJvb3QuYWRkTGluZVRvKHRvcExlZnQpOwogICAgIC8v
IGRyYXcgdG8gZW5kCiAgICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7Ci0gICAgCi0gICAgaW5m
by5jb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgocm9vdCk7
Ci0gICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CisKKyAgICBpbmZvLmNvbnRleHQtPnN0
cm9rZVBhdGgocm9vdCk7CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgCkBA
IC0xNDcsOCArMTQ1LDYgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWlu
dEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIG1hc2suYWRkTGluZVRvKHRvcExlZnQp
OwogICAgIG1hc2suYWRkTGluZVRvKEZsb2F0UG9pbnQoMiAqIHRvcExlZnQueCgpIC0gbGVmdEVu
ZC54KCksIDIgKiB0b3BMZWZ0LnkoKSAtIGxlZnRFbmQueSgpKSk7CiAgICAgCi0gICAgaW5mby5j
b250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgobWFzayk7CiAg
ICAgaW5mby5jb250ZXh0LT5jbGlwKG1hc2spOwogICAgIAogICAgIC8vIERyYXcgdGhlIHRoaWNr
IHBhcnQgb2YgdGhlIHJvb3QuCkBAIC0xNTksOSArMTU1LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxT
cXVhcmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQogICAgIGxp
bmUubW92ZVRvKGJvdHRvbUxlZnQpOwogICAgIGxpbmUuYWRkTGluZVRvKHRvcExlZnQpOwogICAg
IAotICAgIGluZm8uY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQ
YXRoKGxpbmUpOwotICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgIGluZm8uY29u
dGV4dC0+c3Ryb2tlUGF0aChsaW5lKTsKICAgICAKICAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDZhZGM5MGIuLjY4ZjU0ZjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaApAQCAtMTI3LDcgKzEyNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEltYWdlQnVmZmVyOwog
ICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUGF0aDsKICAgICBjbGFzcyBQYXR0ZXJuOwogICAg
IGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CkBAIC0x
OTYsNiArMTk1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKENHKQogICAg
ICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogICAgICAgICB2b2lkIGFwcGx5RmlsbFBh
dHRlcm4oKTsKKyAgICAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAjZW5kaWYKIAog
ICAgICAgICB2b2lkIHNhdmUoKTsKQEAgLTIxMCw5ICsyMTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2
b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQq
LCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKIAotICAgICAgICB2b2lkIGRyYXdQYXRo
KCk7Ci0gICAgICAgIHZvaWQgZmlsbFBhdGgoKTsKLSAgICAgICAgdm9pZCBzdHJva2VQYXRoKCk7
CisgICAgICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOworICAgICAgICB2b2lkIHN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5IGJv
cmRlci1yYWRpdXMgaW4gQ1NTKSBqdXN0IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21lbnQu
CiAgICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwg
aW50IGFuZ2xlU3Bhbik7CkBAIC0yNTMsNyArMjUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIGFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmLCBpbnQg
dGhpY2tuZXNzKTsKICAgICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEludFJlY3QmKTsKICAgICAg
ICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUm
IHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21M
ZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCk7Ci0gICAgICAgIHZvaWQgY2xpcFBhdGgo
V2luZFJ1bGUpOworICAgICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7
CiAgICAgICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3Qg
RmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzID0gdHJ1ZSk7CiAgICAgICAgIHZvaWQgY2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmKTsKIApAQCAtMzAyLDgg
KzMwMSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpOwogCisjaWYgIVBMQVRGT1JNKFFUKSAmJiAh
UExBVEZPUk0oQ0FJUk8pICYmICFQTEFURk9STShDRykgJiYgIVBMQVRGT1JNKEhBSUtVKQogICAg
ICAgICB2b2lkIGJlZ2luUGF0aCgpOwogICAgICAgICB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYp
OworI2VuZGlmCiAKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKIApAQCAtMzkzLDcg
KzM5NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgICAg
ICBib29sIGluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdDsKLSAgICAgICAgUGxhdGZvcm1QYXRo
KiBjdXJyZW50UGF0aCgpOwogICAgICAgICB2b2lkIHB1c2hUcmFuc3BhcmVuY3lMYXllckludGVy
bmFsKGNvbnN0IFFSZWN0ICZyZWN0LCBxcmVhbCBvcGFjaXR5LCBRUGl4bWFwJiBhbHBoYU1hc2sp
OwogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogICAgICAg
ICBzdGF0aWMgUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZSB0b1F0Q29tcG9zaXRpb25Nb2RlKENv
bXBvc2l0ZU9wZXJhdG9yIG9wKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRQcml2YXRlLmgKaW5kZXggOTg1Y2FkOS4uNjk2OTMyZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKQEAg
LTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc5LDggKzc4LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwog
I2lmIFBMQVRGT1JNKENBSVJPKQogICAgICAgICBmbG9hdCBnbG9iYWxBbHBoYTsKLSNlbGlmIFBM
QVRGT1JNKFFUKQotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXRoVHJhbnNmb3JtOwog
I2VuZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCAxMDMyZGMyLi45YzJmZjgyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcApAQCAtNTMxLDQ0ICs1MzEsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQq
IHBvaW4KICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLQotICAg
IHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQo
KSk7CisgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5j
b250ZXh0KCkpOwogICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBjcik7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNyOwotICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRo
LmNvbnRleHQoKSk7CisgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3Jt
UGF0aCgpLT5jb250ZXh0KCkpOwogICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9j
b21tb24sIGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKLXsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y3I7Ci0KLSAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIG1fZGF0
YS0+bV9wZW5kaW5nUGF0aC5jb250ZXh0KCkpOwotCi0gICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShj
ciwgZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQg
OiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9j
b21tb24sIEZpbGxBbmRTdHJva2UpOwotCi0gICAgc2V0UGxhdGZvcm1GaWxsKHRoaXMsIGNyLCBt
X2NvbW1vbik7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2UodGhpcywgY3IsIG1fY29tbW9uKTsKLSAg
ICBjYWlyb19uZXdfcGF0aChjcik7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
QEAgLTYwNywxMiArNTg5LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKICAgICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBs
YXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwogICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIGNs
aXBSdWxlID09IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJP
X0ZJTExfUlVMRV9XSU5ESU5HKTsKICAgICBjYWlyb19jbGlwKGNyKTsKIH0KQEAgLTk5NCwyNSAr
OTc3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvciBvcCkKICAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9kYXRhLT5jciwgdG9D
YWlyb09wZXJhdG9yKG9wKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgo
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNhaXJvX25ld19wYXRoKG1fZGF0YS0+bV9wZW5kaW5nUGF0aC5jb250ZXh0KCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX21hdHJp
eF90IGN1cnJlbnRNYXRyaXg7Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChtX2RhdGEtPmNyLCAmY3Vy
cmVudE1hdHJpeCk7Ci0gICAgY2Fpcm9fc2V0X21hdHJpeChtX2RhdGEtPm1fcGVuZGluZ1BhdGgu
Y29udGV4dCgpLCAmY3VycmVudE1hdHJpeCk7Ci0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJv
Q29udGV4dChtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpLCBwYXRoKTsKLX0KLQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5o
CmluZGV4IDUyN2NiNzIuLjQ5NGI0MGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNhaXJvLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogCi0jaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5o
IgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtOTcsNyArOTYsNiBA
QCBwdWJsaWM6CiAKICAgICBjYWlyb190KiBjcjsKICAgICBWZWN0b3I8ZmxvYXQ+IGxheWVyczsK
LSAgICBDYWlyb1BhdGggbV9wZW5kaW5nUGF0aDsKIAogICAgIENvbnRleHRTaGFkb3cgc2hhZG93
OwogICAgIFZlY3RvcjxDb250ZXh0U2hhZG93PiBzaGFkb3dTdGFjazsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggOGQ3MmI4
NS4uYjM0ODVhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKQEAgLTI5OSwyMSArMjk5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQyKQogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJj
bGVzIHVzZWQgaW4gbGlzdHMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBGSVhNRTogQ0cgYWRkZWQgQ0dDb250ZXh0QWRk
RWxsaXBzZWluUmVjdCBpbiBUaWdlciwgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gcXVpdGUgZWFz
aWx5IGRyYXcgYW4gZWxsaXBzZS4KLSAgICAvLyBUaGlzIGNvZGUgY2FuIG9ubHkgaGFuZGxlIGNp
cmNsZXMsIG5vdCBlbGxpcHNlcy4gQnV0IGtodG1sIG9ubHkKLSAgICAvLyB1c2VzIGl0IGZvciBj
aXJjbGVzLgotICAgIEFTU0VSVChyZWN0LndpZHRoKCkgPT0gcmVjdC5oZWlnaHQoKSk7Ci0KICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKLSAgICBmbG9hdCByID0gKGZsb2F0KXJlY3Qud2lkdGgoKSAvIDI7Ci0gICAg
Q0dDb250ZXh0QWRkQXJjKGNvbnRleHQsIHJlY3QueCgpICsgciwgcmVjdC55KCkgKyByLCByLCAw
LjBmLCAyLjBmICogcGlGbG9hdCwgMCk7Ci0gICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQp
OwotCi0gICAgZHJhd1BhdGgoKTsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNl
KHJlY3QpOworICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCiAKQEAgLTQwNSwxMyArMzk2LDE0IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50
IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChDR0NvbnRl
eHRSZWYgY29udGV4dCwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRz
KQorc3RhdGljIHZvaWQgYWRkQ29udmV4UG9seWdvblRvUGF0aChQYXRoJiBwYXRoLCBzaXplX3Qg
bnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCiB7Ci0gICAgQ0dDb250ZXh0QmVn
aW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4dE1vdmVUb1BvaW50KGNvbnRleHQsIHBvaW50
c1swXS54KCksIHBvaW50c1swXS55KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnVt
UG9pbnRzOyBpKyspCi0gICAgICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIHBv
aW50c1tpXS54KCksIHBvaW50c1tpXS55KCkpOwotICAgIENHQ29udGV4dENsb3NlUGF0aChjb250
ZXh0KTsKKyAgICBBU1NFUlQobnVtUG9pbnRzID4gMCk7CisKKyAgICBwYXRoLm1vdmVUbyhwb2lu
dHNbMF0pOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyArK2kpCisgICAg
ICAgIHBhdGguYWRkTGluZVRvKHBvaW50c1tpXSk7CisgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9p
bnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCkBAIC00Mjcs
OCArNDE5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVf
dCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMKICAgICBpZiAoYW50aWFsaWFzZWQg
IT0gc2hvdWxkQW50aWFsaWFzKCkpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlh
cyhjb250ZXh0LCBhbnRpYWxpYXNlZCk7CiAKLSAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0
KGNvbnRleHQsIG5wb2ludHMsIHBvaW50cyk7Ci0gICAgZHJhd1BhdGgoKTsKKyAgICBQYXRoIHBh
dGg7CisgICAgYWRkQ29udmV4UG9seWdvblRvUGF0aChwYXRoLCBucG9pbnRzLCBwb2ludHMpOwor
ICAgIGRyYXdQYXRoKHBhdGgpOwogCiAgICAgaWYgKGFudGlhbGlhc2VkICE9IHNob3VsZEFudGlh
bGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hv
dWxkQW50aWFsaWFzKCkpOwpAQCAtNDQ2LDkgKzQzOSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCog
cG9pbgogCiAgICAgaWYgKGFudGlhbGlhcyAhPSBzaG91bGRBbnRpYWxpYXMoKSkKICAgICAgICAg
Q0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIGFudGlhbGlhcyk7Ci0gICAgCi0g
ICAgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChjb250ZXh0LCBudW1Qb2ludHMsIHBvaW50cyk7
Ci0gICAgY2xpcFBhdGgoUlVMRV9OT05aRVJPKTsKKworICAgIFBhdGggcGF0aDsKKyAgICBhZGRD
b252ZXhQb2x5Z29uVG9QYXRoKHBhdGgsIG51bVBvaW50cywgcG9pbnRzKQorICAgIGNsaXBQYXRo
KHBhdGgsIFJVTEVfTk9OWkVSTyk7CiAKICAgICBpZiAoYW50aWFsaWFzICE9IHNob3VsZEFudGlh
bGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hv
dWxkQW50aWFsaWFzKCkpOwpAQCAtNTExLDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBj
YWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENH
UGF0CiAgICAgcmV0dXJuIHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTIxLDExICs1MTUsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKCkKIAogICAgIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBm
aWxsICYgc3Ryb2tlIGEgcGF0aCB1c2luZyBncmFkaWVudHMKLSAgICAgICAgZmlsbFBhdGgoKTsK
LSAgICAgICAgc3Ryb2tlUGF0aCgpOworICAgICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91
dCB0aGlzLgorICAgICAgICBmaWxsUGF0aChwYXRoKTsKKyAgICAgICAgc3Ryb2tlUGF0aChwYXRo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkp
OworCiAgICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJu
KCk7CiAgICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCkBAIC01NDQsMTMgKzU0MiwxNiBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIFdpbmRSdWxlIGZpbGxSdWxlKQogICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Cisg
ICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwogICAg
IGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNh
dmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9E
RCkKQEAgLTU2OCwxMyArNTY5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgp
CiAgICAgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoY29udGV4dCwgZmlsbFJ1bGUoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworCiAgICAgaWYgKG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0
aChjb250ZXh0KTsKQEAgLTY0Myw4ICs2NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgog
CiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgdG9wTGVmdCwg
dG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICBhZGRQYXRoKHBhdGgpOwot
ICAgIGZpbGxQYXRoKCk7CisgICAgZmlsbFBhdGgocGF0aCk7CiAKICAgICBpZiAob2xkRmlsbENv
bG9yICE9IGNvbG9yIHx8IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKICAgICAgICAgc2V0
Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yLCBvbGRDb2xvclNwYWNlKTsKQEAgLTY2
OSwxOSArNjcyLDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmICghQ0dDb250ZXh0SXNQ
YXRoRW1wdHkoY29udGV4dCkpIHsKLSAgICAgICAgaWYgKGNsaXBSdWxlID09IFJVTEVfRVZFTk9E
RCkKLSAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICB9CisgICAgQ0dDb250ZXh0
QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRm
b3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKworICAgIGlmIChjbGlwUnVsZSA9
PSBSVUxFX0VWRU5PREQpCisgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKKyAgICBl
bHNlCisgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQg
dGhpY2tuZXNzKQpAQCAtODYzLDE2ICs4NzAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUpvaW4oTGluZUpvaW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblBhdGgoKQotewotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQo
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Ci17Ci0gICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKaW5kZXgg
MDUwMTJlOC4uN2RkYTI0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBz
dGFydEFuZ2xlLCBpbnQgYW5nbGVTcAogICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VBcmMocmVj
dCwgc3RhcnRBbmdsZSwgYW5nbGVTcGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aChjb25zdCBQYXRoJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAt
MTkxLDE3ICsxOTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIC8vIEZpbGxSZWN0
IGFuZCBGaWxsQXJjIGNhbGxzIGFyZSBuZWVkZWQuCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmJlZ2luUGF0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhp
Y3NDb250ZXh0T3BlblZHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dy
YXBoaWNzQ29udGV4dE9wZW5WRy5jcHAKaW5kZXggMGQxNmQ0ZC4uMDRhNWUyNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZH
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRl
eHRPcGVuVkcuY3BwCkBAIC0xMzksMjggKzEzOSwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9p
bgogICAgIFVOVVNFRF9QQVJBTShzaG91bGRBbnRpYWxpYXMpOyAvLyBGSVhNRQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAg
ICBiZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOworCiAgICAgbV9kYXRhLT5kcmF3UGF0
aChWR19GSUxMX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5kcmF3UGF0aChWR19TVFJPS0VfUEFUSCwgbV9j
b21tb24tPnN0YXRlLmZpbGxSdWxlKTsKLX0KKyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91
dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aCk7CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5kcmF3UGF0aChWR19GSUxMX1BBVEggfCBW
R19TVFJPS0VfUEFUSCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmRy
YXdQYXRoKFZHX1NUUk9LRV9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAt
MjIxLDExICsyMjEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIG1fZGF0YS0+aW50ZXJzZWN0Q2xpcFJlY3QocmVjdCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAg
IGFkZFBhdGgocGF0aCk7CisKICAgICBtX2RhdGEtPmNsaXBQYXRoKCoobV9kYXRhLT5jdXJyZW50
UGF0aCgpKSwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgY2xpcFJ1bGUpOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CmluZGV4IDEwYTdmODkuLjUyMDIzYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC0xOTMsOSArMTkzLDYgQEAgcHVibGlj
OgogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsK
IAotICAgIC8vIE9ubHkgdXNlZCBieSBTVkcgZm9yIG5vdy4KLSAgICBRUGFpbnRlclBhdGggY3Vy
cmVudFBhdGg7Ci0KICAgICBDb250ZXh0U2hhZG93IHNoYWRvdzsKICAgICBRU3RhY2s8Q29udGV4
dFNoYWRvdz4gc2hhZG93U3RhY2s7CiAKQEAgLTIwNCwxMyArMjAxLDYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc2hhZG93Lm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdzsKICAg
ICB9CiAKLSAgICBpbmxpbmUgdm9pZCBjbGVhckN1cnJlbnRQYXRoKCkKLSAgICB7Ci0gICAgICAg
IGlmICghY3VycmVudFBhdGguZWxlbWVudENvdW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGN1cnJlbnRQYXRoID0gUVBhaW50ZXJQYXRoKCk7Ci0gICAgfQotCiAgICAgUVJlY3RG
IGNsaXBCb3VuZGluZ1JlY3QoKSBjb25zdAogICAgIHsKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZF
UlNJT05fQ0hFQ0soNCwgOCwgMCkKQEAgLTMxMSwxMSArMzAxLDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKIAogICAgIG1fZGF0YS0+cCgpLT5yZXN0b3Jl
KCk7CiAKLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpICYmIG1fY29tbW9u
LT5zdGF0ZS5wYXRoVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zv
cm0gbWF0cml4ID0gbV9jb21tb24tPnN0YXRlLnBhdGhUcmFuc2Zvcm07Ci0gICAgICAgIG1fZGF0
YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4OwotICAgIH0KLQog
ICAgIGlmIChtX2RhdGEtPnNoYWRvd1N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgbV9kYXRhLT5z
aGFkb3cgPSBDb250ZXh0U2hhZG93KCk7CiAgICAgZWxzZQpAQCAtNTAzLDE0ICs0ODgsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMs
IGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAgICAgICAgcC0+c2V0UmVuZGVySGludChRUGFpbnRl
cjo6QW50aWFsaWFzaW5nLCBwYWludGVyV2FzQW50aWFsaWFzZWQpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKLSAgICBRUGFpbnRlclBh
dGgmIHBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoOyAvLyBBdm9pZCBkZXRhY2hpbmcgdGhlIFFQ
YWludGVyUGF0aAotICAgIHBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkp
KTsKKyAgICBRUGFpbnRlclBhdGggcGxhdGZvcm1QYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsK
KyAgICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsK
IAogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRvdygpKSB7CiAgICAgICAgIENvbnRleHRTaGFkb3cq
IHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKQEAgLTUxOCwxMyArNTAzLDEzIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRl
LmZpbGxQYXR0ZXJuICYmICFtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7
CiAgICAgICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOwotICAg
ICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgUUNvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3Ip
KTsKKyAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgUUNvbG9yKG1fZGF0YS0+
c2hhZG93Lm1fY29sb3IpKTsKICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtbV9kYXRhLT5zaGFk
b3cub2Zmc2V0KCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNo
YWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgcGF0aC5jb250cm9sUG9p
bnRSZWN0KCkpOworICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIocCwgcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKSk7CiAg
ICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJj
ZSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGF0aCwgUUNvbG9y
KG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVy
LT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFDb2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7
CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihwKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtNTMyLDI2ICs1MTcsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKCkKICAgICB9CiAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikg
ewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwLT5maWxsUGF0aChw
YXRoLCBRQnJ1c2gobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oYWZmaW5lKSkpOworICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVz
aChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZp
bmUpKSk7CiAgICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CiAg
ICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZv
cm1HcmFkaWVudCgpKTsKICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIHAtPmZp
bGxQYXRoKHBhdGgsIGJydXNoKTsKKyAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBi
cnVzaCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIHAtPmJydXNoKCkp
OwotCi0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7CisgICAgICAgIHAtPmZpbGxQYXRo
KHBsYXRmb3JtUGF0aCwgcC0+YnJ1c2goKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAgICBRUGVuIHBlbihwLT5wZW4oKSk7
Ci0gICAgUVBhaW50ZXJQYXRoJiBwYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aDsgLy8gQXZvaWQg
ZGV0YWNoaW5nIHRoZSBRUGFpbnRlclBhdGgKLSAgICBwYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxs
UnVsZShmaWxsUnVsZSgpKSk7CisgICAgUVBhaW50ZXJQYXRoIHBsYXRmb3JtUGF0aCA9IHBhdGgu
cGxhdGZvcm1QYXRoKCk7CisgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVs
ZShmaWxsUnVsZSgpKSk7CiAKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAgICAg
ICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CkBAIC01NjIsMTUgKzU0
NSwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgICAgICBR
UGVuIHNoYWRvd1BlbihwZW4pOwogICAgICAgICAgICAgc2hhZG93UGVuLnNldENvbG9yKG1fZGF0
YS0+c2hhZG93Lm1fY29sb3IpOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hh
ZG93Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgc2hhZG93UGVu
KTsKKyAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dQZW4pOwog
ICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5j
b250cm9sUG9pbnRSZWN0KCk7CisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0g
cGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKTsKICAgICAgICAgICAgIGJvdW5kaW5nUmVj
dC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkgKyBwZW4ud2lkdGhGKCkpOwogICAgICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgYm91
bmRpbmdSZWN0KTsKICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4obV9kYXRh
LT5zaGFkb3cubV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOworICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwogICAgICAgICAgICAgICAgIHNo
YWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU4
MCwxNiArNTYzLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKICAgICAgICAgcGVuLnNldEJydXNoKFFCcnVzaCht
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmlu
ZSkpKTsKICAgICAgICAgcC0+c2V0UGVuKHBlbik7Ci0gICAgICAgIHAtPnN0cm9rZVBhdGgocGF0
aCwgcGVuKTsKKyAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7CiAgICAg
fSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAgICAgICAgUUJy
dXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGll
bnQoKSk7CiAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBlbi5zZXRCcnVz
aChicnVzaCk7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwotICAgICAgICBwLT5zdHJva2VQYXRo
KHBhdGgsIHBlbik7CisgICAgICAgIHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwog
ICAgIH0gZWxzZQotICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHBlbik7Ci0gICAgbV9kYXRh
LT5jbGVhckN1cnJlbnRQYXRoKCk7CisgICAgICAgIHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRo
LCBwZW4pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlcGVhdFBhdHRlcm4oUVBhaW50
ZXIqIHAsIFFQaXhtYXAqIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IGJvb2wg
cmVwZWF0WCwgY29uc3QgYm9vbCByZXBlYXRZKQpAQCAtNzY4LDMwICs3NTAsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBJbnRTaXplJiB0b3BMZWYKICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBR
Q29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCi17
Ci0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKCFtX2RhdGEtPmN1cnJl
bnRQYXRoLmVsZW1lbnRDb3VudCgpKSB7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBw
YXRoLnBsYXRmb3JtUGF0aCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fZGF0YS0+
Y3VycmVudFBhdGguYWRkUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLX0KLQogYm9vbCBHcmFw
aGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEtPmxheWVyQ291bnQ7CiB9CiAKLVBsYXRmb3JtUGF0aCogR3JhcGhpY3NDb250ZXh0Ojpj
dXJyZW50UGF0aCgpCi17Ci0gICAgcmV0dXJuICZtX2RhdGEtPmN1cnJlbnRQYXRoOwotfQotCiBD
b250ZXh0U2hhZG93KiBHcmFwaGljc0NvbnRleHQ6OmNvbnRleHRTaGFkb3coKQogewogICAgIHJl
dHVybiAmbV9kYXRhLT5zaGFkb3c7CkBAIC04MDUsMTUgKzc2OCwxNSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9kYXRhLT5wKCktPnNl
dENsaXBSZWN0KHJlY3QsIFF0OjpJbnRlcnNlY3RDbGlwKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFQYWludGVyKiBw
ID0gbV9kYXRhLT5wKCk7Ci0gICAgUVBhaW50ZXJQYXRoIG5ld1BhdGggPSBtX2RhdGEtPmN1cnJl
bnRQYXRoOwotICAgIG5ld1BhdGguc2V0RmlsbFJ1bGUoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0RE
ID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKLSAgICBwLT5zZXRDbGlwUGF0
aChuZXdQYXRoLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CisgICAgUVBhaW50ZXJQYXRoIHBsYXRmb3Jt
UGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxSdWxl
KGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5n
RmlsbCk7CisgICAgcC0+c2V0Q2xpcFBhdGgocGxhdGZvcm1QYXRoLCBRdDo6SW50ZXJzZWN0Q2xp
cCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
IHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMTA0
MiwxMiArMTAwNSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFFQYWludGVyUGF0aCBwYXRoOworICAgIFBhdGggcGF0
aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAgICAgc2V0U3Ryb2tlVGhpY2tuZXNzKHdpZHRo
KTsKLSAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gcGF0aDsKLQotICAgIHN0cm9rZVBhdGgoKTsK
KyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUNhcChMaW5lQ2FwIGxjKQpAQCAtMTE2NywxMiArMTEyOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9kYXRhLT5wKCktPnRyYW5zbGF0ZSh4LCB5KTsKLQotICAgIGlmICghbV9kYXRhLT5jdXJyZW50
UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgICAgIG1f
ZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4LnRyYW5zbGF0
ZSgteCwgLXkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybS50cmFuc2xh
dGUoeCwgeSk7Ci0gICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0
IHJhZGlhbnMpCkBAIC0xMTgxLDEyICsxMTM2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJv
dGF0ZShmbG9hdCByYWRpYW5zKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAoKS0+
cm90YXRlKDE4MCAvIE1fUEkqcmFkaWFucyk7Ci0KLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBh
dGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zvcm0gbWF0cml4OwotICAgICAgICBtX2Rh
dGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJpeC5yb3RhdGUoLTE4
MCAvIE1fUEkqcmFkaWFucyk7Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3Jt
LnJvdGF0ZShyYWRpYW5zKTsKLSAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHMpCkBAIC0xMTk1LDEyICsxMTQ0LDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgcykKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9kYXRhLT5wKCktPnNjYWxlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAo
IW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zvcm0gbWF0
cml4OwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAq
IG1hdHJpeC5zY2FsZSgxIC8gcy53aWR0aCgpLCAxIC8gcy5oZWlnaHQoKSk7Ci0gICAgICAgIG1f
Y29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzLndpZHRoKCksIHMu
aGVpZ2h0KCkpOwotICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29u
c3QgSW50UmVjdCYgcmVjdCkKQEAgLTEyNTcsMTUgKzEyMDAsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3Jt
LCB0cnVlKTsKLQotICAgIC8vIFRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY29udGV4dCBzaG91bGRu
J3QgdHJhbnNmb3JtIHRoZSBjdXJyZW50UGF0aC4KLSAgICAvLyBXZSBoYXZlIHRvIHVuZG8gZXZl
cnkgY2hhbmdlIG1hZGUgdG8gdGhlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudFBhdGgKLSAgICAv
LyB0byBhdm9pZCB3cm9uZyBkcmF3aW5ncy4KLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGgu
aXNFbXB0eSgpICYmIHRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgewotICAgICAgICBRVHJhbnNm
b3JtIG1hdHJpeCA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVu
dFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4OwotICAgICAgICBtX2NvbW1vbi0+
c3RhdGUucGF0aFRyYW5zZm9ybS5tdWx0aXBseSh0cmFuc2Zvcm0udG9UcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpKTsKLSAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0
KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0JikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAppbmRleCA3YzBiY2QxLi42
ZjZkY2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC00MjAsMTEgKzQyMCwxNSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+Y2xpcFBhdGgocGF0aCwgU2tSZWdpb246OmtEaWZmZXJlbmNlX09wKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb0NsaXAsIFdpbmRSdWxl
IGNsaXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRo
KCk7CisgICAgYWRkUGF0aChwYXRoVG9DbGlwKTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZv
cm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFp
c1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcyMywx
MSArNzI3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UmVjdChyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoVG9GaWxsKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMu
CisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoVG9GaWxsKTsKKwogICAgIFNrUGF0
aCBwYXRoID0gcGxhdGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVz
KCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICByZXR1
cm47CkBAIC0xMTc3LDExICsxMTg1LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VB
cmMoY29uc3QgSW50UmVjdCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb1N0cm9rZSkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQmUgc21hcnRl
ciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aFRvU3Ryb2tl
KTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5M
b2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0
aCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKaW5kZXggMDgwMjgyNi4uNGZhYTI5
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0Nv
bnRleHRXaW5DRS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5DRS5jcHAKQEAgLTEzMjUsOCArMTMyNSwxMiBAQCBDb2xvciBncmFkaWVu
dEF2ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVudCogZ3JhZGllbnQpCiAgICAgICAgICwgKHN0b3Au
YWxwaGEgKyBsYXN0U3RvcC5hbHBoYSkgKiAwLjVmKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogeworICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVn
aW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoKTsKKwogICAgIENvbG9yIGMgPSBtX2NvbW1vbi0+
c3RhdGUuZmlsbEdyYWRpZW50CiAgICAgICAgID8gZ3JhZGllbnRBdmVyYWdlQ29sb3IobV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKICAgICAgICAgOiBmaWxsQ29sb3IoKTsKQEAg
LTEzNzYsNiArMTM4MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAg
ICAgaWYgKCFtX2RhdGEtPm1fZGMpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBC
ZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRo
KTsKKwogICAgIE93blB0cjxIUEVOPiBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ry
b2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwogCiAgICAgaWYgKG1fZGF0YS0+bV9vcGFj
aXR5IDwgMS4wZiB8fCBtX2RhdGEtPmhhc0FscGhhKCkpIHsKQEAgLTE5MDAsNyArMTkwOCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFBhdGgoV2luZFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0
aCYsIFdpbmRSdWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCmluZGV4IDUwMDdm
ZmUuLmJhOTYzNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3Jh
cGhpY3NDb250ZXh0V3guY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3Jh
cGhpY3NDb250ZXh0V3guY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQpAQCAtNTMzLDMwICs1MzMsMzIgQEAgSW50ZXJwb2xhdGlvblF1YWxpdHkgR3Jh
cGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKICAgICByZXR1
cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
IHsKICNpZiBVU0UoV1hHQykKKyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgor
ICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aCk7CisKICAgICB3eEdyYXBoaWNzQ29u
dGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOwogICAgIGlm
IChnYykKICAgICAgICAgZ2MtPkZpbGxQYXRoKG1fZGF0YS0+Y3VycmVudFBhdGgpOwogI2VuZGlm
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgVVNFKFdYR0MpCisg
ICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAg
ICBhZGRQYXRoKHBhdGgpOworCiAgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5j
b250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKICAgICBpZiAoZ2MpCiAgICAgICAgIGdjLT5T
dHJva2VQYXRoKG1fZGF0YS0+Y3VycmVudFBhdGgpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aCgpCi17Ci0gICAgZmlsbFBhdGgoKTsKLSAgICBzdHJva2VQYXRo
KCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCAxNDNjNzJjLi5iZDE5MTY1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMDY0LDcgKzEwNjQs
NiBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91
dFJvdW5kZWRSZWN0KGlubmVyQm9yZGVyUmVjdCwgaW5uZXJUb3BMZWZ0LCBpbm5lclRvcFJpZ2h0
LCBpbm5lckJvdHRvbUxlZnQsIGlubmVyQm90dG9tUmlnaHQpOwogICAgICAgICAgICAgcm91bmRl
ZFBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUGF0
aChyb3VuZGVkUGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4MDUsMTMgKzE4MDQsMTAg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludAogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgcGF0aC5hZGRSZWN0KGhvbGVSZWN0KTsKIAotICAgICAgICAgICAgY29udGV4dC0+YmVn
aW5QYXRoKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOwotCiAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShSVUxFX0VWRU5PREQpOwogICAgICAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0Nv
bG9yLCBzLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwogCiAgICAgICAgICAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcAppbmRleCAxNjYxM2E1Li5jMDk0MzY2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0xNjYsMTEgKzE2Niw5IEBAIHZvaWQgUmVu
ZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5KQogICAgIAogICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICBjb250ZXh0LT5j
bGlwKGNvbnRlbnRSZWN0KTsKLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0
LT5hZGRQYXRoKHBhdGgpOyAgCiAgICAgY29udGV4dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2lu
SW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0UHJlc3NlZFJvdW5kZWRSZWN0T3Bh
Y2l0eSA6IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0T3BhY2l0eSk7CiAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2Vt
ZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKCkgOiBDb2xvcjo6d2hpdGUsIHN0eWxlKCkt
PmNvbG9yU3BhY2UoKSk7Ci0gICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICBjb250ZXh0LT5m
aWxsUGF0aChwYXRoKTsKIAogICAgIGZsb2F0IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRl
eHRSZWN0LmxvY2F0aW9uKCkueCgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndpZHRo
KCkgLSB0ZXh0V2lkdGgpIC8gMik7CiAgICAgZmxvYXQgbGFiZWxZID0gcm91bmRmKHJlcGxhY2Vt
ZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCku
aGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAvIDIgKyBmb250LmFzY2VudCgpKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGUxM2IxZjkuLmU5OTY3ZGYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcApAQCAtOTU1LDggKzk1NSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpk
cmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBJbnRS
ZWN0CiAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChwYXRXaWR0aCk7CiAgICAgICAgIGxpbmVEYXNo
LmFwcGVuZCh3aGl0ZVNwYWNlV2lkdGgpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldExp
bmVEYXNoKGxpbmVEYXNoLCBwYXRXaWR0aCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRk
UGF0aChib3JkZXJQYXRoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VQYXRoKCk7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIERPVUJMRTogewpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlLmgKaW5kZXggMDIzMGU5OC4uYWU3ZTM4YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZS5oCkBAIC00OCw2ICs0OCw3IEBAIGVudW0gUmVuZGVyU1ZHUmVzb3Vy
Y2VNb2RlIHsKIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OworY2xhc3MgUGF0aDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0
eWxlOwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOwpAQCAtNjEsNyArNjIsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJP
YmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0LCBjb25z
dCBQYXRoJikgeyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSBy
ZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCBlN2I5ZmJiLi4yNWVkMWMzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE1MSw5ICsxNTEs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgLy8gVGhlIFNWRyBzcGVjaWZpY2F0aW9u
IHdhbnRzIHVzIHRvIGNsaXAgZXZlcnl0aGluZywgaWYgY2xpcC1wYXRoIGRvZXNuJ3QgaGF2ZSBh
IGNoaWxkLgogICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIGNsaXBQYXRoLmFk
ZFJlY3QoRmxvYXRSZWN0KCkpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRl
eHQtPmFkZFBhdGgoY2xpcFBhdGgpOwotICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBSdWxlKTsK
KyAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlwUGF0aCwgY2xpcFJ1bGUpOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUdyYWRpZW50LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCmluZGV4IGE3NTcxNDcuLjA4NDY2YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwg
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQor
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoJiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsK
ICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNjAs
OSArMjYwLDkgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3MKICNlbmRpZgogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAg
ICBjb250ZXh0LT5maWxsUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0
aCk7CiAgICAgICAgIGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQot
ICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+
c3Ryb2tlUGF0aChwYXRoKTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggYmMwYjg2
NC4uODhhNTYyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VHcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24g
PSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoJik7CiAgICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVy
biBGbG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCBkMmU0NTYzLi4zMWU2YTA2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTE4Miwx
NiArMTgyLDE2IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291
cmNlTW9kZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQp
OwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAogICAg
IGlmICghKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKICAgICAgICAgaWYgKHJl
c291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQ
YXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKTsKICAgICAgICAgZWxz
ZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBjb250
ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgp
OwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKaW5kZXggYmE0YWVjNC4uMmZjMTUyMiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCYpOwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291
cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAog
ICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcAppbmRleCAwYzA5NjUyLi4xMjIwYWFiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAg
LTc1LDI4ICs3NSwxNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyU3R5bAogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3Vy
Y2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RB
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVu
c2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBBU1NF
UlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1v
ZGUpOwogCiAgICAgaWYgKCEocmVzb3VyY2VNb2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAg
ICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29u
dGV4dC0+ZmlsbFBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwog
ICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN0cm9r
ZVBhdGgocGF0aCk7CiAgICAgfQotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICAvLyBGSVhNRTog
TW92ZSB0aGlzIGludG8gdGhlIEdyYXBoaWNzQ29udGV4dAotICAgIC8vIFdlYktpdCBpbXBsaWNp
dGx5IGV4cGVjdHMgdXMgdG8gcmVzZXQgdGhlIHBhdGguCi0gICAgLy8gRm9yIGV4YW1wbGUgaW4g
ZmlsbEFuZFN0cm9rZVBhdGgoKSBvZiBSZW5kZXJTVkdQYXRoLmNwcCB0aGUgcGF0aCBpcwotICAg
IC8vIGFkZGVkIGJhY2sgdG8gdGhlIGNvbnRleHQgYWZ0ZXIgZmlsbGluZy4gVGhpcyBpcyBiZWNh
dXNlIGludGVybmFsbHkgaXQKLSAgICAvLyBjYWxscyBDR0NvbnRleHRGaWxsUGF0aCgpIHdoaWNo
IGNsb3NlcyB0aGUgcGF0aC4KLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbFNoYWRlcigwKTsKLSAgICBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hhZGVyKDApOwotI2VuZGlmCiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggNDQx
MDlkYi4uZGNhNTRiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VTb2xpZENvbG9yLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCA9IHRydWUpIHsgfQog
CiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CisgICAgdmlydHVhbCB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgmKTsKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVj
dCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUo
KSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwCmluZGV4IDQ4MzMwM2YuLmM5MWRiMzYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTE0OCwxOSArMTQ4LDE3IEBAIHZvaWQgUmVuZGVy
U1ZHUGF0aDo6bGF5b3V0KCkKIAogdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0
aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7
CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKIAogICAgIENvbG9yIGZh
bGxiYWNrQ29sb3I7CiAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNv
dXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpmaWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHls
ZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aChtX3BhdGgpOwog
ICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5
bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICBmaWxsUGFpbnRpbmdS
ZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2Rl
KTsKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0
aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIG1fcGF0aCk7CiAgICAgICAgIGVsc2UgaWYg
KGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVk
U29saWRQYWludGluZ1Jlc291cmNlKCk7CiAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5z
ZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKICAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNl
LT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQot
ICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMs
IGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSk7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCBt
X3BhdGgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjksMzAgKzE2NywzMSBAQCB2b2lkIFJl
bmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
ICAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKIAorICAg
IFBhdGggcGF0aDsKKworICAgIGJvb2wgbm9uU2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHls
ZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05fU0NBTElOR19TVFJPS0U7CiAgICAgYm9vbCBy
ZXN0b3JlQ29udGV4dCA9IGZhbHNlOwotICAgIGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+dmVjdG9y
RWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFKSB7CisgICAgaWYgKG5vblNjYWxpbmdT
dHJva2UpIHsKICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CiAg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVu
dC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CiAgICAg
ICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBQYXRoIHRyYW5zZm9ybWVkUGF0aCA9IG1fcGF0aDsK
LSAgICAgICAgdHJhbnNmb3JtZWRQYXRoLnRyYW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNm
b3JtKTsKKyAgICAgICAgcGF0aCA9IG1fcGF0aDsKKyAgICAgICAgcGF0aC50cmFuc2Zvcm0obm9u
U2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7CiAKICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwogICAg
ICAgICBjb250ZXh0LT5jb25jYXRDVE0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNl
KCkpOwotICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHRyYW5zZm9ybWVkUGF0aCk7CiAgICAgICAg
IHJlc3RvcmVDb250ZXh0ID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udGV4dC0+YWRk
UGF0aChtX3BhdGgpOworICAgIH0KIAogICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5h
cHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSkpCi0g
ICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNv
bnRleHQsIEFwcGx5VG9TdHJva2VNb2RlKTsKKyAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIG5v
blNjYWxpbmdTdHJva2UgPyBwYXRoIDogbV9wYXRoKTsKICAgICBlbHNlIGlmIChmYWxsYmFja0Nv
bG9yLmlzVmFsaWQoKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZh
bGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jl
c291cmNlKCk7CiAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29s
b3IpOwogICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpKQotICAgICAgICAgICAgZmFsbGJhY2tS
ZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1v
ZGUpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhp
cywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIG5vblNjYWxpbmdTdHJva2UgPyBwYXRoIDog
bV9wYXRoKTsKICAgICB9CiAKICAgICBpZiAocmVzdG9yZUNvbnRleHQpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggZDFmNjYwYS4uZjdmYzUzMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtMzE4LDE0ICsz
MTgsMTQgQEAgYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjphY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShH
cmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBSZW5kZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0KQordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdS
ZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBjb25zdCBQYXRoJiBwYXRoKQogewog
ICAgIEFTU0VSVChtX3BhaW50aW5nUmVzb3VyY2UpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJl
bnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChwYXJlbnRSZW5k
ZXJlcik7CiAKLSAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVu
dFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlKTsKKyAgICBtX3BhaW50
aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBt
X3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRoKTsKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSAw
OwogfQogCkBAIC0zNDQsNyArMzQ0LDcgQEAgYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpwcmVwYXJl
R3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComIGMKIAogdm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRp
bmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgVGV4dFJ1biYgdGV4dFJ1bikKIHsKLSAgICBy
ZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0KTsKKyAgICByZWxlYXNlUGFpbnRpbmdSZXNv
dXJjZShjb250ZXh0LCBQYXRoKCkpOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICB0ZXh0
UnVuLnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoMCk7CkBAIC01MDAsMTEgKzUwMCw5IEBAIHZv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgRVRleHRECiAgICAgcGF0aC5hZGRSZWN0KEZsb2F0UmVjdChmcmFnbWVu
dC54LCB5LCBmcmFnbWVudC53aWR0aCwgdGhpY2tuZXNzKSk7CiAKICAgICBjb250ZXh0LT5zYXZl
KCk7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29udGV4dC0+YWRkUGF0aChwYXRo
KTsKIAogICAgIGlmIChhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBkZWNvcmF0aW9u
UmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSkpCi0gICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291
cmNlKGNvbnRleHQpOworICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBw
YXRoKTsKIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5oCmluZGV4IDhlODJkZGEuLjQ2MmZlZjEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaApAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgog
ICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYpIGNvbnN0OwogCiAgICAgYm9vbCBhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShHcmFw
aGljc0NvbnRleHQqJiwgUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2b2lkIHJl
bGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComKTsKKyAgICB2b2lkIHJlbGVh
c2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBQYXRoJik7CiAKICAg
ICBib29sIHByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250
ZXh0KiYsIFRleHRSdW4mLCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVzdG9yZUdyYXBoaWNz
Q29udGV4dEFmdGVyVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBUZXh0UnVuJik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZvbnQu
Y3BwCmluZGV4IDg5OGMyNTkuLjAwNWZlMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0Zv
bnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCkBAIC01MzQsMTIgKzUzNCw5IEBA
IHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgICAgICAgICAgICAgIFBhdGggZ2x5cGhQYXRo
ID0gaWRlbnRpZmllci5wYXRoRGF0YTsKICAgICAgICAgICAgICAgICAgICAgZ2x5cGhQYXRoLnRy
YW5zZm9ybShnbHlwaFBhdGhUcmFuc2Zvcm0pOwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKGds
eXBoUGF0aCk7Ci0KICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcnVu
LnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkgPyBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3Qo
KS0+c3R5bGUoKSA6IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jl
c291cmNlLT5hcHBseVJlc291cmNlKHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpLCBzdHls
ZSwgY29udGV4dCwgcmVzb3VyY2VNb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2
ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHJ1bi5yZWZlcmVuY2luZ1JlbmRl
ck9iamVjdCgpLCBjb250ZXh0LCByZXNvdXJjZU1vZGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocnVuLnJlZmVyZW5j
aW5nUmVuZGVyT2JqZWN0KCksIGNvbnRleHQsIHJlc291cmNlTW9kZSwgZ2x5cGhQYXRoKTsKIAog
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA1NTQ0ODhiLi4xNTdmOGI4IDEwMDY0NAotLS0gYS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTExLTIyICBBbmRyZWFzIEts
aW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQ6IFJlbW92ZSAiY3VycmVudCBwYXRoIiBh
bmQgaGF2ZSBzdHJva2VQYXRoLCBmaWxsUGF0aCBhbmQgY2xpcFBhdGggdGFrZSBhIFBhdGggYXJn
dW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
NTE2CisKKyAgICAgICAgKiBVSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OmRyYXcpOgorCiAyMDEwLTExLTIyICBBZGFtIFJvYmVuICA8
YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgcGF0aHMgcmVsYXRpdmUgdG8gJFdlYktp
dFZTUHJvcHNSZWRpcmVjdGlvbkRpciB0byBhY2Nlc3Mgc2hhcmVkIC52c3Byb3BzIGZpbGVzCmRp
ZmYgLS1naXQgYS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcCBiL1dlYktpdDIv
VUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCmluZGV4IDE1OWUzZjAuLjFiYWI4NjEgMTAwNjQ0
Ci0tLSBhL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCisrKyBiL1dlYktpdDIv
VUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCkBAIC0xNDksOSArMTQ5LDggQEAgdm9pZCBGaW5k
SW5kaWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVIKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKICAgICAgICAg
RmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRh
bE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciwgdmVydGljYWxPdXRzZXRUb0NlbnRlck9mTGln
aHRCb3JkZXIpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShz
aGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29s
b3IoKSwgQ29sb3JTcGFjZVNSR0IpOwotICAgICAgICBncmFwaGljc0NvbnRleHQuYWRkUGF0aChw
YXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwogICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGxpZ2h0Qm9yZGVyQ29sb3IoKSwgQ29sb3JT
cGFjZURldmljZVJHQik7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aCgpOworICAg
ICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgocGF0aFdpdGhSb3VuZGVkUmVjdChvdXRlclBh
dGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUo
KTsKIAogICAgICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74629</attachid>
            <date>2010-11-22 20:25:33 -0800</date>
            <delta_ts>2010-11-30 08:02:11 -0800</delta_ts>
            <desc>Proposed patch v5</desc>
            <filename>bug-48516-v5.diff</filename>
            <type>text/plain</type>
            <size>60830</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWJlMjU2Ni4uMjc5ZTgzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDcgQEAKKzIwMTAtMTEtMjIgIEFuZHJlYXMgS2xp
bmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDogUmVtb3ZlICJjdXJyZW50IHBhdGgiIGFu
ZCBoYXZlIHN0cm9rZVBhdGgsIGZpbGxQYXRoIGFuZCBjbGlwUGF0aCB0YWtlIGEgUGF0aCBhcmd1
bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
NTE2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIHJlZmFjdG9yaW5nIG9ubHkuCisK
KyAgICAgICAgZmlsbFBhdGgoKSAtPiBmaWxsUGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgc3Ry
b2tlUGF0aCgpIC0+IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpCisgICAgICAgIGNsaXBQYXRoKFdp
bmRSdWxlKSAtPiBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpCisKKyAgICAgICAgZHJh
d1BhdGgoKSB3YXMgb25seSB1c2VkIGJ5IENHLCBzbyBtYWRlIGl0IFBMQVRGT1JNKENHKSBzcGVj
aWZpYy4KKworICAgICAgICBUaGUgUXQsIENHIGFuZCBDYWlybyBpbXBsZW1lbnRhdGlvbnMgYXJl
IGJlc3QtZWZmb3J0LgorICAgICAgICBGb3IgdGhlIHJlc3QsIEkndmUgcHV0IGJlZ2luUGF0aC9h
ZGRQYXRoIGFuZCBGSVhNRXMgaW4gdGhlIHRocmVlIGFmZmVjdGVkIG1ldGhvZHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpmaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c3Ryb2tlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkKToKKyAgICAgICAgKiBtYXRobWwvUmVu
ZGVyTWF0aE1MUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290Ojpw
YWludCk6CisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ29udmV4UG9seWdvblRv
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4
dE9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZHJhd0JveFNp
ZGVGcm9tUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6
OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRl
eHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHN2
Zy9TVkdGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdG
b250KToKKwogMjAxMC0xMS0yMiAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAzMjQ2ZTBhLi5j
NjRiNzFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KQEAgLTM1OCw5ICszNTgsOCBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDRjbGlwRVJLTlNfNFBhdGhFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRj
bGlwRVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NHNhdmVF
dgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ1c2NhbGVFUktOU185RmxvYXRTaXplRQot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ3YWRkUGF0aEVSS05TXzRQYXRoRQogX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ3cmVzdG9yZUV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDhmaWxsUGF0aEV2CitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUGF0
aEVSS05TXzRQYXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktO
U185RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktO
U185RmxvYXRSZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKIF9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5T
XzEwQ29sb3JTcGFjZUUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3Jl
L1dlYkNvcmUucHJvCmluZGV4IDg2NDg2NTAuLjFjMmUyOWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTE3Miw3ICsxMTcyLDYg
QEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9QZW4uY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGls
ZWRCYWNraW5nU3RvcmUuY3BwIFwKQEAgLTIwODgsNyArMjA4Nyw2IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aFRyYXZlcnNhbFN0YXRlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaCBcCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGVuLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VE
ZWNvZGVyUXQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmggXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmlu
ZGV4IGI5Zjg2Y2UuLmViNTUyYzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTgxMyw5ICs4MTMsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZmlsbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9w
YXRoLmlzRW1wdHkoKSkgewotICAgICAgICBjLT5iZWdpblBhdGgoKTsKLSAgICAgICAgYy0+YWRk
UGF0aChtX3BhdGgpOwotICAgICAgICBjLT5maWxsUGF0aCgpOworICAgICAgICBjLT5maWxsUGF0
aChtX3BhdGgpOwogICAgICAgICBkaWREcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiAgICAg
fQogCkBAIC04MzMsOSArODMxLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0
cm9rZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkgewot
ICAgICAgICBjLT5iZWdpblBhdGgoKTsKLSAgICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotCiAj
aWYgUExBVEZPUk0oUVQpCiAgICAgICAgIC8vIEZhc3QgYXBwcm94aW1hdGlvbiBvZiB0aGUgc3Ry
b2tlJ3MgYm91bmRpbmcgcmVjdC4KICAgICAgICAgLy8gVGhpcyB5aWVsZHMgYSBzbGlnaHRseSBv
dmVyc2l6ZWQgcmVjdCBidXQgaXMgdmVyeSBmYXN0CkBAIC04NDYsNyArODQxLDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZSgpCiAgICAgICAgIENhbnZhc1N0cm9rZVN0
eWxlQXBwbGllciBzdHJva2VBcHBsaWVyKHRoaXMpOwogICAgICAgICBGbG9hdFJlY3QgYm91bmRp
bmdSZWN0ID0gbV9wYXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlQXBwbGllcik7CiAjZW5k
aWYKLSAgICAgICAgYy0+c3Ryb2tlUGF0aCgpOworICAgICAgICBjLT5zdHJva2VQYXRoKG1fcGF0
aCk7CiAgICAgICAgIGRpZERyYXcoYm91bmRpbmdSZWN0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggYzQ3Njk5Zi4uNzJiMGY3YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE1MzcsMjEgKzE1
MzcsMTggQEAgc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY28KICAgICAvLyBvZiBvdXRsaW5lIChiZWNh
dXNlIGluZmxhdGluZyBhIHF1YWQgaXMgaGFyZCkKICAgICB7CiAgICAgICAgIGNvbnRleHQuc2F2
ZSgpOwotICAgICAgICBjb250ZXh0LmFkZFBhdGgocXVhZFBhdGgpOwogICAgICAgICBjb250ZXh0
LmNsaXBPdXQocXVhZFBhdGgpOwogCi0gICAgICAgIGNvbnRleHQuYWRkUGF0aChxdWFkUGF0aCk7
CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3MpOwog
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aCgpOworICAgICAgICBjb250ZXh0
LnN0cm9rZVBhdGgocXVhZFBhdGgpOwogCiAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwogICAg
IH0KIAogICAgIC8vIE5vdyBkbyB0aGUgZmlsbAotICAgIGNvbnRleHQuYWRkUGF0aChxdWFkUGF0
aCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLSAgICBjb250ZXh0LmZpbGxQYXRoKCk7CisgICAgY29udGV4dC5maWxsUGF0aChxdWFk
UGF0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgRmxvYXRRdWFk
JiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
bWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwIGIvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAKaW5kZXggYmE2MGM5Zi4uZjBhN2FiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKKysrIGIvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAKQEAgLTE2Nyw5ICsxNjcsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50
KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgLy8gZHJhdyB0byBlbmQKICAg
ICByb290LmFkZExpbmVUbyhsZWZ0RW5kKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmJlZ2lu
UGF0aCgpOwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChyb290KTsKLSAgICBpbmZvLmNvbnRl
eHQtPnN0cm9rZVBhdGgoKTsKKyAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgocm9vdCk7CiAg
ICAgCiAgICAgaW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgCkBAIC0xODEsOCArMTc5LDYgQEAg
dm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50
IHR5KQogICAgIG1hc2suYWRkTGluZVRvKHRvcExlZnQpOwogICAgIG1hc2suYWRkTGluZVRvKEZs
b2F0UG9pbnQoMiAqIHRvcExlZnQueCgpIC0gbGVmdEVuZC54KCksIDIgKiB0b3BMZWZ0LnkoKSAt
IGxlZnRFbmQueSgpKSk7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsKLSAg
ICBpbmZvLmNvbnRleHQtPmFkZFBhdGgobWFzayk7CiAgICAgaW5mby5jb250ZXh0LT5jbGlwKG1h
c2spOwogICAgIAogICAgIC8vIERyYXcgdGhlIHRoaWNrIHBhcnQgb2YgdGhlIHJvb3QuCkBAIC0x
OTMsOSArMTg5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIGlu
Zm8sIGludCB0eCwgaW50IHR5KQogICAgIGxpbmUubW92ZVRvKGJvdHRvbUxlZnQpOwogICAgIGxp
bmUuYWRkTGluZVRvKHRvcExlZnQpOwogCi0gICAgaW5mby5jb250ZXh0LT5iZWdpblBhdGgoKTsK
LSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgobGluZSk7Ci0gICAgaW5mby5jb250ZXh0LT5zdHJv
a2VQYXRoKCk7CisgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKGxpbmUpOwogICAgIAogICAg
IGluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRo
TUxTcXVhcmVSb290LmNwcAppbmRleCA4NjJkOGE0Li4xMjg1YWNkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAorKysgYi9XZWJDb3JlL21hdGht
bC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcApAQCAtMTMyLDEwICsxMzIsOCBAQCB2b2lkIFJl
bmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBpbnQg
dHkpCiAgICAgcm9vdC5hZGRMaW5lVG8odG9wTGVmdCk7CiAgICAgLy8gZHJhdyB0byBlbmQKICAg
ICByb290LmFkZExpbmVUbyhsZWZ0RW5kKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPmJlZ2lu
UGF0aCgpOwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChyb290KTsKLSAgICBpbmZvLmNvbnRl
eHQtPnN0cm9rZVBhdGgoKTsKKworICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aChyb290KTsK
ICAgICAKICAgICBpbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICAKQEAgLTE0Nyw4ICsxNDUsNiBA
QCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50
IHR4LCBpbnQgdHkpCiAgICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7CiAgICAgbWFzay5hZGRM
aW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExl
ZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmJlZ2luUGF0
aCgpOwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChtYXNrKTsKICAgICBpbmZvLmNvbnRleHQt
PmNsaXAobWFzayk7CiAgICAgCiAgICAgLy8gRHJhdyB0aGUgdGhpY2sgcGFydCBvZiB0aGUgcm9v
dC4KQEAgLTE1OSw5ICsxNTUsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50
KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgbGluZS5tb3ZlVG8oYm90dG9t
TGVmdCk7CiAgICAgbGluZS5hZGRMaW5lVG8odG9wTGVmdCk7CiAgICAgCi0gICAgaW5mby5jb250
ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBpbmZvLmNvbnRleHQtPmFkZFBhdGgobGluZSk7Ci0gICAg
aW5mby5jb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRo
KGxpbmUpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNmFkYzkwYi4uNjhm
NTRmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBA
IC0xMjcsNyArMTI3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdyYXBoaWNz
Q29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAgICAgY2xhc3MgS1VSTDsK
LSAgICBjbGFzcyBQYXRoOwogICAgIGNsYXNzIFBhdHRlcm47CiAgICAgY2xhc3MgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4dFJ1bjsKQEAgLTE5Niw2ICsxOTUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCk7CiAgICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOworICAgICAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgc2F2
ZSgpOwpAQCAtMjEwLDkgKzIxMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgZHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgc2hvdWxkQW50
aWFsaWFzID0gZmFsc2UpOwogCi0gICAgICAgIHZvaWQgZHJhd1BhdGgoKTsKLSAgICAgICAgdm9p
ZCBmaWxsUGF0aCgpOwotICAgICAgICB2b2lkIHN0cm9rZVBhdGgoKTsKKyAgICAgICAgdm9pZCBm
aWxsUGF0aChjb25zdCBQYXRoJik7CisgICAgICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
Jik7CiAKICAgICAgICAgLy8gQXJjIGRyYXdpbmcgKHVzZWQgYnkgYm9yZGVyLXJhZGl1cyBpbiBD
U1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQgdGhlIG1vbWVudC4KICAgICAgICAgdm9pZCBz
dHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKTsK
QEAgLTI1Myw3ICsyNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYWRk
SW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYsIGludCB0aGlja25lc3MpOwogICAg
ICAgICB2b2lkIGNsaXBPdXQoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNsaXBPdXRS
b3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3Qg
SW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNp
emUmIGJvdHRvbVJpZ2h0KTsKLSAgICAgICAgdm9pZCBjbGlwUGF0aChXaW5kUnVsZSk7CisgICAg
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKICAgICAgICAgdm9pZCBj
bGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9v
bCBhbnRpYWxpYXMgPSB0cnVlKTsKICAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYpOwogCkBAIC0zMDIsOCArMzAxLDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcik7CiAKKyNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShDQUlSTykg
JiYgIVBMQVRGT1JNKENHKSAmJiAhUExBVEZPUk0oSEFJS1UpCiAgICAgICAgIHZvaWQgYmVnaW5Q
YXRoKCk7CiAgICAgICAgIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJik7CisjZW5kaWYKIAogICAg
ICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwogCkBAIC0zOTMsNyArMzk0LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIGJvb2wgaW5UcmFuc3Bh
cmVuY3lMYXllcigpIGNvbnN0OwotICAgICAgICBQbGF0Zm9ybVBhdGgqIGN1cnJlbnRQYXRoKCk7
CiAgICAgICAgIHZvaWQgcHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3Qg
JnJlY3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhhTWFzayk7CiAgICAgICAgIHZvaWQg
dGFrZU93bmVyc2hpcE9mUGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgIHN0YXRpYyBRUGFpbnRl
cjo6Q29tcG9zaXRpb25Nb2RlIHRvUXRDb21wb3NpdGlvbk1vZGUoQ29tcG9zaXRlT3BlcmF0b3Ig
b3ApOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRQcml2YXRlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFBy
aXZhdGUuaAppbmRleCA5ODVjYWQ5Li42OTY5MzJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaApAQCAtMjksNyArMjksNiBAQAog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzksOCArNzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAjaWYgUExBVEZPUk0oQ0FJ
Uk8pCiAgICAgICAgIGZsb2F0IGdsb2JhbEFscGhhOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhdGhUcmFuc2Zvcm07CiAjZW5kaWYKICAgICB9Owog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCmluZGV4IDEwMzJkYzIuLjljMmZmODIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CkBAIC01MzEsNDQgKzUzMSwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBv
bHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbgogICAgIGNhaXJv
X3NldF9maWxsX3J1bGUoY3IsIHNhdmVkRmlsbFJ1bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwotCi0gICAgc2V0UGF0aE9uQ2Fpcm9D
b250ZXh0KGNyLCBtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpKTsKKyAgICBzZXRQYXRo
T25DYWlyb0NvbnRleHQoY3IsIHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSk7CiAgICAg
ZmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNyKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7Ci0gICAgc2V0UGF0
aE9uQ2Fpcm9Db250ZXh0KGNyLCBtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpKTsKKyAg
ICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRleHQo
KSk7CiAgICAgc3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlzLCBtX2NvbW1vbiwgY3IpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5j
cjsKLQotICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRo
LmNvbnRleHQoKSk7Ci0KLSAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBmaWxsUnVsZSgpID09
IFJVTEVfRVZFTk9ERCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVM
RV9XSU5ESU5HKTsKLSAgICBkcmF3UGF0aFNoYWRvdyh0aGlzLCBtX2NvbW1vbiwgRmlsbEFuZFN0
cm9rZSk7Ci0KLSAgICBzZXRQbGF0Zm9ybUZpbGwodGhpcywgY3IsIG1fY29tbW9uKTsKLSAgICBz
ZXRQbGF0Zm9ybVN0cm9rZSh0aGlzLCBjciwgbV9jb21tb24pOwotICAgIGNhaXJvX25ld19wYXRo
KGNyKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNjA3LDEyICs1ODks
MTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5j
cjsKKyAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIHBhdGgucGxhdGZvcm1QYXRoKCktPmNv
bnRleHQoKSk7CiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgY2xpcFJ1bGUgPT0gUlVMRV9F
VkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJ
TkcpOwogICAgIGNhaXJvX2NsaXAoY3IpOwogfQpAQCAtOTk0LDI1ICs5NzcsNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9w
KQogICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2RhdGEtPmNyLCB0b0NhaXJvT3BlcmF0b3Iob3Ap
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fbmV3X3BhdGgo
bV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgY3VycmVudE1hdHJp
eDsKLSAgICBjYWlyb19nZXRfbWF0cml4KG1fZGF0YS0+Y3IsICZjdXJyZW50TWF0cml4KTsKLSAg
ICBjYWlyb19zZXRfbWF0cml4KG1fZGF0YS0+bV9wZW5kaW5nUGF0aC5jb250ZXh0KCksICZjdXJy
ZW50TWF0cml4KTsKLSAgICBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KG1fZGF0YS0+
bV9wZW5kaW5nUGF0aC5jb250ZXh0KCksIHBhdGgpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgKaW5kZXggNTI3Y2I3Mi4u
NDk0YjQwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaApAQCAt
MjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKLSNpbmNsdWRl
ICJDYWlyb1BhdGguaCIKICNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC05Nyw3ICs5Niw2IEBAIHB1YmxpYzoKIAogICAg
IGNhaXJvX3QqIGNyOwogICAgIFZlY3RvcjxmbG9hdD4gbGF5ZXJzOwotICAgIENhaXJvUGF0aCBt
X3BlbmRpbmdQYXRoOwogCiAgICAgQ29udGV4dFNoYWRvdyBzaGFkb3c7CiAgICAgVmVjdG9yPENv
bnRleHRTaGFkb3c+IHNoYWRvd1N0YWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCA4ZDcyYjg1Li5hODQ4Y2RmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cApAQCAtMjk5LDIxICsyOTksMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNv
bnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAvLyBUaGlzIG1l
dGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0
cy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIC8vIEZJWE1FOiBDRyBhZGRlZCBDR0NvbnRleHRBZGRFbGxpcHNlaW5SZWN0IGlu
IFRpZ2VyLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBxdWl0ZSBlYXNpbHkgZHJhdyBhbiBlbGxp
cHNlLgotICAgIC8vIFRoaXMgY29kZSBjYW4gb25seSBoYW5kbGUgY2lyY2xlcywgbm90IGVsbGlw
c2VzLiBCdXQga2h0bWwgb25seQotICAgIC8vIHVzZXMgaXQgZm9yIGNpcmNsZXMuCi0gICAgQVNT
RVJUKHJlY3Qud2lkdGgoKSA9PSByZWN0LmhlaWdodCgpKTsKLQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAg
IGZsb2F0IHIgPSAoZmxvYXQpcmVjdC53aWR0aCgpIC8gMjsKLSAgICBDR0NvbnRleHRBZGRBcmMo
Y29udGV4dCwgcmVjdC54KCkgKyByLCByZWN0LnkoKSArIHIsIHIsIDAuMGYsIDIuMGYgKiBwaUZs
b2F0LCAwKTsKLSAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7Ci0KLSAgICBkcmF3UGF0
aCgpOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7CisgICAgZHJh
d1BhdGgocGF0aCk7CiB9CiAKIApAQCAtNDA1LDEzICszOTYsMTQgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50
IGFuZ2xlU3AKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi1zdGF0
aWMgdm9pZCBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBz
aXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCitzdGF0aWMgdm9pZCBh
ZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNpemVfdCBudW1Qb2ludHMsIGNvbnN0
IEZsb2F0UG9pbnQqIHBvaW50cykKIHsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7
Ci0gICAgQ0dDb250ZXh0TW92ZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzWzBdLngoKSwgcG9pbnRz
WzBdLnkoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBudW1Qb2ludHM7IGkrKykKLSAg
ICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9p
bnRzW2ldLnkoKSk7Ci0gICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOworICAgIEFTU0VS
VChudW1Qb2ludHMgPiAwKTsKKworICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkKKyAgICAgICAgcGF0aC5hZGRMaW5l
VG8ocG9pbnRzW2ldKTsKKyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0
UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKQEAgLTQyNyw4ICs0MTksOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0
IEZsb2F0UG9pbnQqIHBvaW50cwogICAgIGlmIChhbnRpYWxpYXNlZCAhPSBzaG91bGRBbnRpYWxp
YXMoKSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIGFudGlh
bGlhc2VkKTsKIAotICAgIGFkZENvbnZleFBvbHlnb25Ub0NvbnRleHQoY29udGV4dCwgbnBvaW50
cywgcG9pbnRzKTsKLSAgICBkcmF3UGF0aCgpOworICAgIFBhdGggcGF0aDsKKyAgICBhZGRDb252
ZXhQb2x5Z29uVG9QYXRoKHBhdGgsIG5wb2ludHMsIHBvaW50cyk7CisgICAgZHJhd1BhdGgocGF0
aCk7CiAKICAgICBpZiAoYW50aWFsaWFzZWQgIT0gc2hvdWxkQW50aWFsaWFzKCkpCiAgICAgICAg
IENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzaG91bGRBbnRpYWxpYXMoKSk7
CkBAIC00NDYsOSArNDM5LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9s
eWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2luCiAKICAgICBpZiAo
YW50aWFsaWFzICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXMoY29udGV4dCwgYW50aWFsaWFzKTsKLSAgICAKLSAgICBhZGRDb252ZXhQb2x5
Z29uVG9Db250ZXh0KGNvbnRleHQsIG51bVBvaW50cywgcG9pbnRzKTsKLSAgICBjbGlwUGF0aChS
VUxFX05PTlpFUk8pOworCisgICAgUGF0aCBwYXRoOworICAgIGFkZENvbnZleFBvbHlnb25Ub1Bh
dGgocGF0aCwgbnVtUG9pbnRzLCBwb2ludHMpOworICAgIGNsaXBQYXRoKHBhdGgsIFJVTEVfTk9O
WkVSTyk7CiAKICAgICBpZiAoYW50aWFsaWFzICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAg
ICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFzKCkp
OwpAQCAtNTExLDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5n
TW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0CiAgICAgcmV0dXJu
IHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NTIxLDExICs1MTUsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKIAogICAg
IGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAgICAg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEg
cGF0aCB1c2luZyBncmFkaWVudHMKLSAgICAgICAgZmlsbFBhdGgoKTsKLSAgICAgICAgc3Ryb2tl
UGF0aCgpOworICAgICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgICAg
ICBmaWxsUGF0aChwYXRoKTsKKyAgICAgICAgc3Ryb2tlUGF0aChwYXRoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworCiAgICAgaWYgKHN0
YXRlLmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAgICAgaWYgKHN0
YXRlLnN0cm9rZVBhdHRlcm4pCkBAIC01NDQsMTMgKzU0MiwxNiBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdpbmRSdWxlIGZp
bGxSdWxlKQogICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRk
UGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwogICAgIGlmIChtX2NvbW1vbi0+
c3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4
dCk7CiAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKQEAgLTU2OCwxMyAr
NTY5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAgICAgZmlsbFBhdGhX
aXRoRmlsbFJ1bGUoY29udGV4dCwgZmlsbFJ1bGUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAor
ICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRQYXRoKGNv
bnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworCiAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwog
ICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKQEAg
LTY0Myw4ICs2NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICBhZGRQYXRoKHBhdGgpOwotICAgIGZpbGxQYXRoKCk7
CisgICAgZmlsbFBhdGgocGF0aCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yIHx8
IG9sZENvbG9yU3BhY2UgIT0gY29sb3JTcGFjZSkKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29u
dGV4dCwgb2xkRmlsbENvbG9yLCBvbGRDb2xvclNwYWNlKTsKQEAgLTY2OSwxOSArNjcyLDIzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
Q0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChwYXRoLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmICghQ0dDb250ZXh0SXNQYXRoRW1wdHkoY29udGV4
dCkpIHsKLSAgICAgICAgaWYgKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgICAg
IENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQ0dD
b250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICB9CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoLnBsYXRmb3JtUGF0aCgpKTsKKworICAgIGlmIChjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQp
CisgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIENH
Q29udGV4dENsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5l
clJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQpAQCAt
ODYzLDE2ICs4NzAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpv
aW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQot
ewotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQ0dDb250
ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKaW5kZXggMDUwMTJlOC4uN2RkYTI0
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0Nv
bnRleHRIYWlrdS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFw
aGljc0NvbnRleHRIYWlrdS5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQg
YW5nbGVTcAogICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VBcmMocmVjdCwgc3RhcnRBbmdsZSwg
YW5nbGVTcGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTkxLDE3ICsxOTEsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxsQXJjIGNh
bGxzIGFyZSBuZWVkZWQuCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2lu
UGF0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aChjb25zdCBQYXRoJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZH
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9w
ZW5WRy5jcHAKaW5kZXggMGQxNmQ0ZC4uMDRhNWUyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCkBA
IC0xMzksMjggKzEzOSwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbgogICAgIFVOVVNFRF9Q
QVJBTShzaG91bGRBbnRpYWxpYXMpOyAvLyBGSVhNRQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsK
KyAgICBhZGRQYXRoKHBhdGgpOworCiAgICAgbV9kYXRhLT5kcmF3UGF0aChWR19GSUxMX1BBVEgs
IG1fY29tbW9uLT5zdGF0ZS5maWxsUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9kYXRhLT5kcmF3UGF0aChWR19TVFJPS0VfUEFUSCwgbV9jb21tb24tPnN0YXRlLmZp
bGxSdWxlKTsKLX0KKyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgIGJl
Z2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0aCgpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9kYXRhLT5kcmF3UGF0aChWR19GSUxMX1BBVEggfCBWR19TVFJPS0VfUEFUSCwg
bV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKKyAgICBtX2RhdGEtPmRyYXdQYXRoKFZHX1NUUk9L
RV9QQVRILCBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjIxLDExICsyMjEsMTUg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
IG1fZGF0YS0+aW50ZXJzZWN0Q2xpcFJlY3QocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQmUg
c21hcnRlciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aCk7
CisKICAgICBtX2RhdGEtPmNsaXBQYXRoKCoobV9kYXRhLT5jdXJyZW50UGF0aCgpKSwgUGFpbnRl
ck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgY2xpcFJ1bGUpOwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCmluZGV4IDEwYTdmODku
LmFiNzJmMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUg
IlBlbi5oIgogI2luY2x1ZGUgIlRyYW5zcGFyZW5jeUxheWVyLmgiCiAKICNpbmNsdWRlIDxRQnJ1
c2g+CkBAIC0xOTMsOSArMTkyLDYgQEAgcHVibGljOgogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxp
dHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKIAotICAgIC8vIE9ubHkgdXNlZCBieSBTVkcg
Zm9yIG5vdy4KLSAgICBRUGFpbnRlclBhdGggY3VycmVudFBhdGg7Ci0KICAgICBDb250ZXh0U2hh
ZG93IHNoYWRvdzsKICAgICBRU3RhY2s8Q29udGV4dFNoYWRvdz4gc2hhZG93U3RhY2s7CiAKQEAg
LTIwNCwxMyArMjAwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2hhZG93Lm1fdHlwZSAh
PSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdzsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBjbGVh
ckN1cnJlbnRQYXRoKCkKLSAgICB7Ci0gICAgICAgIGlmICghY3VycmVudFBhdGguZWxlbWVudENv
dW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGN1cnJlbnRQYXRoID0gUVBhaW50
ZXJQYXRoKCk7Ci0gICAgfQotCiAgICAgUVJlY3RGIGNsaXBCb3VuZGluZ1JlY3QoKSBjb25zdAog
ICAgIHsKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgOCwgMCkKQEAgLTMx
MSwxMSArMzAwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRl
KCkKIAogICAgIG1fZGF0YS0+cCgpLT5yZXN0b3JlKCk7CiAKLSAgICBpZiAoIW1fZGF0YS0+Y3Vy
cmVudFBhdGguaXNFbXB0eSgpICYmIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLmlzSW52
ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zvcm0gbWF0cml4ID0gbV9jb21tb24tPnN0YXRl
LnBhdGhUcmFuc2Zvcm07Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1
cnJlbnRQYXRoICogbWF0cml4OwotICAgIH0KLQogICAgIGlmIChtX2RhdGEtPnNoYWRvd1N0YWNr
LmlzRW1wdHkoKSkKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KCk7CiAg
ICAgZWxzZQpAQCAtNTAzLDE0ICs0ODcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAg
ICAgICAgcC0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBwYWludGVyV2Fz
QW50aWFsaWFzZWQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVBhaW50ZXIqIHAg
PSBtX2RhdGEtPnAoKTsKLSAgICBRUGFpbnRlclBhdGgmIHBhdGggPSBtX2RhdGEtPmN1cnJlbnRQ
YXRoOyAvLyBBdm9pZCBkZXRhY2hpbmcgdGhlIFFQYWludGVyUGF0aAotICAgIHBhdGguc2V0Rmls
bFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKKyAgICBRUGFpbnRlclBhdGggcGxhdGZv
cm1QYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1
bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChtX2RhdGEtPmhhc1NoYWRv
dygpKSB7CiAgICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsK
QEAgLTUxOCwxMyArNTAyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiAg
ICAgICAgICAgICAmJiAhbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuICYmICFtX2NvbW1vbi0+
c3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBwLT50cmFuc2xhdGUo
bV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOwotICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwg
UUNvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgICAgIHAtPmZpbGxQYXRo
KHBsYXRmb3JtUGF0aCwgUUNvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKICAgICAgICAg
ICAgIHAtPnRyYW5zbGF0ZSgtbV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIocCwgcGF0aC5jb250cm9sUG9pbnRSZWN0KCkpOworICAgICAgICAgICAgUVBh
aW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgcGxhdGZv
cm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKSk7CiAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRl
cikgewogICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShR
UGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+ZmlsbFBhdGgocGF0aCwgUUNvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsK
KyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFD
b2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7CiAgICAgICAgICAgICAgICAgc2hhZG93LT5l
bmRTaGFkb3dMYXllcihwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTMyLDI2ICs1
MTYsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKICAgICB9CiAgICAgaWYg
KG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
YWZmaW5lOwotICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2gobV9jb21tb24tPnN0YXRl
LmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOworICAgICAgICBw
LT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRl
cm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7CiAgICAgfSBlbHNlIGlmIChtX2Nv
bW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICAgICAgYnJ1
c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIGJydXNoKTsKKyAgICAg
ICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBicnVzaCk7CiAgICAgfSBlbHNlCi0gICAgICAg
IHAtPmZpbGxQYXRoKHBhdGgsIHAtPmJydXNoKCkpOwotCi0gICAgbV9kYXRhLT5jbGVhckN1cnJl
bnRQYXRoKCk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgcC0+YnJ1c2goKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEt
PnAoKTsKICAgICBRUGVuIHBlbihwLT5wZW4oKSk7Ci0gICAgUVBhaW50ZXJQYXRoJiBwYXRoID0g
bV9kYXRhLT5jdXJyZW50UGF0aDsgLy8gQXZvaWQgZGV0YWNoaW5nIHRoZSBRUGFpbnRlclBhdGgK
LSAgICBwYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CisgICAgUVBh
aW50ZXJQYXRoIHBsYXRmb3JtUGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisgICAgcGxhdGZv
cm1QYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAgICBpZiAo
bV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBj
b250ZXh0U2hhZG93KCk7CkBAIC01NjIsMTUgKzU0NCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgICAgICBRUGVuIHNoYWRvd1BlbihwZW4pOwogICAgICAg
ICAgICAgc2hhZG93UGVuLnNldENvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpOwogICAgICAg
ICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKLSAgICAgICAgICAg
IHAtPnN0cm9rZVBhdGgocGF0aCwgc2hhZG93UGVuKTsKKyAgICAgICAgICAgIHAtPnN0cm9rZVBh
dGgocGxhdGZvcm1QYXRoLCBzaGFkb3dQZW4pOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1t
X2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBG
bG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5jb250cm9sUG9pbnRSZWN0KCk7CisgICAgICAg
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJl
Y3QoKTsKICAgICAgICAgICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkg
KyBwZW4ud2lkdGhGKCkpOwogICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgYm91bmRpbmdSZWN0KTsKICAgICAgICAgICAgIGlm
IChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3Bh
Y2l0eShzdGF0aWNfY2FzdDxxcmVhbD4obV9kYXRhLT5zaGFkb3cubV9jb2xvci5hbHBoYSgpKSAv
IDI1NSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aChwYXRoLCBw
ZW4pOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1Q
YXRoLCBwZW4pOwogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU4MCwxNiArNTYyLDE1IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKCkKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsK
ICAgICAgICAgcGVuLnNldEJydXNoKFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVy
bi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgcC0+c2V0UGVuKHBl
bik7Ci0gICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgcGVuKTsKKyAgICAgICAgcC0+c3Ryb2tl
UGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7CiAgICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlR3JhZGllbnQpIHsKICAgICAgICAgUUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgIGJydXNoLnNldFRy
YW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0oKSk7CiAgICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CiAgICAgICAgIHAtPnNldFBl
bihwZW4pOwotICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHBlbik7CisgICAgICAgIHAtPnN0
cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwogICAgIH0gZWxzZQotICAgICAgICBwLT5zdHJv
a2VQYXRoKHBhdGgsIHBlbik7Ci0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7CisgICAg
ICAgIHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwogfQogCiBzdGF0aWMgaW5saW5l
IHZvaWQgZHJhd1JlcGVhdFBhdHRlcm4oUVBhaW50ZXIqIHAsIFFQaXhtYXAqIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IGJvb2wgcmVwZWF0WCwgY29uc3QgYm9vbCByZXBlYXRZ
KQpAQCAtNzY4LDMwICs3NDksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVk
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBwLT5m
aWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCi17Ci0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQ
YXRoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQYXRoLmVsZW1lbnRDb3VudCgpKSB7Ci0g
ICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fZGF0YS0+Y3VycmVudFBhdGguYWRkUGF0aChwYXRoLnBs
YXRmb3JtUGF0aCgpKTsKLX0KLQogYm9vbCBHcmFwaGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5
TGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEtPmxheWVyQ291bnQ7CiB9CiAKLVBs
YXRmb3JtUGF0aCogR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50UGF0aCgpCi17Ci0gICAgcmV0dXJu
ICZtX2RhdGEtPmN1cnJlbnRQYXRoOwotfQotCiBDb250ZXh0U2hhZG93KiBHcmFwaGljc0NvbnRl
eHQ6OmNvbnRleHRTaGFkb3coKQogewogICAgIHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CkBAIC04
MDUsMTUgKzc2NywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgbV9kYXRhLT5wKCktPnNldENsaXBSZWN0KHJlY3QsIFF0OjpJbnRlcnNl
Y3RDbGlwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNs
aXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7Ci0gICAgUVBhaW50
ZXJQYXRoIG5ld1BhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoOwotICAgIG5ld1BhdGguc2V0Rmls
bFJ1bGUoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6Oldp
bmRpbmdGaWxsKTsKLSAgICBwLT5zZXRDbGlwUGF0aChuZXdQYXRoLCBRdDo6SW50ZXJzZWN0Q2xp
cCk7CisgICAgUVBhaW50ZXJQYXRoIHBsYXRmb3JtUGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7
CisgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxSdWxlKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCA/
IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5nRmlsbCk7CisgICAgcC0+c2V0Q2xpcFBhdGgo
cGxhdGZvcm1QYXRoLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMTA0MiwxMiArMTAwNCwxMCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRo
KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFQ
YWludGVyUGF0aCBwYXRoOworICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7
CiAgICAgc2V0U3Ryb2tlVGhpY2tuZXNzKHdpZHRoKTsKLSAgICBtX2RhdGEtPmN1cnJlbnRQYXRo
ID0gcGF0aDsKLQotICAgIHN0cm9rZVBhdGgoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxjKQpAQCAtMTE2Nywx
MiArMTEyNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhLT5wKCktPnRyYW5zbGF0ZSh4LCB5
KTsKLQotICAgIGlmICghbV9kYXRhLT5jdXJyZW50UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
UVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEt
PmN1cnJlbnRQYXRoICogbWF0cml4LnRyYW5zbGF0ZSgteCwgLXkpOwotICAgICAgICBtX2NvbW1v
bi0+c3RhdGUucGF0aFRyYW5zZm9ybS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgfQogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCkBAIC0xMTgxLDEyICsxMTM1
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAoKS0+cm90YXRlKDE4MCAvIE1fUEkqcmFkaWFucyk7
Ci0KLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIFFU
cmFuc2Zvcm0gbWF0cml4OwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5j
dXJyZW50UGF0aCAqIG1hdHJpeC5yb3RhdGUoLTE4MCAvIE1fUEkqcmFkaWFucyk7Ci0gICAgICAg
IG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLnJvdGF0ZShyYWRpYW5zKTsKLSAgICB9CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHMpCkBAIC0x
MTk1LDEyICsxMTQzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgcykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhLT5wKCktPnNjYWxlKHMud2lk
dGgoKSwgcy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zvcm0gbWF0cml4OwotICAgICAgICBtX2RhdGEtPmN1cnJl
bnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJpeC5zY2FsZSgxIC8gcy53aWR0aCgp
LCAxIC8gcy5oZWlnaHQoKSk7Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3Jt
LnNjYWxlTm9uVW5pZm9ybShzLndpZHRoKCksIHMuaGVpZ2h0KCkpOwotICAgIH0KIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTEyNTcs
MTUgKzExOTksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAo
KS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKLQotICAgIC8vIFRyYW5zZm9y
bWF0aW9ucyB0byB0aGUgY29udGV4dCBzaG91bGRuJ3QgdHJhbnNmb3JtIHRoZSBjdXJyZW50UGF0
aC4KLSAgICAvLyBXZSBoYXZlIHRvIHVuZG8gZXZlcnkgY2hhbmdlIG1hZGUgdG8gdGhlIGNvbnRl
eHQgZnJvbSB0aGUgY3VycmVudFBhdGgKLSAgICAvLyB0byBhdm9pZCB3cm9uZyBkcmF3aW5ncy4K
LSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpICYmIHRyYW5zZm9ybS5pc0lu
dmVydGlibGUoKSkgewotICAgICAgICBRVHJhbnNmb3JtIG1hdHJpeCA9IHRyYW5zZm9ybS5pbnZl
cnNlKCk7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRo
ICogbWF0cml4OwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybS5tdWx0aXBs
eSh0cmFuc2Zvcm0udG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKLSAgICB9CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0
JikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAppbmRleCA3YzBiY2QxLi42ZjZkY2U4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC00
MjAsMTEgKzQyMCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Y2xpcFBhdGgocGF0aCwgU2tS
ZWdpb246OmtEaWZmZXJlbmNlX09wKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNv
bnN0IFBhdGgmIHBhdGhUb0NsaXAsIFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFy
dGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoVG9DbGlw
KTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5M
b2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0
aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcyMywxMSArNzI3LDE1IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5kcmF3UmVjdChyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoVG9GaWxsKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8v
IEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRk
UGF0aChwYXRoVG9GaWxsKTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZvcm1Db250ZXh0KCkt
PmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2Fm
ZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICByZXR1cm47CkBAIC0xMTc3LDExICsxMTg1LDE1IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgciwgaW50IHN0
YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGhUb1N0cm9rZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0
aCgpOworICAgIGFkZFBhdGgocGF0aFRvU3Ryb2tlKTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxh
dGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYg
KCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2lu
Q0UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRX
aW5DRS5jcHAKaW5kZXggMDgwMjgyNi4uNGZhYTI5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKQEAgLTEz
MjUsOCArMTMyNSwxMiBAQCBDb2xvciBncmFkaWVudEF2ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVu
dCogZ3JhZGllbnQpCiAgICAgICAgICwgKHN0b3AuYWxwaGEgKyBsYXN0U3RvcC5hbHBoYSkgKiAw
LjVmKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogeworICAgIC8vIEZJWE1FOiBC
ZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRo
KTsKKwogICAgIENvbG9yIGMgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50CiAgICAgICAg
ID8gZ3JhZGllbnRBdmVyYWdlQ29sb3IobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQo
KSkKICAgICAgICAgOiBmaWxsQ29sb3IoKTsKQEAgLTEzNzYsNiArMTM4MCwxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgaWYgKCFtX2RhdGEtPm1fZGMpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAg
YmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoKTsKKwogICAgIE93blB0cjxIUEVOPiBwZW4g
PSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxl
KCkpOwogCiAgICAgaWYgKG1fZGF0YS0+bV9vcGFjaXR5IDwgMS4wZiB8fCBtX2RhdGEtPmhhc0Fs
cGhhKCkpIHsKQEAgLTE5MDAsNyArMTkwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L0dyYXBoaWNzQ29udGV4dFd4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3Jh
cGhpY3NDb250ZXh0V3guY3BwCmluZGV4IDUwMDdmZmUuLmJhOTYzNTIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCkBAIC0zMzcs
NyArMzM3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYp
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKFdpbmRSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtNTMzLDMwICs1MzMs
MzIgQEAgSW50ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkgY29uc3QKICAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICNpZiBVU0UoV1hHQykKKyAgICAvLyBG
SVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBh
dGgocGF0aCk7CisKICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQt
PkdldEdyYXBoaWNzQ29udGV4dCgpOwogICAgIGlmIChnYykKICAgICAgICAgZ2MtPkZpbGxQYXRo
KG1fZGF0YS0+Y3VycmVudFBhdGgpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiB7CiAjaWYgVVNFKFdYR0MpCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJv
dXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOworCiAgICAgd3hH
cmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQo
KTsKICAgICBpZiAoZ2MpCiAgICAgICAgIGdjLT5TdHJva2VQYXRoKG1fZGF0YS0+Y3VycmVudFBh
dGgpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCi17Ci0g
ICAgZmlsbFBhdGgoKTsKLSAgICBzdHJva2VQYXRoKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCAxNDNjNzJjLi5iZDE5MTY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCkBAIC0xMDY0LDcgKzEwNjQsNiBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4
LAogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVy
UmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dFJvdW5kZWRSZWN0KGlubmVyQm9yZGVyUmVj
dCwgaW5uZXJUb3BMZWZ0LCBpbm5lclRvcFJpZ2h0LCBpbm5lckJvdHRvbUxlZnQsIGlubmVyQm90
dG9tUmlnaHQpOwogICAgICAgICAgICAgcm91bmRlZFBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVy
UmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUGF0aChyb3VuZGVkUGF0aCk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTE4MDUsMTMgKzE4MDQsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludAog
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KGhvbGVSZWN0
KTsKIAotICAgICAgICAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5hZGRQYXRoKHBhdGgpOwotCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShS
VUxFX0VWRU5PREQpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xv
ciwgcy0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzLT5jb2xvclNwYWNlKCkpOwotICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQ
YXRoKHBhdGgpOwogCiAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCAxNjYxM2E1
Li5jMDk0MzY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CkBAIC0xNjYsMTEgKzE2Niw5IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVw
bGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogICAgIAogICAgIGNv
bnRleHQtPnNhdmUoKTsKICAgICBjb250ZXh0LT5jbGlwKGNvbnRlbnRSZWN0KTsKLSAgICBjb250
ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOyAgCiAgICAgY29u
dGV4dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFj
ZW1lbnRUZXh0UHJlc3NlZFJvdW5kZWRSZWN0T3BhY2l0eSA6IHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0T3BhY2l0eSk7CiAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG1fbWlzc2luZ1BsdWdp
bkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENv
bG9yKCkgOiBDb2xvcjo6d2hpdGUsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7Ci0gICAgY29udGV4
dC0+ZmlsbFBhdGgoKTsKKyAgICBjb250ZXh0LT5maWxsUGF0aChwYXRoKTsKIAogICAgIGZsb2F0
IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsgKHJl
cGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndpZHRoKCkgLSB0ZXh0V2lkdGgpIC8gMik7CiAgICAg
ZmxvYXQgbGFiZWxZID0gcm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkg
KyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAv
IDIgKyBmb250LmFzY2VudCgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGUx
M2IxZjkuLmU5OTY3ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtOTU1LDgg
Kzk1NSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBJbnRSZWN0CiAgICAgICAgIGxpbmVEYXNoLmFwcGVu
ZChwYXRXaWR0aCk7CiAgICAgICAgIGxpbmVEYXNoLmFwcGVuZCh3aGl0ZVNwYWNlV2lkdGgpOwog
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldExpbmVEYXNoKGxpbmVEYXNoLCBwYXRXaWR0aCk7
Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUGF0aChib3JkZXJQYXRoKTsKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IERPVUJMRTogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2UuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmgKaW5kZXggMDIzMGU5
OC4uYWU3ZTM4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2UuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oCkBAIC00OCw2
ICs0OCw3IEBAIGVudW0gUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIHsKIGNsYXNzIENvbG9yOwogY2xh
c3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUGF0aDsKIGNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyU1ZHUmVzb3Vy
Y2VTb2xpZENvbG9yOwpAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24gPSB0cnVlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0KSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0LCBjb25zdCBQYXRoJikgeyB9CiAgICAgdmlydHVhbCBG
bG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2
aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCBl
N2I5ZmJiLi4yNWVkMWMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKQEAgLTE1MSw5ICsxNTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6cGF0aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
CiAgICAgLy8gVGhlIFNWRyBzcGVjaWZpY2F0aW9uIHdhbnRzIHVzIHRvIGNsaXAgZXZlcnl0aGlu
ZywgaWYgY2xpcC1wYXRoIGRvZXNuJ3QgaGF2ZSBhIGNoaWxkLgogICAgIGlmIChjbGlwUGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIGNsaXBQYXRoLmFkZFJlY3QoRmxvYXRSZWN0KCkpOwotICAgIGNv
bnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGNvbnRleHQtPmFkZFBhdGgoY2xpcFBhdGgpOwotICAg
IGNvbnRleHQtPmNsaXBQYXRoKGNsaXBSdWxlKTsKKyAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlw
UGF0aCwgY2xpcFJ1bGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmluZGV4IGE3NTcxNDcuLjA4NDY2
YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojph
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQordm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoJiBw
YXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9
IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNjAsOSArMjYwLDkgQEAgdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwg
R3JhcGhpY3MKICNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChyZXNvdXJjZU1vZGUg
JiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOworICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgocGF0aCk7CiAgICAgICAgIGVsc2UgaWYgKHJlc291
cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tl
UGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKTsKICAgICB9CiAK
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggYmMwYjg2NC4uODhhNTYyZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAtNTEsNyArNTEsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmpl
Y3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250
ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlLCBjb25zdCBQYXRoJik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3Vu
ZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0
ZWQ6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcApp
bmRleCBkMmU0NTYzLi4zMWU2YTA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAKQEAgLTE4MiwxNiArMTgyLDE2IEBAIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5k
ZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBh
dHRlcm46OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCom
IGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKK3ZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgm
IHBhdGgpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUg
IT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAogICAgIGlmICghKHJlc291cmNlTW9kZSAmIEFwcGx5
VG9UZXh0TW9kZSkpIHsKICAgICAgICAgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9k
ZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5maWxsUGF0aChwYXRoKTsKICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlU
b1N0cm9rZU1vZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAg
ICAgICBjb250ZXh0LT5zdHJva2VQYXRoKHBhdGgpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgK
aW5kZXggYmE0YWVjNC4uMmZjMTUyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VQYXR0ZXJuLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52
YWxpZGF0aW9uID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9y
dCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5k
ZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3Jh
cGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCYp
OwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0
KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNwcApp
bmRleCAwYzA5NjUyLi4xMjIwYWFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvci5jcHAKQEAgLTc1LDI4ICs3NSwxNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyU3R5bAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQordm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3I6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwg
Y29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHJl
c291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCiAgICAgaWYgKCEocmVzb3VyY2VN
b2RlICYgQXBwbHlUb1RleHRNb2RlKSkgewogICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBw
bHlUb0ZpbGxNb2RlKQotICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwogICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1v
ZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgo
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgocGF0aCk7CiAgICAgfQotCi0jaWYg
UExBVEZPUk0oU0tJQSkKLSAgICAvLyBGSVhNRTogTW92ZSB0aGlzIGludG8gdGhlIEdyYXBoaWNz
Q29udGV4dAotICAgIC8vIFdlYktpdCBpbXBsaWNpdGx5IGV4cGVjdHMgdXMgdG8gcmVzZXQgdGhl
IHBhdGguCi0gICAgLy8gRm9yIGV4YW1wbGUgaW4gZmlsbEFuZFN0cm9rZVBhdGgoKSBvZiBSZW5k
ZXJTVkdQYXRoLmNwcCB0aGUgcGF0aCBpcwotICAgIC8vIGFkZGVkIGJhY2sgdG8gdGhlIGNvbnRl
eHQgYWZ0ZXIgZmlsbGluZy4gVGhpcyBpcyBiZWNhdXNlIGludGVybmFsbHkgaXQKLSAgICAvLyBj
YWxscyBDR0NvbnRleHRGaWxsUGF0aCgpIHdoaWNoIGNsb3NlcyB0aGUgcGF0aC4KLSAgICBjb250
ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0Rmls
bFNoYWRlcigwKTsKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ryb2tlU2hh
ZGVyKDApOwotI2VuZGlmCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmgKaW5kZXggNDQxMDlkYi4uZGNhNTRiMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKQEAgLTM3LDcgKzM3
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVu
ZGVyT2JqZWN0KiwgYm9vbCA9IHRydWUpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVz
b3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNv
bnN0IFBhdGgmKTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJl
bmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRl
clNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNl
VHlwZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
Y3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IDQ4MzMw
M2YuLmM5MWRiMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQ
YXRoLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAg
LTE0OCwxOSArMTQ4LDE3IEBAIHZvaWQgUmVuZGVyU1ZHUGF0aDo6bGF5b3V0KCkKIAogdm9pZCBS
ZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
dGhpcy0+c3R5bGUoKTsKIAogICAgIENvbG9yIGZhbGxiYWNrQ29sb3I7CiAgICAgaWYgKFJlbmRl
clNWR1Jlc291cmNlKiBmaWxsUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpm
aWxsUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKLSAgICAg
ICAgY29udGV4dC0+YWRkUGF0aChtX3BhdGgpOwogICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVz
b3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9k
ZSkpCi0gICAgICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uo
dGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKTsKKyAgICAgICAgICAgIGZpbGxQYWludGlu
Z1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1v
ZGUsIG1fcGF0aCk7CiAgICAgICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7
CiAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3Vy
Y2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CiAg
ICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKICAg
ICAgICAgICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxl
LCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUpKQotICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVz
b3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSk7
CisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhp
cywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCBtX3BhdGgpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0xNjksMzAgKzE2NywzMSBAQCB2b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxBbmRTdHJva2VQ
YXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAgICBpZiAoIXN0cm9rZVBhaW50aW5nUmVz
b3VyY2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIFBhdGggcGF0aDsKKworICAgIGJvb2wgbm9u
U2NhbGluZ1N0cm9rZSA9IHN0eWxlLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9O
T05fU0NBTElOR19TVFJPS0U7CiAgICAgYm9vbCByZXN0b3JlQ29udGV4dCA9IGZhbHNlOwotICAg
IGlmIChzdHlsZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdf
U1RST0tFKSB7CisgICAgaWYgKG5vblNjYWxpbmdTdHJva2UpIHsKICAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25T
Y2FsaW5nU3Ryb2tlVHJhbnNmb3JtID0gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJs
ZTo6RGlzYWxsb3dTdHlsZVVwZGF0ZSk7CiAgICAgICAgIGlmICghbm9uU2NhbGluZ1N0cm9rZVRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBQ
YXRoIHRyYW5zZm9ybWVkUGF0aCA9IG1fcGF0aDsKLSAgICAgICAgdHJhbnNmb3JtZWRQYXRoLnRy
YW5zZm9ybShub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKTsKKyAgICAgICAgcGF0aCA9IG1fcGF0
aDsKKyAgICAgICAgcGF0aC50cmFuc2Zvcm0obm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSk7CiAK
ICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0obm9u
U2NhbGluZ1N0cm9rZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgICAgICBjb250ZXh0LT5hZGRQ
YXRoKHRyYW5zZm9ybWVkUGF0aCk7CiAgICAgICAgIHJlc3RvcmVDb250ZXh0ID0gdHJ1ZTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aChtX3BhdGgpOworICAgIH0KIAogICAg
IGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBj
b250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSkpCi0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3Vy
Y2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9TdHJva2VNb2RlKTsK
KyAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywg
Y29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIG5vblNjYWxpbmdTdHJva2UgPyBwYXRoIDogbV9w
YXRoKTsKICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdS
ZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CiAgICAgICAgIGZhbGxiYWNr
UmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwogICAgICAgICBpZiAoZmFsbGJhY2tS
ZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9r
ZU1vZGUpKQotICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uo
dGhpcywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpOworICAgICAgICAgICAgZmFsbGJhY2tS
ZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1v
ZGUsIG5vblNjYWxpbmdTdHJva2UgPyBwYXRoIDogbV9wYXRoKTsKICAgICB9CiAKICAgICBpZiAo
cmVzdG9yZUNvbnRleHQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAKaW5kZXggZDFmNjYwYS4uZjdmYzUzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcApAQCAtMzE4LDE0ICszMTgsMTQgQEAgYm9vbCBTVkdJbmxpbmVUZXh0
Qm94OjphY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBS
ZW5kZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxl
YXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0KQordm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBj
b250ZXh0LCBjb25zdCBQYXRoJiBwYXRoKQogewogICAgIEFTU0VSVChtX3BhaW50aW5nUmVzb3Vy
Y2UpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5k
ZXJlcigpOwogICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKLSAgICBtX3BhaW50aW5nUmVz
b3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50
aW5nUmVzb3VyY2VNb2RlKTsKKyAgICBtX3BhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291
cmNlKHBhcmVudFJlbmRlcmVyLCBjb250ZXh0LCBtX3BhaW50aW5nUmVzb3VyY2VNb2RlLCBwYXRo
KTsKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSAwOwogfQogCkBAIC0zNDQsNyArMzQ0LDcgQEAg
Ym9vbCBTVkdJbmxpbmVUZXh0Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50
aW5nKEdyYXBoaWNzQ29udGV4dComIGMKIAogdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3Jl
R3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgVGV4dFJ1biYgdGV4dFJ1bikKIHsKLSAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250
ZXh0KTsKKyAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBQYXRoKCkpOwogCiAj
aWYgRU5BQkxFKFNWR19GT05UUykKICAgICB0ZXh0UnVuLnNldEFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UoMCk7CkBAIC01MDAsMTEgKzUwMCw5IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRE
ZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgRVRleHRECiAgICAg
cGF0aC5hZGRSZWN0KEZsb2F0UmVjdChmcmFnbWVudC54LCB5LCBmcmFnbWVudC53aWR0aCwgdGhp
Y2tuZXNzKSk7CiAKICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRo
KCk7Ci0gICAgY29udGV4dC0+YWRkUGF0aChwYXRoKTsKIAogICAgIGlmIChhY3F1aXJlUGFpbnRp
bmdSZXNvdXJjZShjb250ZXh0LCBkZWNvcmF0aW9uUmVuZGVyZXIsIGRlY29yYXRpb25TdHlsZSkp
Ci0gICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQpOworICAgICAgICByZWxl
YXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBwYXRoKTsKIAogICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCmluZGV4IDhl
ODJkZGEuLjQ2MmZlZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
aApAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bihSZW5kZXJTdHlsZSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OwogCiAgICAgYm9v
bCBhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiwgUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2b2lkIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBo
aWNzQ29udGV4dComKTsKKyAgICB2b2lkIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNz
Q29udGV4dComLCBjb25zdCBQYXRoJik7CiAKICAgICBib29sIHByZXBhcmVHcmFwaGljc0NvbnRl
eHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYsIFRleHRSdW4mLCBSZW5kZXJTdHls
ZSopOwogICAgIHZvaWQgcmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKEdy
YXBoaWNzQ29udGV4dComLCBUZXh0UnVuJik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdG
b250LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCmluZGV4IDg5OGMyNTkuLjAwNWZlMDUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NW
R0ZvbnQuY3BwCkBAIC01MzQsMTIgKzUzNCw5IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NW
R0ZvbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAg
ICAgICAgICAgICAgICAgIFBhdGggZ2x5cGhQYXRoID0gaWRlbnRpZmllci5wYXRoRGF0YTsKICAg
ICAgICAgICAgICAgICAgICAgZ2x5cGhQYXRoLnRyYW5zZm9ybShnbHlwaFBhdGhUcmFuc2Zvcm0p
OwogCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKGdseXBoUGF0aCk7Ci0KICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkg
PyBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKS0+c3R5bGUoKSA6IDA7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHJ1bi5y
ZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpLCBzdHlsZSwgY29udGV4dCwgcmVzb3VyY2VNb2RlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpLCBjb250ZXh0LCByZXNvdXJj
ZU1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+
cG9zdEFwcGx5UmVzb3VyY2UocnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCksIGNvbnRleHQs
IHJlc291cmNlTW9kZSwgZ2x5cGhQYXRoKTsKIAogICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1NTQ0ODhiLi4xNTdmOGI4IDEwMDY0NAot
LS0gYS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDEwLTExLTIyICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHcmFwaGljc0Nv
bnRleHQ6IFJlbW92ZSAiY3VycmVudCBwYXRoIiBhbmQgaGF2ZSBzdHJva2VQYXRoLCBmaWxsUGF0
aCBhbmQgY2xpcFBhdGggdGFrZSBhIFBhdGggYXJndW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTE2CisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
RmluZEluZGljYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OmRyYXcp
OgorCiAyMDEwLTExLTIyICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVc2UgcGF0aHMgcmVsYXRpdmUgdG8gJFdlYktpdFZTUHJvcHNSZWRpcmVjdGlvbkRpciB0byBh
Y2Nlc3Mgc2hhcmVkIC52c3Byb3BzIGZpbGVzCmRpZmYgLS1naXQgYS9XZWJLaXQyL1VJUHJvY2Vz
cy9GaW5kSW5kaWNhdG9yLmNwcCBiL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3Bw
CmluZGV4IDE1OWUzZjAuLjFiYWI4NjEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvVUlQcm9jZXNzL0Zp
bmRJbmRpY2F0b3IuY3BwCisrKyBiL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3Bw
CkBAIC0xNDksOSArMTQ5LDggQEAgdm9pZCBGaW5kSW5kaWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVIKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNhdmUoKTsKICAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBp
bmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRl
ciwgdmVydGljYWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIpOwogICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZ
KSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOwotICAg
ICAgICBncmFwaGljc0NvbnRleHQuYWRkUGF0aChwYXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0
aFJlY3QsIGNvcm5lclJhZGl1cykpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENv
bG9yKGxpZ2h0Qm9yZGVyQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC5maWxsUGF0aCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBh
dGgocGF0aFdpdGhSb3VuZGVkUmVjdChvdXRlclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKIAogICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2F2ZSgpOwo=
</data>
<flag name="review"
          id="65280"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75150</attachid>
            <date>2010-11-30 08:02:11 -0800</date>
            <delta_ts>2010-11-30 10:01:44 -0800</delta_ts>
            <desc>Proposed patch v6</desc>
            <filename>bug-48516-v6.diff</filename>
            <type>text/plain</type>
            <size>63560</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGM5MTJiMC4uYzNmMDRmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTIgQEAKKzIwMTAtMTEtMzAgIEFuZHJlYXMgS2xp
bmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDogUmVtb3ZlICJjdXJyZW50IHBhdGgiIGFu
ZCBoYXZlIHN0cm9rZVBhdGgsIGZpbGxQYXRoIGFuZCBjbGlwUGF0aCB0YWtlIGEgUGF0aCBhcmd1
bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
NTE2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIHJlZmFjdG9yaW5nIG9ubHkuCisK
KyAgICAgICAgZmlsbFBhdGgoKSAtPiBmaWxsUGF0aChjb25zdCBQYXRoJikKKyAgICAgICAgc3Ry
b2tlUGF0aCgpIC0+IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpCisgICAgICAgIGNsaXBQYXRoKFdp
bmRSdWxlKSAtPiBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpCisKKyAgICAgICAgZHJh
d1BhdGgoKSB3YXMgb25seSB1c2VkIGJ5IENHLCBzbyBtYWRlIGl0IFBMQVRGT1JNKENHKSBzcGVj
aWZpYy4KKworICAgICAgICBUaGUgUXQsIENHIGFuZCBDYWlybyBpbXBsZW1lbnRhdGlvbnMgYXJl
IGJlc3QtZWZmb3J0LgorICAgICAgICBGb3IgdGhlIHJlc3QsIEkndmUgcHV0IGJlZ2luUGF0aC9h
ZGRQYXRoIGFuZCBGSVhNRXMgaW4gdGhlIHRocmVlIGFmZmVjdGVkIG1ldGhvZHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpmaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c3Ryb2tlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkKToKKyAgICAgICAgKiBtYXRobWwvUmVu
ZGVyTWF0aE1MUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290Ojpw
YWludCk6CisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6YWRkQ29udmV4UG9seWdvblRv
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4
dE9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZHJhd0JveFNp
ZGVGcm9tUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZTo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBwaW5nKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBv
cnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpmaWxsQW5k
U3Ryb2tlUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlc3RvcmVHcmFw
aGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxp
bmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKwogMjAxMC0xMS0z
MCAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
biBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZjQwMGMwNi4uMzBhYTUyNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CkBAIC0zNTgsOSArMzU4LDggQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVS
S05TXzRQYXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05TXzlGbG9h
dFJlY3RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRzYXZlRXYKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0NXNjYWxlRVJLTlNfOUZsb2F0U2l6ZUUKLV9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0N2FkZFBhdGhFUktOU180UGF0aEUKIF9fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0N3Jlc3RvcmVFdgotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFBh
dGhFdgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFBhdGhFUktOU180UGF0aEUK
IF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfOUZsb2F0UmVjdEUK
IF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfOUZsb2F0UmVjdEVS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDlzZXRTaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VF
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
aW5kZXggYjlmODZjZS4uZWI1NTJjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtODEzLDkgKzgxMyw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFt
X3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIGMtPmJlZ2luUGF0aCgpOwotICAgICAgICBjLT5h
ZGRQYXRoKG1fcGF0aCk7Ci0gICAgICAgIGMtPmZpbGxQYXRoKCk7CisgICAgICAgIGMtPmZpbGxQ
YXRoKG1fcGF0aCk7CiAgICAgICAgIGRpZERyYXcobV9wYXRoLmJvdW5kaW5nUmVjdCgpKTsKICAg
ICB9CiAKQEAgLTgzMyw5ICs4MzEsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c3Ryb2tlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGMtPmJlZ2luUGF0aCgpOwotICAgICAgICBjLT5hZGRQYXRoKG1fcGF0aCk7Ci0K
ICNpZiBQTEFURk9STShRVCkKICAgICAgICAgLy8gRmFzdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBz
dHJva2UncyBib3VuZGluZyByZWN0LgogICAgICAgICAvLyBUaGlzIHlpZWxkcyBhIHNsaWdodGx5
IG92ZXJzaXplZCByZWN0IGJ1dCBpcyB2ZXJ5IGZhc3QKQEAgLTg0Niw3ICs4NDEsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAgICAgQ2FudmFzU3Ryb2tl
U3R5bGVBcHBsaWVyIHN0cm9rZUFwcGxpZXIodGhpcyk7CiAgICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ1JlY3QgPSBtX3BhdGguc3Ryb2tlQm91bmRpbmdSZWN0KCZzdHJva2VBcHBsaWVyKTsKICNl
bmRpZgotICAgICAgICBjLT5zdHJva2VQYXRoKCk7CisgICAgICAgIGMtPnN0cm9rZVBhdGgobV9w
YXRoKTsKICAgICAgICAgZGlkRHJhdyhib3VuZGluZ1JlY3QpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA5MjI4MmU0Li5lZDMxOWYzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTUzNywyMSAr
MTUzNywxOCBAQCBzdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjbwogICAgIC8vIG9mIG91dGxpbmUgKGJl
Y2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJkKQogICAgIHsKICAgICAgICAgY29udGV4dC5z
YXZlKCk7Ci0gICAgICAgIGNvbnRleHQuYWRkUGF0aChxdWFkUGF0aCk7CiAgICAgICAgIGNvbnRl
eHQuY2xpcE91dChxdWFkUGF0aCk7CiAKLSAgICAgICAgY29udGV4dC5hZGRQYXRoKHF1YWRQYXRo
KTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVzcyk7
CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKCk7CisgICAgICAgIGNvbnRl
eHQuc3Ryb2tlUGF0aChxdWFkUGF0aCk7CiAKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CiAg
ICAgfQogCiAgICAgLy8gTm93IGRvIHRoZSBmaWxsCi0gICAgY29udGV4dC5hZGRQYXRoKHF1YWRQ
YXRoKTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwotICAgIGNvbnRleHQuZmlsbFBhdGgoKTsKKyAgICBjb250ZXh0LmZpbGxQYXRoKHF1
YWRQYXRoKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1
YWQmIGNsaXBRdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcAppbmRleCBiYTYwYzlmLi5mMGE3YWJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAorKysgYi9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcApAQCAtMTY3LDkgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFp
bnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICAvLyBkcmF3IHRvIGVuZAog
ICAgIHJvb3QuYWRkTGluZVRvKGxlZnRFbmQpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+YmVn
aW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKHJvb3QpOwotICAgIGluZm8uY29u
dGV4dC0+c3Ryb2tlUGF0aCgpOworICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aChyb290KTsK
ICAgICAKICAgICBpbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICAKQEAgLTE4MSw4ICsxNzksNiBA
QCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgaW50IHR4LCBp
bnQgdHkpCiAgICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7CiAgICAgbWFzay5hZGRMaW5lVG8o
RmxvYXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgp
IC0gbGVmdEVuZC55KCkpKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmJlZ2luUGF0aCgpOwot
ICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChtYXNrKTsKICAgICBpbmZvLmNvbnRleHQtPmNsaXAo
bWFzayk7CiAgICAgCiAgICAgLy8gRHJhdyB0aGUgdGhpY2sgcGFydCBvZiB0aGUgcm9vdC4KQEAg
LTE5Myw5ICsxODksNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYg
aW5mbywgaW50IHR4LCBpbnQgdHkpCiAgICAgbGluZS5tb3ZlVG8oYm90dG9tTGVmdCk7CiAgICAg
bGluZS5hZGRMaW5lVG8odG9wTGVmdCk7CiAKLSAgICBpbmZvLmNvbnRleHQtPmJlZ2luUGF0aCgp
OwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChsaW5lKTsKLSAgICBpbmZvLmNvbnRleHQtPnN0
cm9rZVBhdGgoKTsKKyAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgobGluZSk7CiAgICAgCiAg
ICAgaW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL21h
dGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBiL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1h
dGhNTFNxdWFyZVJvb3QuY3BwCmluZGV4IDg2MmQ4YTQuLjEyODVhY2QgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCisrKyBiL1dlYkNvcmUvbWF0
aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCkBAIC0xMzIsMTAgKzEzMiw4IEBAIHZvaWQg
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGlu
dCB0eSkKICAgICByb290LmFkZExpbmVUbyh0b3BMZWZ0KTsKICAgICAvLyBkcmF3IHRvIGVuZAog
ICAgIHJvb3QuYWRkTGluZVRvKGxlZnRFbmQpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+YmVn
aW5QYXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKHJvb3QpOwotICAgIGluZm8uY29u
dGV4dC0+c3Ryb2tlUGF0aCgpOworCisgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKHJvb3Qp
OwogICAgIAogICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIApAQCAtMTQ3LDggKzE0NSw2
IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBp
bnQgdHgsIGludCB0eSkKICAgICBtYXNrLmFkZExpbmVUbyh0b3BMZWZ0KTsKICAgICBtYXNrLmFk
ZExpbmVUbyhGbG9hdFBvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICogdG9w
TGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+YmVnaW5Q
YXRoKCk7Ci0gICAgaW5mby5jb250ZXh0LT5hZGRQYXRoKG1hc2spOwogICAgIGluZm8uY29udGV4
dC0+Y2xpcChtYXNrKTsKICAgICAKICAgICAvLyBEcmF3IHRoZSB0aGljayBwYXJ0IG9mIHRoZSBy
b290LgpAQCAtMTU5LDkgKzE1NSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFp
bnQoUGFpbnRJbmZvJiBpbmZvLCBpbnQgdHgsIGludCB0eSkKICAgICBsaW5lLm1vdmVUbyhib3R0
b21MZWZ0KTsKICAgICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0KTsKICAgICAKLSAgICBpbmZvLmNv
bnRleHQtPmJlZ2luUGF0aCgpOwotICAgIGluZm8uY29udGV4dC0+YWRkUGF0aChsaW5lKTsKLSAg
ICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBh
dGgobGluZSk7CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA2YWRjOTBiLi45
NDI1YmY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTEyNyw3ICsxMjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBLVVJM
OwotICAgIGNsYXNzIFBhdGg7CiAgICAgY2xhc3MgUGF0dGVybjsKICAgICBjbGFzcyBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwpAQCAtMTk2LDYgKzE5NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBQTEFURk9STShDRykKICAgICAgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKTsKICAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CisgICAg
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogI2VuZGlmCiAKICAgICAgICAgdm9pZCBz
YXZlKCk7CkBAIC0yMTAsOSArMjEwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3Q29udmV4
UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBzaG91bGRB
bnRpYWxpYXMgPSBmYWxzZSk7CiAKLSAgICAgICAgdm9pZCBkcmF3UGF0aCgpOwotICAgICAgICB2
b2lkIGZpbGxQYXRoKCk7Ci0gICAgICAgIHZvaWQgc3Ryb2tlUGF0aCgpOworICAgICAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICAgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBh
dGgmKTsKIAogICAgICAgICAvLyBBcmMgZHJhd2luZyAodXNlZCBieSBib3JkZXItcmFkaXVzIGlu
IENTUykganVzdCBzdXBwb3J0cyBzdHJva2luZyBhdCB0aGUgbW9tZW50LgogICAgICAgICB2b2lk
IHN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4p
OwpAQCAtMjUzLDcgKzI1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBh
ZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiwgaW50IHRoaWNrbmVzcyk7CiAg
ICAgICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xpcE91
dFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25z
dCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50
U2l6ZSYgYm90dG9tUmlnaHQpOwotICAgICAgICB2b2lkIGNsaXBQYXRoKFdpbmRSdWxlKTsKKyAg
ICAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOwogICAgICAgICB2b2lk
IGNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBi
b29sIGFudGlhbGlhcyA9IHRydWUpOwogICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKQEAgLTMwMiw4ICszMDEsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yKTsKIAorI2lmIFBMQVRGT1JNKFNLSUEpIHx8IFBMQVRGT1JNKFdYKSB8
fCBQTEFURk9STShPUEVOVkcpIHx8IE9TKFdJTkNFKQogICAgICAgICB2b2lkIGJlZ2luUGF0aCgp
OwogICAgICAgICB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOworI2VuZGlmCiAKICAgICAgICAg
dm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKIApAQCAtMzkzLDcgKzM5NCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBib29sIGluVHJhbnNwYXJlbmN5
TGF5ZXIoKSBjb25zdDsKLSAgICAgICAgUGxhdGZvcm1QYXRoKiBjdXJyZW50UGF0aCgpOwogICAg
ICAgICB2b2lkIHB1c2hUcmFuc3BhcmVuY3lMYXllckludGVybmFsKGNvbnN0IFFSZWN0ICZyZWN0
LCBxcmVhbCBvcGFjaXR5LCBRUGl4bWFwJiBhbHBoYU1hc2spOwogICAgICAgICB2b2lkIHRha2VP
d25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICBzdGF0aWMgUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZSB0b1F0Q29tcG9zaXRpb25Nb2RlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRl
LmgKaW5kZXggOTg1Y2FkOS4uNjk2OTMyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNs
dWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IlBhdHRlcm4uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTc5LDggKzc4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogI2lmIFBMQVRGT1JNKENBSVJPKQog
ICAgICAgICBmbG9hdCBnbG9iYWxBbHBoYTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXRoVHJhbnNmb3JtOwogI2VuZGlmCiAgICAgfTsKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAppbmRleCAxMDMyZGMyLi45YzJmZjgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAt
NTMxLDQ0ICs1MzEsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29u
KHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAgICBjYWlyb19zZXRf
ZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLQotICAgIHNldFBhdGhPbkNhaXJvQ29udGV4
dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQoKSk7CisgICAgc2V0UGF0aE9uQ2Fp
cm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwogICAgIGZpbGxD
dXJyZW50Q2Fpcm9QYXRoKHRoaXMsIG1fY29tbW9uLCBjcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwotICAgIHNldFBhdGhPbkNh
aXJvQ29udGV4dChjciwgbV9kYXRhLT5tX3BlbmRpbmdQYXRoLmNvbnRleHQoKSk7CisgICAgc2V0
UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOwog
ICAgIHN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcywgbV9jb21tb24sIGNyKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7Ci0K
LSAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsIG1fZGF0YS0+bV9wZW5kaW5nUGF0aC5jb250
ZXh0KCkpOwotCi0gICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgZmlsbFJ1bGUoKSA9PSBSVUxF
X0VWRU5PREQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lO
RElORyk7Ci0gICAgZHJhd1BhdGhTaGFkb3codGhpcywgbV9jb21tb24sIEZpbGxBbmRTdHJva2Up
OwotCi0gICAgc2V0UGxhdGZvcm1GaWxsKHRoaXMsIGNyLCBtX2NvbW1vbik7Ci0gICAgc2V0UGxh
dGZvcm1TdHJva2UodGhpcywgY3IsIG1fY29tbW9uKTsKLSAgICBjYWlyb19uZXdfcGF0aChjcik7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTYwNywxMiArNTg5LDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBt
X2RhdGEtPmNsaXAocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChX
aW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7Cisg
ICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0
KCkpOwogICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIGNsaXBSdWxlID09IFJVTEVfRVZFTk9E
RCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsK
ICAgICBjYWlyb19jbGlwKGNyKTsKIH0KQEAgLTk5NCwyNSArOTc3LDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKICAg
ICBjYWlyb19zZXRfb3BlcmF0b3IobV9kYXRhLT5jciwgdG9DYWlyb09wZXJhdG9yKG9wKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX25ld19wYXRoKG1fZGF0
YS0+bV9wZW5kaW5nUGF0aC5jb250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX21hdHJpeF90IGN1cnJlbnRNYXRyaXg7Ci0g
ICAgY2Fpcm9fZ2V0X21hdHJpeChtX2RhdGEtPmNyLCAmY3VycmVudE1hdHJpeCk7Ci0gICAgY2Fp
cm9fc2V0X21hdHJpeChtX2RhdGEtPm1fcGVuZGluZ1BhdGguY29udGV4dCgpLCAmY3VycmVudE1h
dHJpeCk7Ci0gICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChtX2RhdGEtPm1fcGVu
ZGluZ1BhdGguY29udGV4dCgpLCBwYXRoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDYWlyby5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCmluZGV4IDUyN2NiNzIuLjQ5NGI0
MGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgKQEAgLTI3LDcg
KzI3LDYgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiQ2Fp
cm9QYXRoLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgPGNhaXJvLmg+
CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtOTcsNyArOTYsNiBAQCBwdWJsaWM6CiAKICAgICBjYWly
b190KiBjcjsKICAgICBWZWN0b3I8ZmxvYXQ+IGxheWVyczsKLSAgICBDYWlyb1BhdGggbV9wZW5k
aW5nUGF0aDsKIAogICAgIENvbnRleHRTaGFkb3cgc2hhZG93OwogICAgIFZlY3RvcjxDb250ZXh0
U2hhZG93PiBzaGFkb3dTdGFjazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggOGQ3MmI4NS4uYTg0OGNkZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAg
LTI5OSwyMSArMjk5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJ
bnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogLy8gVGhpcyBtZXRob2Qg
aXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICAvLyBGSVhNRTogQ0cgYWRkZWQgQ0dDb250ZXh0QWRkRWxsaXBzZWluUmVjdCBpbiBUaWdl
ciwgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gcXVpdGUgZWFzaWx5IGRyYXcgYW4gZWxsaXBzZS4K
LSAgICAvLyBUaGlzIGNvZGUgY2FuIG9ubHkgaGFuZGxlIGNpcmNsZXMsIG5vdCBlbGxpcHNlcy4g
QnV0IGtodG1sIG9ubHkKLSAgICAvLyB1c2VzIGl0IGZvciBjaXJjbGVzLgotICAgIEFTU0VSVChy
ZWN0LndpZHRoKCkgPT0gcmVjdC5oZWlnaHQoKSk7Ci0KICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOwotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBmbG9h
dCByID0gKGZsb2F0KXJlY3Qud2lkdGgoKSAvIDI7Ci0gICAgQ0dDb250ZXh0QWRkQXJjKGNvbnRl
eHQsIHJlY3QueCgpICsgciwgcmVjdC55KCkgKyByLCByLCAwLjBmLCAyLjBmICogcGlGbG9hdCwg
MCk7Ci0gICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwotCi0gICAgZHJhd1BhdGgoKTsK
KyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOworICAgIGRyYXdQYXRo
KHBhdGgpOwogfQogCiAKQEAgLTQwNSwxMyArMzk2LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmds
ZVNwCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAotc3RhdGljIHZv
aWQgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgc2l6ZV90
IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorc3RhdGljIHZvaWQgYWRkQ29u
dmV4UG9seWdvblRvUGF0aChQYXRoJiBwYXRoLCBzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMpCiB7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAg
IENHQ29udGV4dE1vdmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1swXS54KCksIHBvaW50c1swXS55
KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyBpKyspCi0gICAgICAg
IENHQ29udGV4dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1tpXS54KCksIHBvaW50c1tp
XS55KCkpOwotICAgIENHQ29udGV4dENsb3NlUGF0aChjb250ZXh0KTsKKyAgICBBU1NFUlQobnVt
UG9pbnRzID4gMCk7CisKKyAgICBwYXRoLm1vdmVUbyhwb2ludHNbMF0pOworICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyArK2kpCisgICAgICAgIHBhdGguYWRkTGluZVRvKHBv
aW50c1tpXSk7CisgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50
KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCkBAIC00MjcsOCArNDE5LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMKICAgICBpZiAoYW50aWFsaWFzZWQgIT0gc2hvdWxkQW50aWFsaWFzKCkp
CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBhbnRpYWxpYXNl
ZCk7CiAKLSAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNvbnRleHQsIG5wb2ludHMsIHBv
aW50cyk7Ci0gICAgZHJhd1BhdGgoKTsKKyAgICBQYXRoIHBhdGg7CisgICAgYWRkQ29udmV4UG9s
eWdvblRvUGF0aChwYXRoLCBucG9pbnRzLCBwb2ludHMpOworICAgIGRyYXdQYXRoKHBhdGgpOwog
CiAgICAgaWYgKGFudGlhbGlhc2VkICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFzKCkpOwpAQCAt
NDQ2LDkgKzQzOSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24o
c2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbgogCiAgICAgaWYgKGFudGlh
bGlhcyAhPSBzaG91bGRBbnRpYWxpYXMoKSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50
aWFsaWFzKGNvbnRleHQsIGFudGlhbGlhcyk7Ci0gICAgCi0gICAgYWRkQ29udmV4UG9seWdvblRv
Q29udGV4dChjb250ZXh0LCBudW1Qb2ludHMsIHBvaW50cyk7Ci0gICAgY2xpcFBhdGgoUlVMRV9O
T05aRVJPKTsKKworICAgIFBhdGggcGF0aDsKKyAgICBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKHBh
dGgsIG51bVBvaW50cywgcG9pbnRzKTsKKyAgICBjbGlwUGF0aChwYXRoLCBSVUxFX05PTlpFUk8p
OwogCiAgICAgaWYgKGFudGlhbGlhcyAhPSBzaG91bGRBbnRpYWxpYXMoKSkKICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHNob3VsZEFudGlhbGlhcygpKTsKQEAg
LTUxMSw3ICs1MDUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDR1BhdAogICAgIHJldHVybiBzaG91
bGRGaWxsIHx8IHNob3VsZFN0cm9rZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyMSwx
MSArNTE1LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCiAKICAgICBpZiAo
c3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAgICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBhIHBhdGgg
dXNpbmcgZ3JhZGllbnRzCi0gICAgICAgIGZpbGxQYXRoKCk7Ci0gICAgICAgIHN0cm9rZVBhdGgo
KTsKKyAgICAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICAgICAgZmls
bFBhdGgocGF0aCk7CisgICAgICAgIHN0cm9rZVBhdGgocGF0aCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0
QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwogICAgIGlmIChzdGF0ZS5m
aWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogICAgIGlmIChzdGF0ZS5z
dHJva2VQYXR0ZXJuKQpAQCAtNTQ0LDEzICs1NDIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIGZp
bGxQYXRoV2l0aEZpbGxSdWxlKENHQ29udGV4dFJlZiBjb250ZXh0LCBXaW5kUnVsZSBmaWxsUnVs
ZSkKICAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwog
CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4dEFkZFBhdGgo
Y29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisKICAgICBpZiAobV9jb21tb24tPnN0YXRl
LmZpbGxHcmFkaWVudCkgewogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwog
ICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCkBAIC01NjgsMTMgKzU2OSwx
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgIGZpbGxQYXRoV2l0aEZp
bGxSdWxlKGNvbnRleHQsIGZpbGxSdWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKKyAgICBD
R0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKwogICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
R3JhZGllbnQpIHsKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAg
ICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CkBAIC02NDMs
OCArNjQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKIAogICAgIFBhdGggcGF0aDsKICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0
LCBib3R0b21SaWdodCk7Ci0gICAgYWRkUGF0aChwYXRoKTsKLSAgICBmaWxsUGF0aCgpOworICAg
IGZpbGxQYXRoKHBhdGgpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvciB8fCBvbGRD
b2xvclNwYWNlICE9IGNvbG9yU3BhY2UpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQs
IG9sZEZpbGxDb2xvciwgb2xkQ29sb3JTcGFjZSk7CkBAIC02NjksMTkgKzY3MiwyMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIENHQ29u
dGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIUNHQ29udGV4dElzUGF0aEVtcHR5KGNvbnRleHQpKSB7
Ci0gICAgICAgIGlmIChjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQpCi0gICAgICAgICAgICBDR0Nv
bnRleHRFT0NsaXAoY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENHQ29udGV4
dENsaXAoY29udGV4dCk7Ci0gICAgfQorICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5w
bGF0Zm9ybVBhdGgoKSk7CisKKyAgICBpZiAoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REKQorICAg
ICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CisgICAgZWxzZQorICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3Vu
ZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKQEAgLTg2Mywx
NiArODcwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpv
aW4pCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKLXsKLSAg
ICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIENHQ29udGV4dEFk
ZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotfQotCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCmluZGV4IDA1MDEyZTguLjdkZGEyNDUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0
SGFpa3UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3ND
b250ZXh0SGFpa3UuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xl
U3AKICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUsIGFuZ2xl
U3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTE5MSwxNyArMTkxLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRTaXplJiB0b3BMZWYKICAgICAvLyBGaWxsUmVjdCBhbmQgRmlsbEFyYyBjYWxscyBh
cmUgbmVlZGVkLgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
ZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcu
Y3BwCmluZGV4IDBkMTZkNGQuLjA0YTVlMjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvR3JhcGhpY3NDb250ZXh0T3BlblZHLmNwcApAQCAtMTM5
LDI4ICsxMzksMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW4KICAgICBVTlVTRURfUEFSQU0o
c2hvdWxkQW50aWFsaWFzKTsgLy8gRklYTUUKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7CisgICAg
YWRkUGF0aChwYXRoKTsKKwogICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfRklMTF9QQVRILCBtX2Nv
bW1vbi0+c3RhdGUuZmlsbFJ1bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZGF0YS0+ZHJhd1BhdGgoVkdfU1RST0tFX1BBVEgsIG1fY29tbW9uLT5zdGF0ZS5maWxsUnVs
ZSk7Ci19CisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBh
dGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bh
dGgoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fZGF0YS0+ZHJhd1BhdGgoVkdfRklMTF9QQVRIIHwgVkdfU1RST0tFX1BBVEgsIG1fY29t
bW9uLT5zdGF0ZS5maWxsUnVsZSk7CisgICAgbV9kYXRhLT5kcmF3UGF0aChWR19TVFJPS0VfUEFU
SCwgbV9jb21tb24tPnN0YXRlLmZpbGxSdWxlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTIyMSwxMSArMjIxLDE1IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBtX2Rh
dGEtPmludGVyc2VjdENsaXBSZWN0KHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgoV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0
ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBhdGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOworCiAg
ICAgbV9kYXRhLT5jbGlwUGF0aCgqKG1fZGF0YS0+Y3VycmVudFBhdGgoKSksIFBhaW50ZXJPcGVu
Vkc6OkludGVyc2VjdENsaXAsIGNsaXBSdWxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA4NmRhYmUxLi4zZDhl
YjNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcApAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQZW4u
aCIKICNpbmNsdWRlICJUcmFuc3BhcmVuY3lMYXllci5oIgogCiAjaW5jbHVkZSA8UUJydXNoPgpA
QCAtMjAxLDkgKzIwMCw2IEBAIHB1YmxpYzoKIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CiAKLSAgICAvLyBPbmx5IHVzZWQgYnkgU1ZHIGZvciBu
b3cuCi0gICAgUVBhaW50ZXJQYXRoIGN1cnJlbnRQYXRoOwotCiAgICAgQ29udGV4dFNoYWRvdyBz
aGFkb3c7CiAgICAgUVN0YWNrPENvbnRleHRTaGFkb3c+IHNoYWRvd1N0YWNrOwogCkBAIC0yMTIs
MTMgKzIwOCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNoYWRvdy5tX3R5cGUgIT0gQ29u
dGV4dFNoYWRvdzo6Tm9TaGFkb3c7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgY2xlYXJDdXJy
ZW50UGF0aCgpCi0gICAgewotICAgICAgICBpZiAoIWN1cnJlbnRQYXRoLmVsZW1lbnRDb3VudCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjdXJyZW50UGF0aCA9IFFQYWludGVyUGF0
aCgpOwotICAgIH0KLQogICAgIFFSZWN0RiBjbGlwQm91bmRpbmdSZWN0KCkgY29uc3QKICAgICB7
CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgsIDApCkBAIC0zMTksMTEg
KzMwOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiAK
ICAgICBtX2RhdGEtPnAoKS0+cmVzdG9yZSgpOwogCi0gICAgaWYgKCFtX2RhdGEtPmN1cnJlbnRQ
YXRoLmlzRW1wdHkoKSAmJiBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkgewotICAgICAgICBRVHJhbnNmb3JtIG1hdHJpeCA9IG1fY29tbW9uLT5zdGF0ZS5wYXRo
VHJhbnNmb3JtOwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50
UGF0aCAqIG1hdHJpeDsKLSAgICB9Ci0KICAgICBpZiAobV9kYXRhLT5zaGFkb3dTdGFjay5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdygpOwogICAgIGVs
c2UKQEAgLTUxNCwxNCArNDk4LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4
UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2luCiAgICAgICAg
IHAtPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgcGFpbnRlcldhc0FudGlh
bGlhc2VkKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFQYWludGVyKiBwID0gbV9k
YXRhLT5wKCk7Ci0gICAgUVBhaW50ZXJQYXRoJiBwYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aDsg
Ly8gQXZvaWQgZGV0YWNoaW5nIHRoZSBRUGFpbnRlclBhdGgKLSAgICBwYXRoLnNldEZpbGxSdWxl
KHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CisgICAgUVBhaW50ZXJQYXRoIHBsYXRmb3JtUGF0
aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxSdWxlKHRv
UXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkg
ewogICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CkBAIC01
MzUsMTkgKzUxOSwxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogICAgICAg
ICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHJlbGF0aXZlIG9mZnNldCB0byBpdHMgc2hhcGUgaXMg
a2VwdC4KICAgICAgICAgICAgICAgICBRUG9pbnRGIHRyYW5zbGF0ZWRPZmZzZXQob2Zmc2V0Lngo
KSAvIHRyYW5zZm9ybS5tMTEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0LnkoKSAvIHRyYW5zZm9ybS5tMjIoKSk7Ci0gICAgICAgICAgICAgICAgcGF0
aC50cmFuc2xhdGUodHJhbnNsYXRlZE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcC0+ZmlsbFBh
dGgocGF0aCwgUUNvbG9yKHNoYWRvdy0+bV9jb2xvcikpOwotICAgICAgICAgICAgICAgIHBhdGgu
dHJhbnNsYXRlKC10cmFuc2xhdGVkT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybVBh
dGgudHJhbnNsYXRlKHRyYW5zbGF0ZWRPZmZzZXQpOworICAgICAgICAgICAgICAgIHAtPmZpbGxQ
YXRoKHBsYXRmb3JtUGF0aCwgUUNvbG9yKHNoYWRvdy0+bV9jb2xvcikpOworICAgICAgICAgICAg
ICAgIHBsYXRmb3JtUGF0aC50cmFuc2xhdGUoLXRyYW5zbGF0ZWRPZmZzZXQpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUob2Zmc2V0KTsKLSAgICAg
ICAgICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQ29sb3Ioc2hhZG93LT5tX2NvbG9yKSk7Cisg
ICAgICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBRQ29sb3Ioc2hhZG93LT5t
X2NvbG9yKSk7CiAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1vZmZzZXQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIocCwgcGF0aC5jb250cm9sUG9pbnRSZWN0
KCkpOworICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIocCwgcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKSk7CiAgICAgICAg
ICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0g
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGF0aCwgUUNvbG9yKG1fZGF0
YS0+c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxs
UGF0aChwbGF0Zm9ybVBhdGgsIFFDb2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7CiAgICAg
ICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihwKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtNTU1LDI2ICs1MzksMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKCkKICAgICB9CiAgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikgewogICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBR
QnJ1c2gobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
YWZmaW5lKSkpOworICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX2Nv
bW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihhZmZpbmUpKSk7
CiAgICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAg
IFFCcnVzaCBicnVzaCgqbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFk
aWVudCgpKTsKICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxs
R3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIHAtPmZpbGxQYXRo
KHBhdGgsIGJydXNoKTsKKyAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBicnVzaCk7
CiAgICAgfSBlbHNlCi0gICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIHAtPmJydXNoKCkpOwotCi0g
ICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7CisgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRm
b3JtUGF0aCwgcC0+YnJ1c2goKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAgICBRUGVuIHBlbihwLT5wZW4oKSk7Ci0gICAg
UVBhaW50ZXJQYXRoJiBwYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aDsgLy8gQXZvaWQgZGV0YWNo
aW5nIHRoZSBRUGFpbnRlclBhdGgKLSAgICBwYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShm
aWxsUnVsZSgpKSk7CisgICAgUVBhaW50ZXJQYXRoIHBsYXRmb3JtUGF0aCA9IHBhdGgucGxhdGZv
cm1QYXRoKCk7CisgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxs
UnVsZSgpKSk7CiAKICAgICBpZiAobV9kYXRhLT5oYXNTaGFkb3coKSkgewogICAgICAgICBDb250
ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CkBAIC01OTEsMjEgKzU3MywyMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCiAgICAgICAgICAgICAgICAgLy8g
c28gdGhhdCB0aGUgcmVsYXRpdmUgb2Zmc2V0IHRvIGl0cyBzaGFwZSBpcyBrZXB0LgogICAgICAg
ICAgICAgICAgIFFQb2ludEYgdHJhbnNsYXRlZE9mZnNldChvZmZzZXQueCgpIC8gdHJhbnNmb3Jt
Lm0xMSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQu
eSgpIC8gdHJhbnNmb3JtLm0yMigpKTsKLSAgICAgICAgICAgICAgICBwYXRoLnRyYW5zbGF0ZSh0
cmFuc2xhdGVkT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHNo
YWRvd1Blbik7Ci0gICAgICAgICAgICAgICAgcGF0aC50cmFuc2xhdGUoLXRyYW5zbGF0ZWRPZmZz
ZXQpOworICAgICAgICAgICAgICAgIHBsYXRmb3JtUGF0aC50cmFuc2xhdGUodHJhbnNsYXRlZE9m
ZnNldCk7CisgICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRv
d1Blbik7CisgICAgICAgICAgICAgICAgcGxhdGZvcm1QYXRoLnRyYW5zbGF0ZSgtdHJhbnNsYXRl
ZE9mZnNldCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHAtPnRyYW5z
bGF0ZShvZmZzZXQpOwotICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgc2hhZG93
UGVuKTsKKyAgICAgICAgICAgICAgICBwLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93
UGVuKTsKICAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLW9mZnNldCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0
ID0gcGF0aC5jb250cm9sUG9pbnRSZWN0KCk7CisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRp
bmdSZWN0ID0gcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKTsKICAgICAgICAgICAgIGJv
dW5kaW5nUmVjdC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkgKyBwZW4ud2lkdGhGKCkpOwogICAg
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIocCwgYm91bmRpbmdSZWN0KTsKICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAg
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVh
bD4obV9kYXRhLT5zaGFkb3cubV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7Ci0gICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aChwYXRoLCBwZW4pOworICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwogICAgICAgICAg
ICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIocCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTYxNSwxNiArNTk3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KCkKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKICAgICAgICAgcGVuLnNldEJydXNo
KFFCcnVzaChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0
ZXJuKGFmZmluZSkpKTsKICAgICAgICAgcC0+c2V0UGVuKHBlbik7Ci0gICAgICAgIHAtPnN0cm9r
ZVBhdGgocGF0aCwgcGVuKTsKKyAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBl
bik7CiAgICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKICAg
ICAgICAgUUJydXNoIGJydXNoKCptX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRm
b3JtR3JhZGllbnQoKSk7CiAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBl
bi5zZXRCcnVzaChicnVzaCk7CiAgICAgICAgIHAtPnNldFBlbihwZW4pOwotICAgICAgICBwLT5z
dHJva2VQYXRoKHBhdGgsIHBlbik7CisgICAgICAgIHAtPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRo
LCBwZW4pOwogICAgIH0gZWxzZQotICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHBlbik7Ci0g
ICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7CisgICAgICAgIHAtPnN0cm9rZVBhdGgocGxh
dGZvcm1QYXRoLCBwZW4pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlcGVhdFBhdHRl
cm4oUVBhaW50ZXIqIHAsIFFQaXhtYXAqIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IGJvb2wgcmVwZWF0WCwgY29uc3QgYm9vbCByZXBlYXRZKQpAQCAtODExLDMwICs3OTIsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3Jt
UGF0aCgpLCBRQ29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2lu
UGF0aCgpCi17Ci0gICAgbV9kYXRhLT5jbGVhckN1cnJlbnRQYXRoKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKCFtX2Rh
dGEtPmN1cnJlbnRQYXRoLmVsZW1lbnRDb3VudCgpKSB7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVu
dFBhdGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1fZGF0YS0+Y3VycmVudFBhdGguYWRkUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLX0KLQog
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAogewogICAg
IHJldHVybiBtX2RhdGEtPmxheWVyQ291bnQ7CiB9CiAKLVBsYXRmb3JtUGF0aCogR3JhcGhpY3ND
b250ZXh0OjpjdXJyZW50UGF0aCgpCi17Ci0gICAgcmV0dXJuICZtX2RhdGEtPmN1cnJlbnRQYXRo
OwotfQotCiBDb250ZXh0U2hhZG93KiBHcmFwaGljc0NvbnRleHQ6OmNvbnRleHRTaGFkb3coKQog
ewogICAgIHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CkBAIC04NDgsMTUgKzgxMCwxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9kYXRh
LT5wKCktPnNldENsaXBSZWN0KHJlY3QsIFF0OjpJbnRlcnNlY3RDbGlwKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFQ
YWludGVyKiBwID0gbV9kYXRhLT5wKCk7Ci0gICAgUVBhaW50ZXJQYXRoIG5ld1BhdGggPSBtX2Rh
dGEtPmN1cnJlbnRQYXRoOwotICAgIG5ld1BhdGguc2V0RmlsbFJ1bGUoY2xpcFJ1bGUgPT0gUlVM
RV9FVkVOT0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKLSAgICBwLT5z
ZXRDbGlwUGF0aChuZXdQYXRoLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CisgICAgUVBhaW50ZXJQYXRo
IHBsYXRmb3JtUGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisgICAgcGxhdGZvcm1QYXRoLnNl
dEZpbGxSdWxlKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0
OjpXaW5kaW5nRmlsbCk7CisgICAgcC0+c2V0Q2xpcFBhdGgocGxhdGZvcm1QYXRoLCBRdDo6SW50
ZXJzZWN0Q2xpcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQpAQCAtMTA4NSwxMiArMTA0NywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFQYWludGVyUGF0aCBwYXRoOworICAg
IFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAgICAgc2V0U3Ryb2tlVGhpY2tu
ZXNzKHdpZHRoKTsKLSAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gcGF0aDsKLQotICAgIHN0cm9r
ZVBhdGgoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxjKQpAQCAtMTIxMCwxMiArMTE3MCw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9kYXRhLT5wKCktPnRyYW5zbGF0ZSh4LCB5KTsKLQotICAgIGlmICghbV9kYXRh
LT5jdXJyZW50UGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUVRyYW5zZm9ybSBtYXRyaXg7Ci0g
ICAgICAgIG1fZGF0YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4
LnRyYW5zbGF0ZSgteCwgLXkpOwotICAgICAgICBtX2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9y
bS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90
YXRlKGZsb2F0IHJhZGlhbnMpCkBAIC0xMjI0LDEyICsxMTc4LDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2Rh
dGEtPnAoKS0+cm90YXRlKDE4MCAvIE1fUEkqcmFkaWFucyk7Ci0KLSAgICBpZiAoIW1fZGF0YS0+
Y3VycmVudFBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIFFUcmFuc2Zvcm0gbWF0cml4OwotICAg
ICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aCAqIG1hdHJpeC5y
b3RhdGUoLTE4MCAvIE1fUEkqcmFkaWFucyk7Ci0gICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRo
VHJhbnNmb3JtLnJvdGF0ZShyYWRpYW5zKTsKLSAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHMpCkBAIC0xMjM4LDEyICsxMTg2LDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgcykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9kYXRhLT5wKCktPnNjYWxlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Ci0K
LSAgICBpZiAoIW1fZGF0YS0+Y3VycmVudFBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIFFUcmFu
c2Zvcm0gbWF0cml4OwotICAgICAgICBtX2RhdGEtPmN1cnJlbnRQYXRoID0gbV9kYXRhLT5jdXJy
ZW50UGF0aCAqIG1hdHJpeC5zY2FsZSgxIC8gcy53aWR0aCgpLCAxIC8gcy5oZWlnaHQoKSk7Ci0g
ICAgICAgIG1fY29tbW9uLT5zdGF0ZS5wYXRoVHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzLndp
ZHRoKCksIHMuaGVpZ2h0KCkpOwotICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTEzMDAsMTUgKzEyNDIsNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFuc2Zvcm0o
dHJhbnNmb3JtLCB0cnVlKTsKLQotICAgIC8vIFRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY29udGV4
dCBzaG91bGRuJ3QgdHJhbnNmb3JtIHRoZSBjdXJyZW50UGF0aC4KLSAgICAvLyBXZSBoYXZlIHRv
IHVuZG8gZXZlcnkgY2hhbmdlIG1hZGUgdG8gdGhlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudFBh
dGgKLSAgICAvLyB0byBhdm9pZCB3cm9uZyBkcmF3aW5ncy4KLSAgICBpZiAoIW1fZGF0YS0+Y3Vy
cmVudFBhdGguaXNFbXB0eSgpICYmIHRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgewotICAgICAg
ICBRVHJhbnNmb3JtIG1hdHJpeCA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgICAgIG1fZGF0
YS0+Y3VycmVudFBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoICogbWF0cml4OwotICAgICAgICBt
X2NvbW1vbi0+c3RhdGUucGF0aFRyYW5zZm9ybS5tdWx0aXBseSh0cmFuc2Zvcm0udG9UcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpKTsKLSAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRV
UkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0JikKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAppbmRleCA3
YzBiY2QxLi42ZjZkY2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC00MjAsMTEgKzQyMCwxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwKQogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKS0+Y2xpcFBhdGgocGF0aCwgU2tSZWdpb246OmtEaWZmZXJlbmNlX09w
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxl
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb0NsaXAs
IFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAg
YmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoVG9DbGlwKTsKKwogICAgIFNrUGF0aCBwYXRo
ID0gcGxhdGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAg
ICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTcyMywxMSArNzI3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UmVjdChyKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoVG9GaWxsKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFi
b3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoVG9GaWxsKTsKKwog
ICAgIFNrUGF0aCBwYXRoID0gcGxhdGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENv
b3JkaW5hdGVzKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAg
ICAgICByZXR1cm47CkBAIC0xMTc3LDExICsxMTg1LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNw
YW4pCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWlu
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb1N0cm9rZSkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTog
QmUgc21hcnRlciBhYm91dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0
aFRvU3Ryb2tlKTsKKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZvcm1Db250ZXh0KCktPmN1cnJl
bnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRD
VE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKaW5kZXggMDgwMjgy
Ni4uNGZhYTI5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9H
cmFwaGljc0NvbnRleHRXaW5DRS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKQEAgLTEzMjUsOCArMTMyNSwxMiBAQCBDb2xv
ciBncmFkaWVudEF2ZXJhZ2VDb2xvcihjb25zdCBHcmFkaWVudCogZ3JhZGllbnQpCiAgICAgICAg
ICwgKHN0b3AuYWxwaGEgKyBsYXN0U3RvcC5hbHBoYSkgKiAwLjVmKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogeworICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMu
CisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRkUGF0aChwYXRoKTsKKwogICAgIENvbG9yIGMgPSBt
X2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50CiAgICAgICAgID8gZ3JhZGllbnRBdmVyYWdlQ29s
b3IobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSkKICAgICAgICAgOiBmaWxsQ29s
b3IoKTsKQEAgLTEzNzYsNiArMTM4MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCgpCiAgICAgaWYgKCFtX2RhdGEtPm1fZGMpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8v
IEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCisgICAgYmVnaW5QYXRoKCk7CisgICAgYWRk
UGF0aChwYXRoKTsKKwogICAgIE93blB0cjxIUEVOPiBwZW4gPSBjcmVhdGVQZW4oc3Ryb2tlQ29s
b3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwogCiAgICAgaWYgKG1fZGF0
YS0+bV9vcGFjaXR5IDwgMS4wZiB8fCBtX2RhdGEtPmhhc0FscGhhKCkpIHsKQEAgLTE5MDAsNyAr
MTkwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmLCBmbG9hdCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCmlu
ZGV4IDUwMDdmZmUuLmJhOTYzNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYpCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtNTMzLDMwICs1MzMsMzIgQEAgSW50ZXJwb2xhdGlvblF1
YWxpdHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QK
ICAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKICNpZiBVU0UoV1hHQykKKyAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91
dCB0aGlzLgorICAgIGJlZ2luUGF0aCgpOworICAgIGFkZFBhdGgocGF0aCk7CisKICAgICB3eEdy
YXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgp
OwogICAgIGlmIChnYykKICAgICAgICAgZ2MtPkZpbGxQYXRoKG1fZGF0YS0+Y3VycmVudFBhdGgp
OwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgVVNF
KFdYR0MpCisgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KKyAgICBiZWdpblBh
dGgoKTsKKyAgICBhZGRQYXRoKHBhdGgpOworCiAgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0g
bV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKICAgICBpZiAoZ2MpCiAgICAg
ICAgIGdjLT5TdHJva2VQYXRoKG1fZGF0YS0+Y3VycmVudFBhdGgpOwogI2VuZGlmCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCi17Ci0gICAgZmlsbFBhdGgoKTsKLSAgICBz
dHJva2VQYXRoKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCAxNDNjNzJjLi5iZDE5MTY1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMDY0
LDcgKzEwNjQsNiBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LAogICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmln
aHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+Y2xpcE91dFJvdW5kZWRSZWN0KGlubmVyQm9yZGVyUmVjdCwgaW5uZXJUb3BMZWZ0LCBpbm5l
clRvcFJpZ2h0LCBpbm5lckJvdHRvbUxlZnQsIGlubmVyQm90dG9tUmlnaHQpOwogICAgICAgICAg
ICAgcm91bmRlZFBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmln
aHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+YWRkUGF0aChyb3VuZGVkUGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4MDUsMTMg
KzE4MDQsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludAogICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KGhvbGVSZWN0KTsKIAotICAgICAgICAgICAgY29u
dGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOwot
CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShSVUxFX0VWRU5PREQpOwogICAgICAg
ICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgcy0+Y29sb3JTcGFjZSgpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIs
IHNoYWRvd0NvbG9yLCBzLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgY29udGV4dC0+Zmls
bFBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKHBhdGgpOwogCiAgICAgICAg
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCBiMDI1Mzk0Li4yOTRmZmVjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCkBAIC0xNjYsMTEgKzE2Niw5IEBA
IHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCB0eCwgaW50IHR5KQogICAgIAogICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICBj
b250ZXh0LT5jbGlwKGNvbnRlbnRSZWN0KTsKLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAg
ICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOyAgCiAgICAgY29udGV4dC0+c2V0QWxwaGEobV9taXNz
aW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0UHJlc3NlZFJvdW5k
ZWRSZWN0T3BhY2l0eSA6IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0T3BhY2l0eSk7CiAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZCA/
IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKCkgOiBDb2xvcjo6d2hpdGUs
IHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7Ci0gICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICBj
b250ZXh0LT5maWxsUGF0aChwYXRoKTsKIAogICAgIGZsb2F0IGxhYmVsWCA9IHJvdW5kZihyZXBs
YWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6
ZSgpLndpZHRoKCkgLSB0ZXh0V2lkdGgpIC8gMik7CiAgICAgZmxvYXQgbGFiZWxZID0gcm91bmRm
KHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVj
dC5zaXplKCkuaGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAvIDIgKyBmb250LmFzY2VudCgpKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGIwZTc0YWUuLmNhZmYzYmQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtOTU2LDggKzk1Niw3IEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBJbnRSZWN0CiAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChwYXRXaWR0aCk7CiAgICAgICAg
IGxpbmVEYXNoLmFwcGVuZCh3aGl0ZVNwYWNlV2lkdGgpOwogICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldExpbmVEYXNoKGxpbmVEYXNoLCBwYXRXaWR0aCk7Ci0gICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+YWRkUGF0aChib3JkZXJQYXRoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJv
a2VQYXRoKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlUGF0aChib3JkZXJQYXRo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIERPVUJMRTogewpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlLmgKaW5kZXggMDIzMGU5OC4uNmZjMmRhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZS5oCkBAIC00OCw2ICs0OCw3IEBAIGVudW0gUmVuZGVy
U1ZHUmVzb3VyY2VNb2RlIHsKIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworY2xhc3MgUGF0aDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNz
IFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOwpAQCAtNjEs
NyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHls
ZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdEFw
cGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNo
b3J0LCBjb25zdCBQYXRoKikgeyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3Vu
ZGluZ0JveChSZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291
cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCBlN2I5ZmJiLi4yNWVkMWMzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE1
MSw5ICsxNTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9ubHlDbGlw
cGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgLy8gVGhlIFNWRyBzcGVj
aWZpY2F0aW9uIHdhbnRzIHVzIHRvIGNsaXAgZXZlcnl0aGluZywgaWYgY2xpcC1wYXRoIGRvZXNu
J3QgaGF2ZSBhIGNoaWxkLgogICAgIGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIGNs
aXBQYXRoLmFkZFJlY3QoRmxvYXRSZWN0KCkpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwot
ICAgIGNvbnRleHQtPmFkZFBhdGgoY2xpcFBhdGgpOwotICAgIGNvbnRleHQtPmNsaXBQYXRoKGNs
aXBSdWxlKTsKKyAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlwUGF0aCwgY2xpcFJ1bGUpOwogICAg
IHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKaW5kZXggNzI4NzJmNi4uMzhkMjM1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMjU0LDcgKzI1NCw3IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFJlbmRlclN0eWxlKiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSkKK3Zv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVj
dCogb2JqZWN0LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUsIGNvbnN0IFBhdGgqKQogewogICAgIEFTU0VSVChvYmplY3QpOwogICAgIEFTU0VS
VChjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5o
CmluZGV4IDMyZjYxZWEuLjU5NTBjNDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaApAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZh
bGlkYXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRl
ck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUp
OworICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFw
aGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7
CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCopOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCmluZGV4IGE3NTcxNDcuLmI3NmU3ZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0
LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqIG9iamVjdCwgR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKQordm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgdW5zaWduZWQgc2hvcnQgcmVz
b3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKICAg
ICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CkBAIC0yNTgsMTEg
KzI1OCwxMSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBHcmFwaGljcwogI2Vsc2UKICAgICAgICAgVU5VU0VE
X1BBUkFNKG9iamVjdCk7CiAjZW5kaWYKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZSBpZiAocGF0
aCkgewogICAgICAgICBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb0ZpbGxNb2RlKQotICAgICAg
ICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxQYXRo
KCpwYXRoKTsKICAgICAgICAgZWxzZSBpZiAocmVzb3VyY2VNb2RlICYgQXBwbHlUb1N0cm9rZU1v
ZGUpCi0gICAgICAgICAgICBjb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgICAgICBjb250
ZXh0LT5zdHJva2VQYXRoKCpwYXRoKTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXgg
YmMwYjg2NC4uMWM3ZjUyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGlj
c0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7
IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCBkMmU0NTYzLi44Mzc1NGFkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKQEAg
LTE4MiwxNiArMTgyLDE2IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJl
c291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsZSoKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OnBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIHVuc2lnbmVkIHNob3J0
IHJlc291cmNlTW9kZSkKK3ZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqIHBhdGgpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIEFTU0VSVChyZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsK
IAotICAgIGlmICghKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKKyAgICBpZiAo
cGF0aCAmJiAhKHJlc291cmNlTW9kZSAmIEFwcGx5VG9UZXh0TW9kZSkpIHsKICAgICAgICAgaWYg
KHJlc291cmNlTW9kZSAmIEFwcGx5VG9GaWxsTW9kZSkKLSAgICAgICAgICAgIGNvbnRleHQtPmZp
bGxQYXRoKCk7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgqcGF0aCk7CiAgICAgICAg
IGVsc2UgaWYgKHJlc291cmNlTW9kZSAmIEFwcGx5VG9TdHJva2VNb2RlKQotICAgICAgICAgICAg
Y29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgq
cGF0aCk7CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAppbmRleCBiYTRhZWM0Li5lZTNmYjIzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaApAQCAtNTMs
NyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwg
R3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmly
dHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4
dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0
QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuY3BwCmluZGV4IDBjMDk2NTIuLjFlYjlkYTUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmNw
cApAQCAtNzUsMjggKzc1LDE3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjph
cHBseVJlc291cmNlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJTdHlsCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yOjpwb3N0QXBwbHlS
ZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUpCit2b2lkIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvcjo6
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKiBwYXRoKQogewogICAg
IEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQocmVzb3VyY2VNb2RlICE9IEFwcGx5VG9EZWZh
dWx0TW9kZSk7CiAKLSAgICBpZiAoIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7
CisgICAgaWYgKHBhdGggJiYgIShyZXNvdXJjZU1vZGUgJiBBcHBseVRvVGV4dE1vZGUpKSB7CiAg
ICAgICAgIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvRmlsbE1vZGUpCi0gICAgICAgICAgICBj
b250ZXh0LT5maWxsUGF0aCgpOworICAgICAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKnBhdGgp
OwogICAgICAgICBlbHNlIGlmIChyZXNvdXJjZU1vZGUgJiBBcHBseVRvU3Ryb2tlTW9kZSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN0
cm9rZVBhdGgoKnBhdGgpOwogICAgIH0KLQotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgLy8gRklY
TUU6IE1vdmUgdGhpcyBpbnRvIHRoZSBHcmFwaGljc0NvbnRleHQKLSAgICAvLyBXZWJLaXQgaW1w
bGljaXRseSBleHBlY3RzIHVzIHRvIHJlc2V0IHRoZSBwYXRoLgotICAgIC8vIEZvciBleGFtcGxl
IGluIGZpbGxBbmRTdHJva2VQYXRoKCkgb2YgUmVuZGVyU1ZHUGF0aC5jcHAgdGhlIHBhdGggaXMK
LSAgICAvLyBhZGRlZCBiYWNrIHRvIHRoZSBjb250ZXh0IGFmdGVyIGZpbGxpbmcuIFRoaXMgaXMg
YmVjYXVzZSBpbnRlcm5hbGx5IGl0Ci0gICAgLy8gY2FsbHMgQ0dDb250ZXh0RmlsbFBhdGgoKSB3
aGljaCBjbG9zZXMgdGhlIHBhdGguCi0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNldEZpbGxTaGFkZXIoMCk7Ci0gICAgY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnNldFN0cm9rZVNoYWRlcigwKTsKLSNlbmRpZgogfQogCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCmluZGV4
IDQ0MTA5ZGIuLjcyZGUzYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1Jlc291cmNlU29saWRDb2xvci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jl
c291cmNlU29saWRDb2xvci5oCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgPSB0cnVlKSB7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBo
aWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwg
dW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAgICAgdmlydHVhbCBG
bG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9h
dFJlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VU
eXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggNjA4Y2Y0ZC4uY2JkZTQ5YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFNWR1JlbmRl
clN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFBh
aW50SW5mbyYgcAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdChvYmplY3QpOwogICAgIGlmIChyZXNv
dXJjZXMpIHsKICAgICAgICAgaWYgKFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBy
ZXNvdXJjZXMtPmZpbHRlcigpKSB7Ci0gICAgICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJlc291
cmNlKG9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIEFwcGx5VG9EZWZhdWx0TW9kZSk7CisgICAg
ICAgICAgICBmaWx0ZXItPnBvc3RBcHBseVJlc291cmNlKG9iamVjdCwgcGFpbnRJbmZvLmNvbnRl
eHQsIEFwcGx5VG9EZWZhdWx0TW9kZSwgLyogcGF0aCAqLzApOwogICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQgPSBzYXZlZENvbnRleHQ7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggNDgzMzAzZi4uMGM4YWMwYyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtMTQ4LDE5ICsxNDgsMTcgQEAg
dm9pZCBSZW5kZXJTVkdQYXRoOjpsYXlvdXQoKQogCiB2b2lkIFJlbmRlclNWR1BhdGg6OmZpbGxB
bmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjb250ZXh0LT5i
ZWdpblBhdGgoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogCiAg
ICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQ
YWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNl
KHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewotICAgICAgICBjb250ZXh0LT5hZGRQYXRo
KG1fcGF0aCk7CiAgICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJj
ZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgIGZp
bGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBs
eVRvRmlsbE1vZGUpOworICAgICAgICAgICAgZmlsbFBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBs
eVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSwgJm1fcGF0aCk7CiAgICAg
ICAgIGVsc2UgaWYgKGZhbGxiYWNrQ29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBSZW5k
ZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CiAgICAgICAgICAgICBmYWxsYmFj
a1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKICAgICAgICAgICAgIGlmIChmYWxs
YmFja1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBBcHBseVRv
RmlsbE1vZGUpKQotICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSk7CisgICAgICAgICAgICAgICAg
ZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlU
b0ZpbGxNb2RlLCAmbV9wYXRoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTY5LDMwICsxNjcs
MzEgQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCiAgICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBQYXRoIHBhdGg7CisKKyAgICBib29sIG5vblNjYWxpbmdTdHJva2UgPSBz
dHlsZS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tF
OwogICAgIGJvb2wgcmVzdG9yZUNvbnRleHQgPSBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPnN2Z1N0
eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRSkgeworICAgIGlm
IChub25TY2FsaW5nU3Ryb2tlKSB7CiAgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQq
Pihub2RlKCkpOwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5z
Zm9ybSA9IGVsZW1lbnQtPmdldFNjcmVlbkNUTShTVkdMb2NhdGFibGU6OkRpc2FsbG93U3R5bGVV
cGRhdGUpOwogICAgICAgICBpZiAoIW5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUGF0aCB0cmFuc2Zvcm1lZFBh
dGggPSBtX3BhdGg7Ci0gICAgICAgIHRyYW5zZm9ybWVkUGF0aC50cmFuc2Zvcm0obm9uU2NhbGlu
Z1N0cm9rZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdGggPSBtX3BhdGg7CisgICAgICAgIHBhdGgu
dHJhbnNmb3JtKG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0pOwogCiAgICAgICAgIGNvbnRleHQt
PnNhdmUoKTsKICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKG5vblNjYWxpbmdTdHJva2VUcmFu
c2Zvcm0uaW52ZXJzZSgpKTsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aCh0cmFuc2Zvcm1lZFBh
dGgpOwogICAgICAgICByZXN0b3JlQ29udGV4dCA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNvbnRleHQtPmFkZFBhdGgobV9wYXRoKTsKKyAgICB9CiAKICAgICBpZiAoc3Ryb2tlUGFpbnRp
bmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0
cm9rZU1vZGUpKQotICAgICAgICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNv
dXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9kZSk7CisgICAgICAgIHN0cm9rZVBh
aW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9T
dHJva2VNb2RlLCBub25TY2FsaW5nU3Ryb2tlID8gJnBhdGggOiAmbV9wYXRoKTsKICAgICBlbHNl
IGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICBSZW5kZXJTVkdSZXNvdXJj
ZVNvbGlkQ29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVk
U29saWRQYWludGluZ1Jlc291cmNlKCk7CiAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENv
bG9yKGZhbGxiYWNrQ29sb3IpOwogICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlS
ZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpKQotICAgICAg
ICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwg
QXBwbHlUb1N0cm9rZU1vZGUpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFw
cGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIG5vblNjYWxpbmdT
dHJva2UgPyAmcGF0aCA6ICZtX3BhdGgpOwogICAgIH0KIAogICAgIGlmIChyZXN0b3JlQ29udGV4
dCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBkMWY2
NjBhLi41ZDAyNzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCkBAIC0zMTgsMTQgKzMxOCwxNCBAQCBib29sIFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQ
YWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIFJlbmRlcgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jl
c291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQpCit2b2lkIFNWR0lubGluZVRleHRCb3g6
OnJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0
IFBhdGgqIHBhdGgpCiB7CiAgICAgQVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJjZSk7CiAKICAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAg
QVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKIAotICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFw
cGx5UmVzb3VyY2UocGFyZW50UmVuZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1v
ZGUpOworICAgIG1fcGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocGFyZW50UmVu
ZGVyZXIsIGNvbnRleHQsIG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUsIHBhdGgpOwogICAgIG1fcGFp
bnRpbmdSZXNvdXJjZSA9IDA7CiB9CiAKQEAgLTM0NCw3ICszNDQsNyBAQCBib29sIFNWR0lubGlu
ZVRleHRCb3g6OnByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3ND
b250ZXh0KiYgYwogCiB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvbnRl
eHRBZnRlclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBUZXh0UnVuJiB0
ZXh0UnVuKQogewotICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQpOworICAgIHJl
bGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIC8qIHBhdGggKi8wKTsKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgdGV4dFJ1bi5zZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKDApOwpA
QCAtNTAwLDExICs1MDAsOSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlv
bldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEVUZXh0RAogICAgIHBhdGguYWRk
UmVjdChGbG9hdFJlY3QoZnJhZ21lbnQueCwgeSwgZnJhZ21lbnQud2lkdGgsIHRoaWNrbmVzcykp
OwogCiAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwotICAg
IGNvbnRleHQtPmFkZFBhdGgocGF0aCk7CiAKICAgICBpZiAoYWNxdWlyZVBhaW50aW5nUmVzb3Vy
Y2UoY29udGV4dCwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0aW9uU3R5bGUpKQotICAgICAg
ICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0KTsKKyAgICAgICAgcmVsZWFzZVBhaW50
aW5nUmVzb3VyY2UoY29udGV4dCwgJnBhdGgpOwogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKaW5kZXggOGU4MmRkYS4u
YWNjNWU5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCkBAIC02
OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRl
clN0eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CiAKICAgICBib29sIGFjcXVp
cmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBSZW5kZXJPYmplY3QqLCBSZW5k
ZXJTdHlsZSopOwotICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250
ZXh0KiYpOworICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0
KiYsIGNvbnN0IFBhdGgqKTsKIAogICAgIGJvb2wgcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRl
eHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1biYsIFJlbmRlclN0eWxlKik7CiAg
ICAgdm9pZCByZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcoR3JhcGhpY3ND
b250ZXh0KiYsIFRleHRSdW4mKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3Bw
IGIvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKaW5kZXggODk4YzI1OS4uZmZhMDFmMiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRm9udC5j
cHAKQEAgLTUzNCwxMiArNTM0LDkgQEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgICAg
ICAgICAgICAgUGF0aCBnbHlwaFBhdGggPSBpZGVudGlmaWVyLnBhdGhEYXRhOwogICAgICAgICAg
ICAgICAgICAgICBnbHlwaFBhdGgudHJhbnNmb3JtKGdseXBoUGF0aFRyYW5zZm9ybSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmFkZFBhdGgoZ2x5cGhQYXRoKTsKLQogICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSA/IHJ1bi5y
ZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpLT5zdHlsZSgpIDogMDsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UocnVuLnJlZmVyZW5j
aW5nUmVuZGVyT2JqZWN0KCksIHN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3Vy
Y2UocnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCksIGNvbnRleHQsIHJlc291cmNlTW9kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZShydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSwgY29udGV4dCwgcmVzb3Vy
Y2VNb2RlLCAmZ2x5cGhQYXRoKTsKIAogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3MDRmNzMxLi42MTk3NmIyIDEwMDY0NAotLS0gYS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEwLTExLTMwICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
IFJlbW92ZSAiY3VycmVudCBwYXRoIiBhbmQgaGF2ZSBzdHJva2VQYXRoLCBmaWxsUGF0aCBhbmQg
Y2xpcFBhdGggdGFrZSBhIFBhdGggYXJndW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTE2CisKKyAgICAgICAgKiBVSVByb2Nlc3MvRmluZElu
ZGljYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OmRyYXcpOgorCiAy
MDEwLTExLTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5k
SW5kaWNhdG9yLmNwcCBiL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCmluZGV4
IDE1OWUzZjAuLjFiYWI4NjEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRp
Y2F0b3IuY3BwCisrKyBiL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCkBAIC0x
NDksOSArMTQ5LDggQEAgdm9pZCBGaW5kSW5kaWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVIKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnNhdmUoKTsKICAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRl
UmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciwgdmVy
dGljYWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIpOwogICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hh
ZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOwotICAgICAgICBn
cmFwaGljc0NvbnRleHQuYWRkUGF0aChwYXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0aFJlY3Qs
IGNvcm5lclJhZGl1cykpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGxp
Z2h0Qm9yZGVyQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGdyYXBoaWNz
Q29udGV4dC5maWxsUGF0aCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgocGF0
aFdpdGhSb3VuZGVkUmVjdChvdXRlclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKIAogICAgICAgICBncmFwaGljc0NvbnRleHQuc2F2
ZSgpOwo=
</data>
<flag name="review"
          id="65896"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>